Powershell在本地执行命令行

时间:2014-09-09 14:53:21

标签: powershell invoke psexec

Powershell脚本在本地计算机上执行命令行

$j = "remote_machine"

$comp = "\\"+$j

$command = 'D:\PSTools\PsExec.exe $comp -u Administrator -p plaintextpassword -accepteula powershell.exe c:\share\script.ps1'

Invoke-Expression "& $command"

这有效,但它输出以下

  

PsExec.exe:在行:1个字符:1   +& D:\ PSTools \ PsExec.exe $ comp -u Administrator -p plaintextpassword -accepteula powersh ...   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:NotSpecified:(:String)[],RemoteException       + FullyQualifiedErrorId:NativeCommandError PsExec v2.0 - 远程执行进程版权所有(C)2001-2013 Mark Russinovich   Sysinternals - www.sysinternals.com连接到   remote_machine ...启动PSEXESVC服务   remote_machine ...正在连接PsExec服务   remote_machine ...在remote_machine上启动powershell.exe ...   powershell.exe在remote_machine上退出,错误代码为0。

如何解决?

1 个答案:

答案 0 :(得分:1)

重新阅读您的问题后,我发现这是之前已经看过和讨论过的标准PSExec vs PowerShell问题。这是因为PSExec将其标题行输出到某些文本的stderr(标准错误)流。执行正常,它确实显示退出代码为0,表示实际上没有错误。

此问题仅在PowerShell ISE中出现,而不是标准的PowerShell控制台(除非您使用PSExec <command & args> 2>&1或类似内容将StdErr重定向到StdOut)。要解决此问题,如果要在ISE中运行脚本,可以使用Start-Process的-RedirectStandardError参数,或通过其他方式重定向StdErr。