最近接到一个差事:写一个远程安装应用程序的东西。因为有个工程是用于网络管理的,需要在每台终端上安装一个客户端。开始的时候考虑用NetBios编程,但是遇到些问题无法解决,应该是本人功力还不够。后来发现WMI可以实现这样的功能,不但可以远程运行应用程序,还可以把本地的文件拷贝到远程机器上去,当然前提是远程机器必须有共享目录。因为不同操作系统上的WMI的接口可能不同,所以不能保证可移植。
运行脚本的方法是将下列脚本拷贝到记事本中,再将其保存为vbs的后缀名,然后在控制台下运行:
cscript 脚本文件名
或者双击脚本文件直接运行
'-----------------------------------------------------------
'远程执行
strComputer = "192.168.0.30"
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer _
(strComputer, "root/cimv2", "fabrikam/administrator",
"85558418")
Set objNewProcess = objSWbemServices.Get("Win32_Process")
'objWMIServices.Security_.ImpersonationLevel = 3
Error = objNewProcess.Create _
("c:/tmp.bat", null, null, _
intProcessID)
Wscript.Echo Error
Wscript.Echo intProcessID
执行完如果没有返回错误,可以用下列脚本枚举远程机器上运行的进程
'------------------------------------------------------------
'枚举远程进程
strComputer = "192.168.0.30"
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer _
(strComputer, "root/cimv2", "fabrikam/administrator",
"85558418")
Set colSwbemObjectSet = _
objSWbemServices.ExecQuery("Select * From Win32_Process")
For Each objProcess in colSWbemObjectSet
Wscript.Echo "Process Name: " & objProcess.Name
Next
因为windows的平台上有默认共享的磁盘,所以把需要运行的应用程序可以拷贝到目的机器上的C$下,当然也可以是其他的共享文件夹
'------------------------------------------------------------
'远程拷贝文件
strComputer = "192.168.0.30"
Const OverwriteExisting = TRUE
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer _
(strComputer, "root/cimv2", "fabrikam/administrator",
"85558418")
'Set objFSO = objSWbemServices.Get("Scripting.FileSystemObject")
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile "C:/va.log", _
"//" + strComputer + "/C$/", OverWriteExisting
拷贝后可以运行下面的脚本,检查目的机器上是否存在该文件
'--------------------------------------------------------------
'搜索特定扩展名
strComputer = "192.168.0.30"
Const OverwriteExisting = TRUE
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer _
(strComputer, "root/cimv2", "fabrikam/administrator",
"85558418")
Set colFiles = objSWbemServices.ExecQuery _
("Select * from CIM_DataFile where Extension = 'log'")
For Each objFile in colFiles
Wscript.Echo objFile.Name
Next
因为我需要安装的应用程序很小,而且只是注册一个dll,所以上面的脚本足够满足我的需求,而且该脚本是为网络管理员编写的,所以要得到远程机器上的管理员的帐号和密码并不是什么难事。
如果需要更多的信息,可以去 脚本中心 获取。