在远程电脑上运行PowerShell脚本

10

我已经在远程计算机(RPC001)上安装了PS 1.0。我使用Windows Sysinternals工具PSExec.exe在远程执行了以下进程:

 PSExec \\RPC001 -u myID -p myPWD PowerShell C:\script\StartPS.ps1 par1 par2
我可以看到远程PC上运行着PowerShell.exe进程,但实际上它什么也没做,只是在那里挂起。我尝试在脚本中放置一个简单的代码,“Write-Output/Host”输出一个字符串。我通过RTS在远程上运行相同的脚本,它能够正常工作。 不确定是否还有其他东西需要使用PSExec运行脚本,或者是PSExec.exe的限制。我想从我的桌面启动远程PS脚本,在本地执行一些操作(压缩本地文件并删除旧文件)。 我在Stackoverflow上问了类似的问题:Run remote process by powershellDon建议我使用PSExec,这似乎是解决问题的另一种方法。然而,我无法让它在PowerShell中工作。有什么办法可以在远程PC上让PS正常工作吗? 顺便说一下,我不能使用PS 2.0,因为我的网络不允许我安装Windows XP SP3,而这是PS 2.0所需的。
4个回答

11

对我而言,被采纳的答案无法解决问题,但下面的方法可以:

>PsExec.exe \\<SERVER FQDN> -u <DOMAIN\USER> -p <PASSWORD> /accepteula cmd 
    /c "powershell -noninteractive -command gci c:\"

这是此处的示例。


同样的问题...接受了运行并返回错误代码0,但什么也没做,而你的解决方案起作用了。 - SteveC
1
我有一个命令: "powershell -noninteractive -file C:\temp\scripts.ps1",对我有用(被接受的答案没有)。 - kafka
1
@kafka,你的scripts.ps1在哪里?我试图远程运行脚本,但一直无法成功。 - null
在每台远程机器上的文件夹'c:\temp'中,使用@kafka。 - kafka

9

在进一步研究PSExec工具后,我认为我找到了答案。我需要添加-i选项,告诉PSExec在交互模式下启动远程进程:

PSExec \\RPC001 -i -u myID -p myPWD PowerShell C:\script\StartPS.ps1 par1 par2

如果不使用-i参数,powershell.exe将在等待模式下在远程计算机上运行。有趣的是,如果我运行一个简单的批处理文件(不带PS),它可以正常工作。也许这对于PS来说是特殊情况?欢迎评论和解释。


我该如何使用PSExec实现以下操作:Start-Process "wusa.exe" -ArgumentList "$W2K12 /quiet" -Wait - Developer

2

你能试一下以下操作吗?

psexec \\server cmd /c "echo . | powershell script.ps1"

我认为你缺少了完整的路径 C:\script\StartPS.ps1。 - toxicate20

2

被采纳的答案对我不起作用,但是这个可以。请确保脚本位于每个远程服务器的位置(c:\temp_ 下方)。servers.txt 包含一个IP地址列表(每行一个)。

psexec @servers.txt -u <username> cmd /c "powershell -noninteractive -file C:\temp\script.ps1"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接