【发布时间】:2013-12-10 19:03:53
【问题描述】:
你好吗?
我想在 VBA 环境中执行 VBS 代码,在这种情况下,我在 MS Excel 2010 的 VB 编辑器中工作。遗憾的是,我不知道如何转换 VBS 代码以便 VBA 能够执行它。
为了说明我在做什么:我想执行一个需要管理员权限的 VBS 命令提示符。此提示将在网络中的另一台 PC 上重新启动进程。通过 cmd 执行时,VBS 代码运行良好。我想使用 VBA 的原因是网络中有很多 PC,我想使用循环来为每台 PC 执行 VBS 代码。
好的,这是VBS代码:
strComputer = "Computername"
Set objShell = CreateObject("Wscript.Shell")
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2:Win32_Process")
intReturn = objWMIService.Create("c:\Program Files (x86)\Symantec\Symantec Endpoint Protection\12.1.1000.157.105\Bin64\smc.exe -stop", Null, Null, intProcessID)
Wscript.Sleep 10000
intReturn2 = objWMIService.Create("c:\Program Files (x86)\Symantec\Symantec Endpoint Protection\12.1.1000.157.105\Bin64\smc.exe -start", Null, Null, intProcessID)
现在的问题是,如何将此代码示例放入我的 VBA 环境中?我知道如何通过 VBA 执行 VBS 文件本身,但这还不够,因为我需要一个变量。管理员权限也取决于问题。
好的,这是一个更新,我现在在我的 VBA 中有这段代码,但我无法开始,我也尝试实现 runas 管理员:
Sub run_vbs_script()
Dim strComputer As String
'Dim WshShell
Dim objShell
Dim objWMIService
Dim dDate As Date
strComputer = "IEDBR8D60CR"
Set objShell = CreateObject("Wscript.Shell")
RunasStruser = "runas /user:Username Domain\domain name"
objShell.Run RunasStruser, 0
objShell.SendKeys "password"
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2:Win32_Process")
intReturn = objWMIService.Create("c:\Program Files (x86)\Symantec\Symantec Endpoint Protection\12.1.1000.157.105\Bin64\smc.exe -stop", Null, Null, intProcessID)
dDate = DateAdd("s", 10, DateTime.Now)
Do While dDate > DateTime.Now
DoEvents
Loop
intReturn2 = objWMIService.Create("c:\Program Files (x86)\Symantec\Symantec Endpoint Protection\12.1.1000.157.105\Bin64\smc.exe -start", Null, Null, intProcessID)
Set objShell = Nothing
Set objWMIService = Nothing
End Sub
【问题讨论】:
-
您是管理员还是有管理员权限?
-
I want to execute VBS code in a VBA environment,那为什么是 vb.net 标签呢? -
如果您需要使用特定凭据连接到远程 PC,那么使用
SWBemlocator.ConnectServer可能会更简单,例如:stackoverflow.com/questions/716571/vbs-computer-info-script 您的 VBscript 应该很容易转换为 VBA。 -
感谢大家的意见,我会看看,是的,我在问题的网络中拥有管理员权限