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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top