深入挖掘Windows脚本技术(8)
2008-2-28 13:50:30
这个脚本的效果是:当“后台打印”服务(spooler)状态改变为停止时,消费者将进行处理——重启spooler。
先net start spooler,然后net stop spooler。最多5秒钟,spooler又会启动。
直接运行上面的脚本会出错,因为“活动脚本事件消费者”(ActiveScriptEventConsumer ASEC)默认没有被安装到root\cimv2名字空间。
用记事本打开%windir%\system32\wbem\scrcons.mof,将第一行“#pragma namespace ("\\\\.\\Root\\Default")”删除,或者修改为“#pragma namespace ("\\\\.\\Root\\cimv2")”。XP/2003没有这一行,不用修改。
然后执行下面这个命令:
C:\WINNT\system32\wbem>mofcomp.exe -N:root\cimv2 scrcons.mof
Microsoft (R) 32-bit MOF 汇编器版本 1.50.1085.0007
版权所有 (c) Microsoft Corp. 1997-1999。保留所有权利。
正在分析 MOF 文件: scrcons.mof
MOF 文件分析成功
将数据储存到储备库中...
已完成!
这样就把ASEC安装到root\cimv2了。mofcomp.exe和scrcons.mof都是系统自带的。
2000默认将ASEC安装到root\default名字空间,而XP/2003默认已经安装到root\subscription名字空间,但由于事件过滤器不能跨名字空间捕捉事件(XP/2003可以),事件绑定也不能跨名字空间,而大部分事件都在root\cimv2产生,所以需要重新安装ASEC到事件源所在的名字空间。下面这个脚本自动完成ASEC重安装任务。
set shl=createobject("WScript.Shell")
set fso=createobject("Scripting.FileSystemObject")
path=shl.expandenvironmentstrings("%windir%\system32\wbem\")
set mof=fso.opentextfile(path&"scrcons.mof",1,false,-1) 'mof都是Unicode格式的'
mofs=mof.readall
mof.close
mofs=replace(mofs,"\\Default","\\cimv2",1,1) '替换默认的名字空间'
mofp=path&"asecimv2.mof"
set mof=fso.createtextfile(mofp,false,true) '创建临时mof文件'
mof.write mofs
mof.close
shl.run path&"mofcomp.exe -N:root\cimv2 "&mofp,0,true '安装到root\cimv2'
fso.deletefile(mofp)
wscript.echo "安装完成"
注销永久事件:
nslink="winmgmts:\\.\root\cimv2:"
myconsumer="stopped_spooler_restart_consumer" '指定消费者的名字'
myfilter="stopped_spooler_filter" '指定过滤器的名字'
set binds=getobject(nslink&"__FilterToConsumerBinding").instances_
for each bind in binds
if strcomp(right(bind.consumer,len(myconsumer)+1),myconsumer&chr(34),1)=0 _
and strcomp(right(bind.filter,len(myfilter)+1),myfilter&chr(34),1)=0 then
getobject("winmgmts:"&bind.consumer).delete_ '删除消费者'
getobject("winmgmts:"&bind.filter).delete_ '删除过滤器'
bind.delete_ '删除绑定'
exit for
end if
next
wscript.echo "卸载完成"
除了ASEC,WMI还提供其他永久事件消费者,比如SMTPEventConsumer。当系统出现异常时,可以通过它自动给管理员的信箱发信。WMITools里的WMI Event Registration用于创建、修改、删除指定名字空间里的永久事件消费者、事件过滤器和计时器事件源的实例,以及绑定或解除绑定它们。
关于事件处理机制的各个部分,在《WMI技术指南》里有详细的讲述,MSDN里当然更全面。我就点到为止了。
(看累了吧,喝口水,休息一下 ^_^)
本文转摘自『IT学习者』http://www.itlearner.com/article/2008/4024_4.shtml
先net start spooler,然后net stop spooler。最多5秒钟,spooler又会启动。
直接运行上面的脚本会出错,因为“活动脚本事件消费者”(ActiveScriptEventConsumer ASEC)默认没有被安装到root\cimv2名字空间。
用记事本打开%windir%\system32\wbem\scrcons.mof,将第一行“#pragma namespace ("\\\\.\\Root\\Default")”删除,或者修改为“#pragma namespace ("\\\\.\\Root\\cimv2")”。XP/2003没有这一行,不用修改。
然后执行下面这个命令:
C:\WINNT\system32\wbem>mofcomp.exe -N:root\cimv2 scrcons.mof
Microsoft (R) 32-bit MOF 汇编器版本 1.50.1085.0007
版权所有 (c) Microsoft Corp. 1997-1999。保留所有权利。
正在分析 MOF 文件: scrcons.mof
MOF 文件分析成功
将数据储存到储备库中...
已完成!
这样就把ASEC安装到root\cimv2了。mofcomp.exe和scrcons.mof都是系统自带的。
2000默认将ASEC安装到root\default名字空间,而XP/2003默认已经安装到root\subscription名字空间,但由于事件过滤器不能跨名字空间捕捉事件(XP/2003可以),事件绑定也不能跨名字空间,而大部分事件都在root\cimv2产生,所以需要重新安装ASEC到事件源所在的名字空间。下面这个脚本自动完成ASEC重安装任务。
set shl=createobject("WScript.Shell")
set fso=createobject("Scripting.FileSystemObject")
path=shl.expandenvironmentstrings("%windir%\system32\wbem\")
set mof=fso.opentextfile(path&"scrcons.mof",1,false,-1) 'mof都是Unicode格式的'
mofs=mof.readall
mof.close
mofs=replace(mofs,"\\Default","\\cimv2",1,1) '替换默认的名字空间'
mofp=path&"asecimv2.mof"
set mof=fso.createtextfile(mofp,false,true) '创建临时mof文件'
mof.write mofs
mof.close
shl.run path&"mofcomp.exe -N:root\cimv2 "&mofp,0,true '安装到root\cimv2'
fso.deletefile(mofp)
wscript.echo "安装完成"
注销永久事件:
nslink="winmgmts:\\.\root\cimv2:"
myconsumer="stopped_spooler_restart_consumer" '指定消费者的名字'
myfilter="stopped_spooler_filter" '指定过滤器的名字'
set binds=getobject(nslink&"__FilterToConsumerBinding").instances_
for each bind in binds
if strcomp(right(bind.consumer,len(myconsumer)+1),myconsumer&chr(34),1)=0 _
and strcomp(right(bind.filter,len(myfilter)+1),myfilter&chr(34),1)=0 then
getobject("winmgmts:"&bind.consumer).delete_ '删除消费者'
getobject("winmgmts:"&bind.filter).delete_ '删除过滤器'
bind.delete_ '删除绑定'
exit for
end if
next
wscript.echo "卸载完成"
除了ASEC,WMI还提供其他永久事件消费者,比如SMTPEventConsumer。当系统出现异常时,可以通过它自动给管理员的信箱发信。WMITools里的WMI Event Registration用于创建、修改、删除指定名字空间里的永久事件消费者、事件过滤器和计时器事件源的实例,以及绑定或解除绑定它们。
关于事件处理机制的各个部分,在《WMI技术指南》里有详细的讲述,MSDN里当然更全面。我就点到为止了。
(看累了吧,喝口水,休息一下 ^_^)
本文转摘自『IT学习者』http://www.itlearner.com/article/2008/4024_4.shtml
责任编辑:
- 相关文章
