Pergunta

eu estou enfrentando um problema, o meu script do powershell muito estranho comportement.

Há uma pequena peça de um grande script :

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" 

Às vezes, mesmo se a execução de XenDesktopServerSetup.exe é terminar o meu script não passar para o próximo comando Write-Host "Installation completed" Eu preciso clicar em algum lugar no shell ou interromper o script com CTRL+C para ver o fim do meu script;

Eu tentei mudar ThrottleLimit, mas eu não tem efeito.

Eu estou usando o Powershell V4.0.

Há apenas um servidor na Sessão$.

EDITAR : Eu tentei este comando no meu server, eu abri um PS Shell e executado :

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

Eu tinha o mesmo problema !

Mas quando eu tentei o mesmo comando em Cmd.exe, ele funciona perfeitamente e sempre !

Como posso executar esse comando no Cmd.exe ?Eu quero algo como isto :

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"

Isso nos mostra que há uma diferença entre cmd.exe e powershell em como o PS fazer a chamada de .arquivo exe, mas eu não entendo o porque que ele funciona em cmd.exe mas não no powershell

Obrigado por suas sugestões

Foi útil?

Solução 2

Isto é como eu resolvido, eu testei um monte e eu não tenho qualquer problema :

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"

O que você acha?Eu acho que o problema é no .arquivo exe..há algo de errado com.

Mas finalmente eu resolvi usando Invoke-expression e cmd /C

Outras dicas

Você está certo de que todos os servidores remotos são feitas?Você pode usar o parâmetro AsJob e, em seguida, periodicamente inspeccionar o estado de cada tarefa usando Get-Job.Recuperar a saída com Receive-Job.Você pode mesmo esperar por tudo para terminar com um tempo de espera usando Aguarde-Tarefa $trabalhos -tempo limite de 120

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top