如何使Powershell等待批处理文件完成远程服务器上所有命令的执行

问题描述 投票:1回答:2
$storesess = New-PSSession -ComputerName marshy -Credential marshy001
Enter-PSSession -Session $storesess
Invoke-Command -ScriptBlock {start-process C:\Users\marshmellow\Documents\Some\xyz.bat }
Exit-PSSession

上面是调用保存在远程服务器C:\ Users \ marshmellow \ Documents \ Some \ xyz.bat中的bat文件的脚本

bat文件有两个命令,一个命令使用“ pushd”设置工作目录,另一个停止应用程序进程。第二个命令需要几分钟才能完成。我发现Start-Process不会等待第二条命令成功完成,它只会触发命令并关闭进程。

有什么方法可以使启动过程等待命令成功完成,因为我已经尝试过使用-Wait了,但该方法不起作用。

[如果有办法甚至在远程服务器上打开cmd会话并在其中传递保存在变量中的少量命令,并且该输出会中继到我的PowerShell脚本,即使这样也很好。谁能帮忙吗?

powershell batch-file start-process
2个回答
0
投票

使用cmd.exe可能有用吗?

Invoke-Command -ScriptBlock {
    cmd /k  "C:\Users\marshmellow\Documents\Some\xyz.bat"
} -ErrorAction Stop

如果没有,则可以在cmd.exe上输入Start-Process -Wait,然后将批处理命令作为-ArgumentList提供

如果尝试此操作,您会得到什么?

Invoke-Command -FilePath $PathToBatchFile

0
投票

您不需要Invoke-Command cmdlet。只需将Start-Process-Wait参数一起使用,并将正确的参数传递给cmd:

$storesess = New-PSSession -ComputerName marshy -Credential marshy001
Enter-PSSession -Session $storesess
Start-Process cmd -ArgumentList "/C C:\Users\marshmellow\Documents\Some\xyz.bat" -Wait
Exit-PSSession
© www.soinside.com 2019 - 2024. All rights reserved.