Windows环境下并发处理远程脚本

[背景]公司最近上了百余台服务器,为了给cacti监控而开启了snmp,要更改snmp的共同体和可以接受来自那些机子的SNMP包.如果手工加的话,效率可想而知.所以就想到了用脚本WMI(snmp.vbs),但是在用psexec远程执行这个脚本也是很慢,因为它们是顺序性的,所以处理效率还是慢.所以,想到了批处理的并发(pro.bat和psexec.bat),这样不是更好嘛!
[过程]
snmp.vbs
const HKEY_LOCAL_MACHINE = &H80000002  
strComputer = "."
IP1="x.x.x.x"
IP2="x.x.x.x"
COMM="xxxx"
Set objRegistry=GetObject("winmgmts://"&strComputer&"/root/default:StdRegProv")
strKeyPath = "SYSTEM\CurrentControlSet\Services\SNMP\Parameters\PermittedManagers"
strValueName = "1"
objRegistry.Delet.ue HKEY_LOCAL_MACHINE, strKeyPath, strValueName
dwValue1=IP1
objRegistry.SetStringValue HKEY_LOCAL_MACHINE, strKeyPath, strValueName, dwValue1
dwValue2=IP2
strValueName1 = "2"
objRegistry.SetStringValue HKEY_LOCAL_MACHINE, strKeyPath, strValueName1, dwValue2
strKeyPath1 = "SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities"
strValueName = "public"
objRegistry.Delet.ue HKEY_LOCAL_MACHINE, strKeyPath1, strValueName
dwValue3="4"
strValueName1 = COMM
objRegistry.SetDWORDValue HKEY_LOCAL_MACHINE, strKeyPath1, strValueName1, dwValue3

Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery _
("Select * from Win32_Service where Name='SNMP'")
For each objService in colServiceList
errReturn = objService.StartService()
Next
W..Sleep 20000
Set colServiceList = objWMIService.ExecQuery("Associators of " _
& "{Win32_Service.Name='SNMP'} Where " _
& "AssocClass=Win32_DependentService " & "Role=Dependent" )
For each objService in colServiceList
objService.StartService()
Next
 
pro.bat
for /l %%i in (1,1,254) do (start /min cmd /c psexec.bat x.x.x.%%i)
psexec.bat
psexec \\%1 -u admin -p pass cmd /c c:/snmp.vbs
if %errorlevel%==0 (echo %1 OK>>log.txt) else (echo %1 fail>>log.txt)
[结果]
     这样在客户端只要执行pro.bat,在客户端就会打开254个cmd端口,就像个多进程样去执行snmp.vbs.至于结果可以看log.txt文件.

本文出自 “坏男孩” 博客,转载请与作者联系!

你可能感兴趣的:(职场,休闲)