Warning: Undefined array key "cperpage" in /www/wwwroot/www.now163.com/wp-content/themes/twentytwentyfive/functions.php on line 255

Warning: Undefined variable $output in /www/wwwroot/www.now163.com/wp-content/themes/twentytwentyfive/functions.php on line 325

Warning: Undefined variable $fixed_tags in /www/wwwroot/www.now163.com/wp-content/themes/twentytwentyfive/functions.php on line 326

Warning: Undefined variable $isshowdots in /www/wwwroot/www.now163.com/wp-content/themes/twentytwentyfive/functions.php on line 327

Warning: Undefined variable $tag_aditional in /www/wwwroot/www.now163.com/wp-content/themes/twentytwentyfive/functions.php on line 330

Warning: Undefined variable $tag_aditional in /www/wwwroot/www.now163.com/wp-content/themes/twentytwentyfive/functions.php on line 333

Warning: Undefined variable $tag_aditional in /www/wwwroot/www.now163.com/wp-content/themes/twentytwentyfive/functions.php on line 336

Warning: Undefined variable $post in /www/wwwroot/www.now163.com/wp-content/themes/twentytwentyfive/functions.php on line 345

Warning: Attempt to read property "ID" on null in /www/wwwroot/www.now163.com/wp-content/themes/twentytwentyfive/functions.php on line 345

Warning: Undefined variable $post in /www/wwwroot/www.now163.com/wp-content/themes/twentytwentyfive/functions.php on line 345

Warning: Attempt to read property "ID" on null in /www/wwwroot/www.now163.com/wp-content/themes/twentytwentyfive/functions.php on line 345

Warning: Undefined variable $more_text_link in /www/wwwroot/www.now163.com/wp-content/themes/twentytwentyfive/functions.php on line 345
理想社会 – 记载我的成功之路

