加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

通过wmi远程执行脚本的两个方法

(2014-09-22 00:04:07)
标签:

vba

wmi

分类: WMI

WMI 提供两种方式去操作远程计算机,

一种是通过WSHController对象来操作,需要设置允许远程WSH,

,另一种是通过WbemScripting.SWbemLocator对象来操作

关于权限的参考链接

http://blog.csdn.net/seraph5186/article/details/2991199

下边的脚本甚至在本地都执行不了,

Set oController = CreateObject("WSHController")
Set oProcess = oController.CreateScript("V:\a.vbs", "192.168.1.6")
oProcess.Execute
While oProcess.Status <> 2
   WScript.Sleep 100
Wend
WScript.Echo "Done"

下边的脚本可以在本地运行...,xp环境下只要是同名管理员,是成功的!!另外在win2000环境下,创建的程序不隐藏,但在xp环境下则是隐藏的!

strComputer = "atl-ws-01"
Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/cimv2:Win32_Process")
errReturn = objWMIService.Create("calc.exe", Null, Null, intProcessID)

 Create 方法以下四个参数:它们是:

参数

说明

cmd.exe /c md c:/newfolder

用于创建新文件夹的命令行命令。注意,必须在命令中包含 cmd.exe。这是因为 md 要依赖于 cmd.exe;它不是一个单独的可执行文件。从原理上说来,现在我们所作的就是告诉 WMI 启动 cmd.exe,然后,在这个外壳运行之后,执行 md 命令。

Null

用于设置要处理的工作文件夹。由于这和我们的需要无关,因此我们只传递一个 Null 参数。

Null

表示进程的启动配置。我们并不关心这个脚本的启动配置信息,因此我们又传送另一个 Null 参数。

intProcessID

一个用于存储我们创建的进程的进程 ID 的“输出”参数。由于 md 命令大约只需要一秒种就可以完成,因此这里我们并不需要太多用到进程 ID。但如果您正在执行的任务需要几分钟才能完成呢?通过了解进程 ID,我们就可以完成类似于监视任务的进度、然后在进程结束后收到通知这样的事情。

http://www.docin.com/p-242322536.html&endPro=true

参考,关于隐藏窗口的代码... 

Private Sub Command1_Click() 

Const HIDDEN_WINDOW = 12 
strComputer = "." 
Set objWMIService = GetObject("winmgmts:" _ 
& "{impersonationLEVEl=impersonate}!\\" & strComputer & "\root\cimv2") 
Set objStartup = objWMIService.Get("Win32_ProcessStartup") 
Set objConfig = objStartup.SpawnInstance_ 
objConfig.ShowWindow = HIDDEN_WINDOW 
Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process") 
errReturn = objProcess.Create("程序路径", Null, objConfig, intProcessID) 

End Sub 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有