Question

je suis confronté à un problème, mon script PowerShell a un comportement très étrange.

Il y a un petit morceau d'un gros 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" 

Parfois même si l'exécution de XenDesktopServerSetup.exe est terminé mon script ne passe pas à la commande suivante Write-Host "Installation completed" Je dois cliquer quelque part dans le shell ou interrompre le script avec CTRL+C pour voir la fin de mon script ;

J'ai essayé de changer ThrottleLimit, mais je n'ai aucun effet.

J'utilise Powershell V4.0.

Il n'y a qu'un seul serveur dans $Session.

MODIFIER :J'ai essayé cette commande directement sur mon serveur, j'ai ouvert un PS Shell et exécuté :

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

J'ai eu le même problème !

Mais quand j'ai essayé la même commande dans Cmd.exe, cela fonctionne parfaitement et à chaque fois !

Comment puis-je exécuter cette commande dans Cmd.exe ?Je veux quelque chose comme ça :

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"

Cela nous montre qu'il y a une différence entre cmd.exe et PowerShell dans la façon dont PS appelle le fichier .exe, mais je ne comprends pas du tout pourquoi cela fonctionne dans cmd.exe mais pas dans PowerShell.

Merci pour vos suggestions

Était-ce utile?

La solution 2

Voici comment je l'ai résolu, je l'ai beaucoup testé et je n'ai aucun problème :

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"

Qu'en penses-tu?Je pense que le problème vient du fichier .exe.il y a quelque chose qui ne va pas.

Mais finalement je l'ai résolu en utilisant Invoke-expression et cmd /C

Autres conseils

Êtes-vous sûr que tous les serveurs distants sont terminés ?Vous pouvez utiliser le paramètre -AsJob, puis inspecter périodiquement l'état de chaque tâche à l'aide de Get-Job.Récupérez la sortie avec Receiver-Job.Vous pouvez même attendre que tout se termine avec un délai d'attente en utilisant Wait-Job $jobs -Timeout 120

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top