在Powershell中阻止命令但在Cmd.exe中没有

时间:2014-07-30 14:59:48

标签: windows powershell powershell-v3.0

我遇到问题,我的powershell脚本有一个非常奇怪的竞争对手。

有一个大脚本:

Write-Host "Installation in progress..." 
Invoke-Command -Session $session -ThrottleLimit 64 -ScriptBlock {.\XenDesktopServerSetup.exe /QUIET /CONFIGURE_FIREWALL /components $using:componentparam /nosql }
Write-Host "Installation completed" 

有时即使XenDesktopServerSetup.exe的执行完成,我的脚本也不会传递到下一个命令Write-Host "Installation completed" 我需要单击shell中的某个位置或使用CTRL + C中断脚本以查看脚本的结尾;

我尝试更改ThrottleLimit,但我没有效果。

我正在使用Powershell V4.0。

$ Session中只有一台服务器。

编辑: 我在我的服务器上直接尝试了这个命令 ,我打开了一个PS Shell并执行了:

.\XenDesktopServerSetup.exe /QUIET /CONFIGURE_FIREWALL /components CONTROLLER /nosql 

我遇到了同样的问题!

但是当我在Cmd.exe中尝试相同的命令时,它每次都能完美运行!

如何在Cmd.exe中执行此命令?我想要这样的东西:

Write-Host "Installation in progress..." 
Invoke-Command -Session $session -ThrottleLimit 64 -ScriptBlock {Cmd.exe .\XenDesktopServerSetup.exe /QUIET /CONFIGURE_FIREWALL /components $using:componentparam /nosql }
Write-Host "Installation completed"

这向我们展示了psd.exe和powershell在PS如何调用.exe文件方面存在差异,但我完全不了解为什么它在cmd.exe中有效但在powershell中无效< / p>

感谢您的建议

2 个答案:

答案 0 :(得分:1)

您确定所有远程服务器都已完成吗?您可以使用-AsJob参数,然后使用Get-Job定期检查每个作业的状态。使用Receive-Job检索输出。你甚至可以等待所有人使用Wait-Job $ jobs -Timeout 120

完成超时

答案 1 :(得分:0)

这就是我如何解决它,我经常测试它并且我没有任何问题:

Write-Host "Installation in progress..." 
Invoke-Command -Session $session -ScriptBlock {$Components = $using:componentparam}
Invoke-Command -Session $session -ScriptBlock {Invoke-Expression "cmd /C '$IsoLetter\x64\XenDesktop Setup\XenDesktopServerSetup.exe' /QUIET /CONFIGURE_FIREWALL /components $Components /nosql" }
Write-Host "Installation completed"
你怎么看?我认为问题出在.exe文件中..有些问题。

但最后我使用Invoke-expressioncmd /C

解决了这个问题