从Excel VBA运行Powershell命令(而非脚本)

11

我在 Stack Overflow 上搜索过,可以找到很多运行 PowerShell 脚本的 VBA 示例,但是我找不到任何运行简单命令的示例。

例如,这个可以工作:

Dim retval As Variant
retval = Shell("PowerShell ""C:\MyScript.ps1""", vbNormalFocus)

但这并不会:

Dim retval As Variant
Dim pscmd As String

pscmd = "PowerShell " & _
  Chr(34) & "Get-ScheduledTask" & _
  " -TaskName " & Chr(34) & "My Task" & Chr(34) & _
  " -CimSession MYLAPTOP" & Chr(34)
retval = Shell(pscmd, vbNormalFocus)

Debug.Print pscmd
'pscmd = PowerShell "Get-ScheduledTask -TaskName "My Task" -CimSession MYLAPTOP"

我知道我可以把PS命令写到一个文件中,将其作为脚本执行,然后删除该文件,但这似乎不太优雅。

2个回答

13

要运行一个内嵌的PowerShell命令,你可能需要使用-Command参数,并在你的语句周围加上引号。如果在命令中使用单引号,这将更容易。

试一下:

pscmd = "PowerShell -Command ""{Get-ScheduledTask -TaskName 'My Task' -CimSession MYLAPTOP}"""

2
谢谢 Bond。显然我需要熟悉一下PowerShell开关。 :/ - Tim
我已经在Word宏中尝试过这个,但它没有按照描述的方式工作。对于我来说,传递没有花括号和周围引号的PowerShell命令是有效的。 - Franz Kiermaier

0
还没有测试过,但执行策略可能是一个因素。
pscmd = "PowerShell -NoProfile -NoLogo -ExecutionPolicy Bypass -Command {" & _
Chr(34) & "Get-ScheduledTask" & _
  " -TaskName " & Chr(34) & "My Task" & Chr(34) & _
  " -CimSession MYLAPTOP" & Chr(34) & "}"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接