Powershell invoke-command et les variables système
-
13-12-2019 - |
Question
Je suis en train de travailler sur l'automatisation des taches pour un fournisseur d'application.Je voulais utiliser powershell pour itérer sur une liste de serveurs et utiliser l'accès distant à installer sur chaque boîte.Cependant, un aspect me donne un gros mal de tête.J'ai appeler une commande de script fourni par le vendeur pour définir les variables du système avant d'exécuter le script d'installation.J'ai donc appeler le script comme dans powershell:
Invoke-Command -session $session {cmd /k ($args[0]+"\data\env.bat")} -Args $lesDestDir
Je le vois exécuter comme il fait écho à ses travaux dans ma fenêtre powershell, mais à la suite des appels vers le script d'installation de ie:
Invoke-Command -session $session {perl ".\rollout-2010.pl " $args[0] " NC"} -Args $rollout
quittez immédiatement en disant les différentes variables du système qu'il utilise n'ont pas été définies.Quelqu'un peut m'expliquer la portée des variables système?Ils ne cessent d'exister après la commande invoke-command complète?Ai-je besoin pour enchaîner les deux appels de script en une seule commande invoke-command de sorte que le second script peut accéder aux variables du système ou quelque chose comme ça?
La solution
Les modifications apportées à l'aide de la SET
de commande sont PAS permanente, ils s'appliquent à l'actuel cmd
processus et restent jusqu'à ce que le cmd
processus est terminé.
Si possible, définir la variable d'environnement à l'aide de powershell syntaxe:
Invoke-Command -session $session {$env:myvar = 1}
Sinon, vous pouvez enchaîner les commandes à l'aide de la commande cmd séparateur &
comme ceci:
Invoke-Command -session $session {cmd /k "set myvar = 1" `& "set"}
Autres conseils
Oui, vous devez les limiter ensemble.Les variables d'environnement sont définies dans la première session CMD qui quitte, puis une seconde est lancée sans eux.