从VBA调用Powershell脚本(带有参数)

时间:2018-10-19 08:32:05

标签: excel vba powershell

我想从Excel VBA调用Powershell脚本并传递1参数。如果没有VBA,则脚本可以完美地运行,并且可以执行它应做的事情。.一旦调用成功,我想添加1个参数,但首先要成功调用...

但是我无法在Excel VBA中调用它。首先,请告诉我我的Powershell脚本:

#param([string]$server)
$server = "chvmes01"

$BasicPath = Split-Path $script:MyInvocation.MyCommand.Path

write-host $BasicPath

Invoke-Command -FilePath $BasicPath\IISReport.ps1 -ComputerName $server

Read-Host "Return drücken..."

在VBA中,我创建了以下代码:

strCommand = "Powershell.exe -ExecutionPolicy ByPass -NoExit -File """ & BasicPath & """, 1"
Set WsShell = CreateObject("WScript.Shell")
WsShell.Run (strCommand)

strCommand看起来像这样:

  

Powershell.exe -ExecutionPolicy不受限制-NoExit-文件   “ E:\ Temp \ Registry \ EXCEL_ALLE \ Version_AllFromExcel_Aktuell \ IISReport \ InvokeCommand.ps1”,   1

就像这样,我得到以下错误: enter image description here

我不知道我可以更改什么,我读了很多论坛帖子并更改了不同的内容,但没有任何效果!

我尝试使用不带“”的strCommand:

strCommand = "Powershell.exe -ExecutionPolicy ByPass -NoExit -File " & BasicPath & ", 1"

我尝试了

-ExecutionPolicy Unrestricted AND -ExecutionPolicy ByPass 

我尝试了有无

-NoExit

我也尝试过

Shell (strCommand)

正如我所提到的,在没有VBA的情况下,脚本可以完美运行! 有人可以帮忙吗?

2 个答案:

答案 0 :(得分:5)

我找到了解决方案!

实际上@Pᴇʜ的评论将我引向了答案!

我把

弄混了
Set WsShell = CreateObject("WScript.Shell")
WsShell.Run (strCommand)

使用

Shell (strCommand)

“,1”仅用于Shell命令。

我只需要将strCommand更改为

    strCommand = "Powershell.exe -ExecutionPolicy ByPass -NoExit -File " & BasicPath
    Set WsShell = CreateObject("WScript.Shell")
    WsShell.Run (strCommand)

及其工作!

现在我可以尝试将参数传递给powershell!非常感谢!

答案 1 :(得分:2)

该错误似乎表明在路径末尾附加了逗号。您可能只需要将其用单引号引起来。试试这个:

strCommand = "Powershell.exe -ExecutionPolicy ByPass -NoExit -File '" & BasicPath & "'"