我遇到问题,我的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>
感谢您的建议
答案 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-expression
和cmd /C