【问题标题】:Executing VBS Code in VBA with admin rights使用管理员权限在 VBA 中执行 VBS 代码
【发布时间】: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。
  • 感谢大家的意见,我会看看,是的,我在问题的网络中拥有管理员权限

标签: vba excel vbscript


【解决方案1】:

在 Excel 的 VBA 编辑器中,您需要添加对 WMI 脚本的引用

    Dim strComputer As String
    Dim objShell
    Dim objWMIService
    Dim dDate As Date
    strComputer = "Computer"
    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)

    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

【讨论】:

  • 也谢谢你,会看看。
  • 好的,这似乎是正确的方法。现在我只需要以管理员权限运行此代码。有什么建议吗?
【解决方案2】:

This site has example code 用于使用 vba 通过 WMI 结束进程。看一看。该示例关闭了 notepad.exe,但我相信您可以让它为 symantec 做同样的事情

【讨论】:

  • 谢谢你,会看看并回来的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 1970-01-01
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
相关资源
最近更新 更多