无法使用PowerShell在远程计算机上运行参数化批处理文件



从PowerShell执行远程服务器参数化批处理文件。

不会在远程计算机上投掷错误或执行命令。

$path = "D:runtest-5.2.bat";
Invoke-Command -ComputerName testserver -Scriptblock { "$path" }

BAT文件中的脚本是带有参数的msiexec,仅通过命令提示执行。

基于此MSDN链接,您可以在远程计算机上运行ps1脚本文件。因此,如果可以在ps1中"端口" bat文件的内容,则应起作用。这是MSDN示例:

示例11:在文本文件中列出的所有计算机上运行脚本

 PS C:> Invoke-Command -ComputerName (Get-Content Servers.txt) -FilePath C:ScriptsSample.ps1 -ArgumentList Process, Service

此示例使用Invoke-command cmdlet在server.txt文件中列出的所有计算机上运行sample.ps1脚本。该命令使用filepath参数指定脚本文件。此命令使您可以在远程计算机上运行脚本,即使远程计算机无法访问脚本文件。

提交命令时,将示例的内容复制到脚本块中,并且在每个远程计算机上运行脚本块。此过程等于使用ScriptBlock参数提交脚本的内容。

希望有帮助

$path是字符串。与CMD或Bash不同,Powershell只是回荡了裸弦而不是执行它们。使用呼叫操作员(&(:

& "$path"

Start-Process

Start-Process cmd.exe -ArgumentList '/c', $path -NoNewWindow -Wait

让PowerShell执行字符串作为命令。由于您说您可能需要使用后者从批处理脚本运行msiexec.exe

最重要的是,您有一个范围问题。ScriptBlock内部的变量$path与全局范围中的变量不同。您可以通过using:范围预选赛来减轻它:

Invoke-Command -Computer testserver -Scriptblock { & "$using:path" }

或通过将$path作为参数传递给ScriptBlock:

Invoke-Command -Computer testserver -Scriptblock { & "$($args[0])" } -ArgumentList $path

最新更新