博客

  • 单线融合IPTV到家庭局域网最简单的方法:路由+桥接混合模式

    单线融合IPTV到家庭局域网最简单的方法:路由+桥接混合模式

    以北京联通为例。同时也兼容VLAN绑定或双网线物理端口绑定的情况。

    目录

    前言

    注意,你应该用有线网进行操作!如果你只有WiFi,那么你需要进行到组播转单播才可以正常观看

    注意,如果你用的不是官方Openwrt,而是魔改版本,那么本文涉及的一些软件包可能并不兼容,它们只保证兼容官方的正式版Openwrt。

    如今,光纤入户得到普及,运营商往往提供具有路由功能的光猫(家庭网关)。默认情况下,路由模式的光猫已经配置好IPTV业务,用户可以即插即用。但是,运营商提供的光猫路由可能不能满足一些具有动手能力的用户的需要,所以我们往往只把光猫作为光网桥接设备,然后使用自己购买的路由器作为真正的家庭网关。

    光猫桥接+自购路由,会使得IPTV业务可能无法在自购路由器上实现。这种情况下,只能再单独用一根网线把IPTV机顶盒接到光猫上,失去了灵活性。而且,这样一来,也无法在家中的其它任何设备上观看IPTV的直播流了。

    如果你需要在光猫桥接上网的情况下,获得光猫路由一样的IPTV体验,那么本文适合你。

    本文虽然是以单线融合为目标,但作为一种融合方法,也适用于非单线,或者使用VLAN的情况。这两种情况的朋友可以按需参考。

    • 单线、光猫不绑定VLAN、不绑定物理端口:本文说的就是这种情况
    • 单线、光猫可以绑定VLAN:第二步的时候,用不同的VLAN建立对应接口即可
    • 双线、光猫绑定物理端口:第二步的时候,用不同的物理端口建立对应接口即可

    基础知识

    本文虽然是讲的北京联通IPTV的使用经验,但IPTV的原理大同小异,其它地区和ISP也可以参考。

    一般来说,国内运营商是通过机顶盒连接以太网提供IPTV内容服务的。其中主要包括三个方面:

    • 组播(multicast)数据代理到家庭网络,这是IPTV直播视频流的数据来源
    • 将IPTV内容服务网络连接到家庭网络,这是IPTV的机顶盒界面、点播等应用的数据来源
    • 对IPTV的用户权限进行认证,这个认证可能是机顶盒做的,也可能是光猫做的

    组播是标准的协议,这部分最容易实现。

    但是,各家把IPTV的内容服务网络接入家庭,以及对用户权限认证的方法各不相同。如果你仅仅是需要在电脑或其它设备上观看IPTV直播内容,那么后两者不解决也没问题。但如果你想进行节目时移回看,就必须在机顶盒里进行操作,这就需要后两者的实现了。

    北京联通对IPTV的用户认证都是在机顶盒里进行的,所以光猫或路由器不涉及认证的操作。其它地区,例如上海电信的IPTV,采用了较为复杂的DHCP Option、AB面认证,可能不适用于本文。你如果在其它地区,也可以尝试本文所提供的方法;如果你对整个过程的技术原理有自己的理解,欢迎你补充其它地区所需的方法。

    不使用VLAN实现单线传输需要满足以下条件:

    • Internet和IPTV业务都不绑定端口
    • 机顶盒没有复杂的DHCP Option、AB面认证
    • IPTV业务在光猫中配置为路由模式
    • Internet在光猫中配置为桥接模式(不然它是路由模式的话,本文也就失去了意义)

    第一步:光猫改桥接

    运营商的光猫通过TR069协议,从局端下发配置到家。运营商一般把光猫设置为路由模式,这种情况下光猫如果再接路由器,就成了两层路由,需要两层NAT,会损失很多功能和性能。

    以往,许多运营商拒绝给用户改光猫桥接。但今年北京联通开始支持局端下发配置改桥接,你只需要拨打客服电话,或者联系小区的宽带维修师傅,就可以改桥接了。

    桥接的方法

    推荐通过运营商客服改桥接,这是最简单、稳定的办法,也不受以后运营商参数调整的影响。

    如果运营商拒绝改桥接,那么只能选择:

    • 破解光猫的管理权限,网上有不少教程
    • 淘宝上买光猫,配置好认证参数

    然后再自己设置桥接。

    自己设置桥接,推荐Internet采用桥接模式,IPTV采用路由模式,并且不要绑定端口。也不需要设置VLAN之类的更复杂的东西。

    以下这个配置是北京联通官方采用的配置。可以看到,Internet是Bridge,IPTV是DHCP。这是指,路由器连接到光猫的时候,可以通过PPPoE拨号连接Internet,以及通过DHCP获取光猫的路由地址,从而访问IPTV的网络。

    北京联通官方的桥接上网配置

    北京联通的IPTV光猫配置一般是:

    • IPoE封装
    • VLAN ID:3964
    • 组播VLAN:4000

    如果你自己设置光猫,确认以上参数后,记得WAN类型选“路由WAN”而不是“桥接WAN”之类的。许多地区的ISP应该是类似的。

    下面的步骤都在这个前提下进行。

    当然,如果你的光猫支持配置VLAN,也可以使用VLAN来同时传输Internet和IPTV业务,以下的步骤也兼容用VLAN的方式。你也可以采用端口绑定,用两根网线分别传输Internet和IPTV,也是一样的。但IPTV路由+Internet桥接,是最简单的方式,也是北京联通官方的配置方式。

    确认你的网络结构

    1. 如果是联通官方的桥接配置,或者根据上一节建议的配置
       光纤 —— 光猫 —— 路由器 —— 各种设备
    2. 如果你的Internet和IPTV业务分别绑定了不同的光猫端口(不推荐,不适用于本文)
       光纤
       │
       光猫
       │
       ├─路由器
       └─IPTV机顶盒

    第二步:Openwrt 路由器及基本配置

    Openwrt是一个嵌入式的Linux操作系统。你可以在这里查看你的硬件是否被支持,网上也能找到很多刷机教程。或者你可以一步到位,去淘宝选购x86架构的软路由,得到最佳的性能和可扩展性。

    在这里我推荐官方版本的固件,而不是别人修改、编译的固件。因为Openwrt的功能都是可以通过软件包的形式扩展的,你完全可以从官方固件开始定制自己的版本。Openwrt的编译也很容易,你完全可以自己编译一个适合自己的硬件和应用需求的固件。这些本文都不讨论。

    目前,Openwrt的最新版本是19.07,本文都是基于这个版本。我们从安装了官方版的19.07系统开始。

    设置接口

    默认状态下,Openwrt 19.07会生成3个接口,分别是LAN、WAN、WAN6。在在北京联通的桥接状态下,WAN6是用不到的,可以先直接删除。

    以x86软路由为例,默认是LAN绑定eth0,WAN绑定eth1。你可以修改LAN勾选添加其它物理接口,但我不建议你交换默认的WAN/LAN物理接口,因为这样会给以后刷机带来不便。把台式电脑接到eth0,以后重置固件配置也不会引起问题。

    这时候去看一下光猫底部的标签,默认是什么网关地址。你必须修改LAN的地址为另一个网段,比方说192.168.2.1。你也可以选择连接光猫的无线网络,用光猫底部的用户名和密码登录,修改光猫的网关地址,比如把光猫改为192.168.100.1。只要保证二者的网关地址不同,你应该就可以直接在连接路由器的情况下直接访问光猫的管理界面了。

    这时候有两个选择:

    • 选项1:保留WAN作为光猫和IPTV的上行链路,然后新建一个PPPoE连接来访问Internet
    • 选项2:修改WAN作为Internet的PPPoE连接,再新建一个IPTV的上行链路。

    我采取选项1。(如果你采用选项2,那么下面的一些设置将不一样,需要注意。)

    首先关闭WAN,然后新建一个叫做internet的接口,防火墙选WAN区域。用PPPoE协议,填入你的宽带账号密码。

    image.png

    这时候应该可以上网了,检查下能不能上网,然后继续。

    网关跃点

    下面设置网关跃点,也就是不同接口的优先级顺序。

    image.png

    把INTERNET设为10,WAN设为20。

    应用生效后,重新启用WAN接口

    最后在“概览”里,看到的路由器接口配置如下:

    image.png

    这时候,应该能够正常上网了,检查一下是否能正常上网。但还不能观看IPTV,因为组播还是不生效的。因为我们需要利用组播代理软件把组播引入家庭网络中来。

    第三步:组播代理到家庭网络

    接下来是要让IPTV组播正常工作,设置完这一节的内容,你就可以在电脑、手机或者智能电视上观看IPTV直播流了。

    组播代理

    启用LAN的IGMP嗅探。

    image.png

    luci-app-omcproxy 现在包含在官方的 luci 软件源中了,使用 openwrt 21.02 或 19.07 分支就能找到它。

    image.png

    如果你使用Openwrt 18.06,则需要自己编译

    在系统-软件包里先点更新,如果没有错误(有错误基本上是因为网络或者防火长城的问题),就上传软件包安装。

    在“服务-组播代理”里,上行链路选WAN(以你配置的IPTV接口为准),下行链路选LAN。应用生效。

    image.png

    北京联通可以参考这个项目最好用的北京联通IPTV频道列表,你可以存为m3u文件,或直接打开该m3u地址。推荐使用VLC播放。

    Snipaste_2019-12-08_16-13-21.jpg

    这时候应该可以看IPTV的直播节目了。你也可以自己扫描节目单。python win linux

    如果你的电脑还是无法观看节目,请检查下它是否有多个以太网接口。如果是多个的话,把连接路由器的那个以太网适配器的TCP/IP协议的网关跃点,设成所有接口的最小值。

    但注意,这时只能用组播方式观看IPTV。组播意味着只有有线局域网(以太网)支持。

    组播转单播

    如果要用WiFi观看,还需要做一个组播转单播的代理。

    在软件包里搜索安装luci-i18n-udpxy-zh-cn。设置上下行设备端口,并启用。Source Interface就是你连接光猫IPTV业务的那个物理设备的名称,你可以在“概览”里找到它。

    image.png

    添加一条防火墙规则。

    image.png

    把节目表里的rtp://批量替换成http://你的路由器地址:udpxy端口号/rtp/就可以了,这个播放列表支持任意设备播放。你甚至还可以通过设置端口转发,在任何地方观看家里的IPTV。

    通过上传处理好的播放列表到手机版的VLC,就可以随时用移动设备观看IPTV直播了。

    到这里,如果你仅仅是想观看IPTV的直播节目,这些已经足够了。如果你还需要使用机顶盒,那么继续……

    第四步:融合IPTV内容服务网络到家庭网络

    (不使用机顶盒的话可以跳过)

    机顶盒的内容网络需要通过策略路由的方式来引入家庭网络。这样才能够正常启动机顶盒,使用节目回放等功能。

    使用IPTV帮手

    下载openwrt-iptvhelper里面的三个ipk包,没错,这也是在下的作品!

    依次安装iptvhelerluci-app-iptvhelperluci-i18n-iptvhelper-zh-cn三个包。

    确保IPTV的机顶盒通过以太网连接到了路由器,打开IPTV的电源。这时候IPTV应该是不能正常通过认证的,先别慌。

    在“服务-IPTV帮手”里,选择机顶盒的MAC地址,确保勾选“创建ipset”。然后应用。

    image.png

    配置MWAN3

    在软件包里搜索luci-i18n-mwan3-zh-cn安装。在“网络-负载均衡”里,第一次进入你会看到有好多规则已经创建了,首先你要删光每一页。

    然后添加waninternet两个接口,其它选项一律默认。其余的设置,参考我的配置截图。

    如果你想监测接口是否在线,你可以去光猫抄一下IPTV的DNS服务器,以及在Openwrt的概况中看到Internet的DNS服务器,把它们作为监测的IP。不要太频繁地ping,设为每1分钟或5分钟就好。

    如果你设置好了两个接口的ping检测,你应该可以在概况里看到如下状态:

    image.png

    关键的来了,要在iptv_rule里,选择ipset的设置为iptvhelper_default

    image.png

    然后应用设置,你应该可以重启机顶盒,然后进入机顶盒的应用画面了。第一次启动可能时间会稍微就一点点。

    在路由器的系统日志里,应该可以看到类似于iptvhelper.default:IN=br-lan OUT****这样的日志内容,那就是正确无误了。

    如果你用ipset方式遇到问题,则可以不采用ipset方式,而是只给机顶盒ip(红框里的)地址配置路由策略:

    Snipaste_2020-06-14_22-53-12.png

    到此为止,IPTV业务已经完全无缝地融入家庭网络啦。你可以在任何网络接口用机顶盒了,也可以支持多个机顶盒。

    总结

    以上应用经验的要点有:

    • 单线融合IPTV其实并不一定需要VLAN。以往有许多朋友分享使用VLAN来进行IPTV与Internet的单线传输,需要光猫支持VLAN绑定,配置比较复杂。有的光猫不一定支持VLAN绑定,但支持同一个端口同时使用DHCP和PPPoE两种下行地址获取方式。但其实光猫如果使用IPTV路由模式、Internet PPPoE模式,是可以在Openwrt里用同一个物理接口创建两个不同的逻辑接口的,效果和VLAN一样。网关跃点的配置指定了Internet优先级最高,避免了IPTV的路由干扰。
    • 组播代理有很多Openwrt软件可以用,比方说igmpproxy,但它比较老了。还有mcproxy,它的功能更为复杂,配置也更为复杂,体积也比omcproxy大不少。所以我选择omcproxy,它对于那些廉价的普通路由器来说也很友好,并且支持最新的组播协议,包括IPv6组播(虽然暂时用不上)。
    • udpproxy实现了组播转单播,如果你打算转发到公网,确保你的地址没有被泄露或被扫描,不然你就免费提供了一个节目源……
    • mwan3本来是用来做多线wan接入的,玩多拨、多网的朋友会用到。会配置的话,想要同时融合多家IPTV运营商进来也是没问题的,我的iptvhelper也支持创建多个机顶盒的配置,omcproxy也支持多个实例……但这样玩的人应该是少之又少吧……

    iptvhelper目前只对北京联通的IPTV使用情况进行了适配。不同的地区、不同的运营商,有别于北京联通IPTV的需求,可以在Github上提交issue。特别是当你已经通过自定义脚本、配置,设置成功了当地的IPTV,欢迎把经验告诉我,我会考虑把必要的功能放进未来的版本中,这样就能惠及更多地区的IPTV用户了。

  • centos7安装cmake3版本

    1、首先安装编译需要的工具包:

    yum install -y gcc gcc-c++ make automake wget

    2、去https://cmake.org/files/下载需要的cmake版本

    3、解压cmake3.xx.x,进入源码文件夹

    tar zxvf cmake3.xx.x && cd cmake3.xx.x

    4、运行booststrap

    ./bootstrap

    5、编译

    gmake

    6、安装

    gmake install

    安装完成后可以通过cmake –version查看当前的版本。

  • 批量设置用户quota磁盘配额

    1、先给一个已存在的用户建好配额:

    a:修改/etc/fstab文件(如:LABEL=/     /  ext3  defaults,usrquota,grquota    1   1)

    b:重新启动系统使设置生效:reboot

    c:创建配额文件:quotacheck -cmug / (查看已建立的配额文件:ls /aquota.*)

    d:设置配额:edquota -u 用户名

    使用quota -u 用户名查询配额

    repquota -u /  显示配额

    quotaoff |on -auvg关闭或开启配额

    2、#users=`awk ‘BEGIN {FS=”:”} {if ($3>500) print $1}’ /etc/passwd`(第一个和最后一个符号是 `反撇号即esc下面的键)

    3、显示上面的赋值:echo $users

    4、edquota -p 用户名 $users

  • ubuntu20.04 bind 服务添加日志信息

    网络中心发来了实验室内挖矿的记录,要求排查。看记录的日志是通过dns查询来判断是否有挖矿行为的。

    我们有自建DNS服务器。开启日志记录,就可以查到是哪一台内网机器在挖矿了。

    在named.conf添加如下信息开启日志记录。

    logging {
    channel query_log { #这段是对日志文件的定义
    file “query.log” versions 5 size 20m; #定义文件名,文件大小
    severity info; #日志级别
    print-time yes; #是否输出日期
    print-category yes; #是否输出日志类型
    };
    category queries {
    query_log;
    };
    };

    修改后保存,重启一下bind服务。

    systemctl restart bind9

    query_log默认会保存在/var/cache/bind下。

     

  • Linux logout all other users

    Linux logout all other users

    If you would like to logout other users, you must login as root user. Next you need to use the pkill command.

    pkill command syntax

    The syntax is:

    pkill -KILL -u {username}

    Warning: Do not kill root user or other system level user process. The following example, will kill all process on your server. Do not run the pkill for root user:
    pkill -KILL -u root

    To see list of logged in user type who or w command:
    # who
    OR
    # w
    To logout a user called raj, enter:
    # pkill -KILL -u raj
    OR
    $ sudo pkill -KILL -u raj

  • Exchange2010/2013/2016删除指定主题邮件

    说到Exchange服务,大家并不陌生了,但是作为一个Exchange管理员的话,随时都在学习中,近期有个问题,用户发错邮件了,说能不能把用户收到的主题邮件进行删除,所以就同意帮用户删除指定主题的邮件了,具体操作见下:

    在Exchange中我们可以使用search-mailbox命令在邮箱中就行搜索然后再次删除的操作可以实现邮件的关键性搜索及删除操作。在操作前,我们需要明确的是删除指定用户的主题邮件还是组织中的所有用户的主题邮件,当然不管哪种方式操作方法都是一样的,只是命令稍微不一样而已;但是在操作之前我们需要注意的是,只有管理员用户有以下权限才可以对 用户邮箱中搜搜及删除邮件:

    邮箱搜索:利用此角色,您可以跨组织中的多个邮箱搜索邮件。默认情况下不会向管理员分配此角色。要向自己分配此角色以便搜索邮箱,请将您自己添加为“发现管理”角色组的成员。

    邮箱导入导出: 此角色允许您从用户邮箱删除邮件。默认情况下,不向任何角色组分配此角色。若要从用户邮箱删除邮件,您可以将“邮箱导入导出”角色添加到“组织管理”角色组。

    1.管理员本身需要加入organization Management, Domain admins, Enterprise admins, Schema admins;

    2.此外,把管理员加到 “Discovery Management”组;

    3.再给管理员加额外权限:

    New-ManagementRoleAssignment -Role “Mailbox Import Export” -User “admin账号”

    注意如果我们不赋予权限的话,执行的话会提示没有相关的命令:

    我们 按照提示,需要运行search-mailbox命令,但是我们发现提示没有searh-mailbox这个命令,运行这个命令前需要添加一个mailbox import export权限

    New-ManagementRoleAssignment –Role “Mailbox Import Export” –User ixmsoft\administrator

    添加权限后,然后再把命令提示符关闭,重新打开运行命令就可以了。

    此示例将搜索组织的所有邮箱,查找主题行为“下载此文件”邮件,然后将其永久删除。

    Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery ‘Subject:”Download this file”‘ -DeleteContent

    当然如果要删除指定用户的主题邮件的话,我们只需以下命令即可

    Search-Mailbox -Identity “gaowenlong” -SearchQuery ‘Subject:”Download this file”‘ -DeleteContent

    本文转自 高文龙 51CTO博客,原文链接:http://blog.51cto.com/gaowenlong/1742046,如需转载请自行联系原作者

    针对所有邮箱:

     

    
    
    Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery 'Subject:"标题内容"' –DeleteContent
    
    

     

    针对单个邮箱:

    
    

     

    Search-Mailbox -Identity “单个邮箱的名字” -SearchQuery ‘Subject:”标题内容“‘ –DeleteContent

    
    

     

    针对通讯组:

    
    

     

    Get-DistributiongroupMember <通讯组名字> | Search-Mailbox -SearchQuery ‘Subject:”标题内容“‘ -DeleteContent -Force:$TRUE

     

     

  • Cisco交换机里IP和MAC地址互查找出对应端口

    交换机:Cisco2960、Cisco G3560X

    服务器:10.15.44.164 AC-*-2D-*-84-*

    PC:10.15.44.69

    服务器44.164→port 2-Cisco2960-port1→G3560X-port5

    通过IP地址查找这个IP在那台交换机的接口下

     

    通过MAC、IP地址查询对应交换机端口

    1.开始运行Nbtstat –a ip 查询出mac地址

    或者直接到G3560X交换机上通过show arp查找mac地址

    没发现对应关系是ARP信息超时了就被删除,ARP和MAC两张表的超时清理时间是不一样的,可以先到交换机上去ping下该IP地址在show arp

    2.登陆G3560x

    运行Switch#show mac address-table dynamic address AC-*-2D-*-84-*

    可以看到mac地址为AC-*-2D-*-84-*连接G3560X交换机的端口是port5

    3. 根据GigabitEthernet0/5查询该接口对接的设备

    运行Switch#SHOw cdp neighbors gigabitEthernet 0/5

    显示更详细的信息:Switch#SHOw cdp neighbors gigabitEthernet 0/5 detail

    可以看到G0/5对接的设备是Cisco2960交换机的fas0/1端口

    4.登陆Cisco2960,

    运行cisco2960-sh-10-4-4#show mac address-table dynamic address AC-*-2D-*-84-*

    可以看到mac地址为AC-*-2D-*-84-*连接C2960交换机的端口是port9

    5.确认该mac是否是这个端口唯一活动mac地址

    运行cisco2960-sh-10-4-4#show mac address-table dynamic interface gigabitEthernet 0/9

    只显示一条,表明10.15.44.164就是连接到C2960交换机的9口;若有多条结果表明C2960 port9下接的还有其他路由交换设备,重复以上步骤查找

     

    通过交换机端口地址查询对应服务器IP

    上面通过IP查到了所连交换机对应的端口,下面通过交换机端口查询连接的是那台服务器,环境还是如上

    查看C3650X port11对应连接的是哪台服务器,步骤和上面类似,逆推

    1、查看C3650X port11查接口对接的设备mac地址

     

    运行Switch#show mac address-table dynamic interface gigabitEthernet 0/11

     

     

    1、通过mac地址查看对应IP

    运行show arp | include mac_address

    ARP和MAC两张表的超时清理时间是不一样的。使用Switch#clear arp-cache 可以清除arp信息表,使用Switch#show interfaces gigabitEthernet 0/11可以查看arp刷新时间  ARP type: ARPA, ARP Timeout 04:00:00;没发现对应关系是ARP信息超时了就被删除,如何刷新arp表有知道的大神请指教!

    本文出自 “我本不是菜鸟” 博客,请务必保留此出处http://pvbutler.blog.51cto.com/7662323/1748384

  • WinRAR批量解压子目录下的压缩包

    @echo off
    for /r . %%a in (*.zip) do (
    cd “%%~pa”
    “C:\Program Files\WinRAR\WinRAR.exe” e “%%a”
    del “%%a”
    )

  • Exchange2010/2013 Send Welcome Email to New Mailbox / New Users

    Let’s understand how to configure Exchange Server to send welcome email:

    What is Cmdlet Extension Agents?

    Cmdlet extension agents are components in Microsoft Exchange Server 2013/Exchange Server 2010 invoked by Exchange 2013/2010 cmdlets when the cmdlets run. Every time an Exchange cmdlet is run, the cmdlet calls the Scripting Agent cmdlet extension agent. When this agent is called, the cmdlet checks whether any scripts are configured to be called by the cmdlet. If a script should be run for a cmdlet, the cmdlet tries to call any APIs defined in the script. Cmdlet extension agents are available on any server role.

    Implementation:

    As you got an idea on the Cmdlet Extension Agent, I will go ahead and explain how we can use the feature to generate welcome email for the new mailboxes that we create.

    When we create new mailbox in Exchange 2010/2013,  new-mailbox command is used (whether it is Exchange Management Shell or Exchange Management Console). You can enhance the behavior of the command by using Cmdlet Extension. It is like triggering a script whenever new-mailbox command is used.

    In order to use the feature, we need to,

    –          Deploy XML file on all the exchange servers.

    –          Enable “Scripting Agent”.

     

    How to deploy XML files?

    On all the exchange servers, the exchange setup copies the file “ScriptingAgentConfig.xml.sample” to <installation path>\Bin\CmdletExtensionAgents\.  The file is a kind of sample/template. We can modify the file to meet our requirement or we can make our own XML file. I have detailed the steps to modify the sample file to send welcome email.

    Note: The sample XML contains other feature blocks. If you are appending the below steps as it is without making changes to other feature blocks, you may receive unexpected warning while create new mailbox. If you are not using cmdlet-extension sample file for any other purpose/tasks, I would suggest you keep only the Welcome Email Feature block as it is in XML file provided in the attached zip file.

    Step #1:

    Create a welcome email template in html format that will be sent as welcome email or use the exiting template attached to the blog to suit your requirement. Easiest way to create welcome email template would be, open new message in Outlook, compose the email and save it as HTML. 

    Step #2:

    Make a copy of the existing XML file and rename it to ScriptingAgentConfig.xml. Keep the file in <installation path>\Bin\CmdletExtensionAgents\.

    Step #3:

    Replace the following content:

    1. $tempmsg= [string] (get-content (“c:\welcome\WelcomeMSG.htm“))
    2. $HUBServer=”20.1.1.2
    3. $WelcomeEMail.From=administrator@e2k10.com
    4. $WelcomeEMail.Subject=”Welcome to Contoso IT !!!

    How to manage/enable Cmdlet Extension Agent?

    After the XML file updated with script, you need to enable the agent to call the XML file and the script whenever new-mailbox used. You can view the agent status by running the command:

    Get-CmdletExtensionAgent | FT Name,Enabled

    By default,“Scripting Agent” is disabled. You can enable it using the command,

    Enable-CmdletExtensionAgent “Scripting Agent”

    When you wanted to disable the “Scripting Agent” , run the command ,

    Disable-CmdletExtensionAgent “Scripting Agent”

    Enabling or disabling CmdletExtension does not require restart of the server or exchange services in a normal scenario. It is a global command and applicable to all the exchange servers in the organization. So you have to update the XML file on all the exchange servers. If the XML files is not updated on any of the exchange server and you run any non-Get cmdlets, the cmdlet will fail.

    Downlod: WelcomeMSG

    Related articles :

    https://gallery.technet.microsoft.com/office/Send-Welcome-Email-to-New-88cde35c

    http://blog.51cto.com/johnsonchen/1860377

  • Linux下批量创建删除账号

    1、批量创建用户

    cat adduser.sh 
    #!/bin/bash
    #
    for username in $(more users.list)
    do
    if [ -n $username ]
    then
    useradd $username -g student -d /pub/home/$username
    echo
    echo $username"xyz" | passwd --stdin $username
    chage -d 0 $username
    echo $username "has been created!"
    else
    echo "The username is null!"
    fi
    done

    2、批量删除用户

    cat deluser.sh 
    #!/bin/bash
    #
    for username in $(more users.list)
    do
    if [ -n $username ]
    then
     userdel $username
     echo
     echo $username "has been deleted!"
    else
     echo "The username is null!"
    fi
    done
    

    3、创建users.list,将需要批量创建的有用户填入,一行一个。