从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