Powershell-Aufrufbefehle und Systemvariablen
-
13-12-2019 - |
Frage
Ich arbeite an der Automatisierung von Patches für eine Anbieter-App.Ich wollte Powershell verwenden, um eine Liste von Servern zu durchlaufen und Remoting für die Installation auf jeder Box verwenden.Ein Aspekt bereitet mir jedoch große Kopfschmerzen.Ich muss ein vom Hersteller bereitgestelltes cmd-Skript aufrufen, um Systemvariablen festzulegen, bevor ich das Installationsskript ausführe.Also rufe ich das Skript in Powershell so auf:
Invoke-Command -session $session {cmd /k ($args[0]+"\data\env.bat")} -Args $lesDestDir
Ich sehe, wie es ausgeführt wird, während es seine Arbeit in meinem Powershell-Fenster widerspiegelt, aber nachfolgende Aufrufe des Installationsskripts, z. B.:
Invoke-Command -session $session {perl ".\rollout-2010.pl " $args[0] " NC"} -Args $rollout
Beenden Sie das Programm sofort mit der Meldung, dass die verschiedenen verwendeten Systemvariablen nicht festgelegt wurden.Kann mir jemand den Umfang der Systemvariablen erklären?Hören sie auf zu existieren, nachdem der Aufrufbefehl abgeschlossen ist?Muss ich die beiden Skriptaufrufe in einem einzigen Aufrufbefehl zusammenfassen, damit das zweite Skript auf die Systemvariablen oder ähnliches zugreifen kann?
Lösung
Mit der vorgenommene Änderungen SET
Befehl sind NICHT dauerhaft, sie gelten für den Strom cmd
nur verarbeiten und bleiben bis zum cmd
Der Vorgang wird beendet.
Wenn möglich, legen Sie die Umgebungsvariable mithilfe der Powershell-Syntax fest:
Invoke-Command -session $session {$env:myvar = 1}
Alternativ können Sie die Befehle mit dem Befehlstrennzeichen cmd aneinanderreihen &
so was:
Invoke-Command -session $session {cmd /k "set myvar = 1" `& "set"}
Andere Tipps
Ja, Sie müssen sie zusammen einsetzen.Die Umgebungsvariablen werden in der ersten CMD-Sitzung eingestellt, die ausnimmt, und dann wird ein zweiter OHNE mit einem zweiten begonnen.