【问题标题】:Invoke-Command with script block is not working on remote machine with no error带有脚本块的 Invoke-Command 在远程机器上不起作用且没有错误
【发布时间】:2015-07-08 05:57:36
【问题描述】:
我正在尝试调用位于本地计算机中的批处理文件,从远程计算机执行以下 PowerShell 命令。
Invoke-Command -ComputerName XXXXXX -ScriptBlock {
Start-Process "c:\installagent.bat"
} -Credential abc\XXX
它没有给出任何错误,但远程计算机上什么也没发生。
如果我从本地机器运行批处理文件,它工作正常。
【问题讨论】:
标签:
powershell
powershell-remoting
【解决方案1】:
您不能像这样在远程主机上运行本地文件。如果帐户 abc\XXX 在您的本地计算机上具有管理员权限(并且启用了对管理共享的访问权限),您可以尝试以下操作:
Invoke-Command -ComputerName XXXXXX -ScriptBlock {
param($myhost)
Start-Process "\\$myhost\c$\installagent.bat"
} -ArgumentList $env:COMPUTERNAME -Credential abc\XXX
否则您必须先将脚本复制到远程主机:
Copy-Item 'C:\installagent.bat' '\\XXXXXX\C$'
Invoke-Command -ComputerName XXXXXX -ScriptBlock {
Start-Process "c:\installagent.bat"
} -Credential abc\XXX
另外,我建议使用调用运算符 (&) 而不是 Start-Process 来运行批处理文件:
Invoke-Command -ComputerName XXXXXX -ScriptBlock {
& "c:\installagent.bat"
} -Credential abc\XXX
这样Invoke-Command 应该会返回批处理文件的输出,让您更好地了解正在发生的事情。
或者,您可以简单地使用psexec:
C:\> psexec \\XXXXXX -u abc\XXX -c installagent.bat