PowerShell aus dem Stapel aufrufen und den neuen Wert einer temporären Umgebungsvariablen abrufen, die im Skript festgelegt wurde?

8

Ich hoffe, der Titel ist prägnant, aber nur für den Fall:

Ich rufe ein PowerShell-Skript aus einer Batchdatei auf. Ich möchte, dass das PowerShell-Skript den Wert einer Umgebungsvariablen festlegt und dass dieser neue Wert in der Batchdatei verfügbar ist, wenn das PowerShell-Skript beendet ist.

Ich weiß, dass es möglich ist, eine Umgebungsvariable mit $ env in PowerShell festzulegen, aber der Wert bleibt nicht bestehen, wenn das PowerShell-Skript beendet wird. Ich vermute, dies liegt wahrscheinlich daran, dass PowerShell in einem separaten Prozess ausgeführt wird.

Ich bin mir bewusst, dass ich einen Exitcode zurückgeben und% ErrorLevel% verwenden kann, aber das gibt mir nur Zahlen, und es wird einen Konflikt geben, da 1 eine PowerShell-Ausnahme und keine nützliche Nummer anzeigt.

Nun, hier ist der Vorbehalt: Ich möchte nicht, dass die Umgebungsvariable fortbesteht. Das heißt, ich möchte nicht, dass es für den Benutzer oder das System definiert wird, und daher möchte ich, dass es nicht verfügbar ist, sobald die Batch-Datei beendet wird. Letztendlich möchte ich einfach Ergebnisse von einem PowerShell-Skript an die aufrufende Batch-Datei zurückgeben.

Ist das möglich?

Vielen Dank im Voraus:)

Nick

    
Nicholas Hill 05.08.2010, 11:42
quelle

3 Antworten

10

Um Keiths Idee zu bekommen, stdout zu benutzen, können Sie powershell von Ihrem Stapel-Skript wie folgt aufrufen:

%Vor%

Ein bisschen peinlich, aber es funktioniert:

%Vor%     
zdan 05.08.2010 18:06
quelle
0

Ich weiß, dass es etwas spät ist, diese Frage zu beantworten, aber ich würde es gerne ausprobieren, falls jemand eine detailliertere Lösung benötigt. Also, hier geht es.

Ich habe eine Batch-Funktion erstellt, die ps-Skript für Sie ausführt und einen Wert zurückgibt, etwa so:

%Vor%

Nun, als ein Beispiel, um es zu benutzen:

%Vor%

Dies wird auf dem Konsolenbildschirm angezeigt. Sie haben es bekommen

Als ein komplizierteres Beispiel würde ich hinzufügen:

Nehmen wir an, wir möchten prüfen, ob eine VM auf "Up" oder "Down" geschaltet ist, dh ob sie ein- oder ausgeschaltet ist. So können wir Folgendes tun:

%Vor%

Nun, wie zu verwenden: CheckMachineUpOrDown Funktion?

Folge einfach diesem Beispiel:

%Vor%

Dies zeigt Up an, wenn die VM eingeschaltet ist oder Down, wenn das Gerät ausgeschaltet ist.

Ich hoffe, das ist hilfreich.

Danke

    
Akram Alhinnawi 26.04.2017 23:04
quelle
-1

Der einfachste Weg, Ergebnisse von PowerShell zu erfassen, ist die Verwendung von stdout in PowerShell. Zum Beispiel speichert dies das Datum in der d env var in cmd.exe

%Vor%     
Keith Hill 05.08.2010 14:32
quelle