Powershell - Werte von Variablen zwischen Skripten hin un her geben
Hallo zusammen,
Ich bin relativ neu in der Powershell Welt. Habe zwar schon einiges umgesetzt bekommen gelange jetzt aber an meine Grenzen und finde kein passendes Microsoft Doc zu meinem Thema/Problem.
Ich arbeite gerade an Skripten die auf 2 verschiedenen Computern ausgeführten werden sollen.
Die Skripte werden auf einem Netzlaufwerk gespeichert und beide Computer bzw. die Angemeldeten Benutzer haben darauf Vollzugriff.
Skript 1 auf Computer 1:
Hier sammel ich Informationen und Speicher diese in Variablen. Wenn das sammeln Erfolgreich ist öffne ich eine PS-Session zu Computer 2 und Starte dort ein Skript und Übergebe die Variablen (param).
Nun möchte ich in Sjript 1 warten bis ich eine Variable (Inhalt 0 = nicht Erfolgreich 1 = Erfolgreich) von Skript 2 zurück bekomme damit Skript 1 die PS-Session beendet und weiter Arbeiten kann.
Skript 2 auf Computer 2:
Mit den Übergebenen Informationen erstelle ich ein Postfach und prüfe dann ob das Postfach auch angelegt wurde. Je nach Ertfolg oder nicht wird eine Variable mit 0 oder 1 erstellt.
Diese soll an Skript 1 zurückgegeben werden.
Frage:
Funktioniert mein Plan überhaupt? Oder kann ich wahlweise aus dem Skript 1 heraus variablen in Skript 2 auf Inhalt prüfen?
Für jede Hilfe bin ich dankbar.
Viele Grüße
Patrick
Ich bin relativ neu in der Powershell Welt. Habe zwar schon einiges umgesetzt bekommen gelange jetzt aber an meine Grenzen und finde kein passendes Microsoft Doc zu meinem Thema/Problem.
Ich arbeite gerade an Skripten die auf 2 verschiedenen Computern ausgeführten werden sollen.
Die Skripte werden auf einem Netzlaufwerk gespeichert und beide Computer bzw. die Angemeldeten Benutzer haben darauf Vollzugriff.
Skript 1 auf Computer 1:
Hier sammel ich Informationen und Speicher diese in Variablen. Wenn das sammeln Erfolgreich ist öffne ich eine PS-Session zu Computer 2 und Starte dort ein Skript und Übergebe die Variablen (param).
Nun möchte ich in Sjript 1 warten bis ich eine Variable (Inhalt 0 = nicht Erfolgreich 1 = Erfolgreich) von Skript 2 zurück bekomme damit Skript 1 die PS-Session beendet und weiter Arbeiten kann.
Skript 2 auf Computer 2:
Mit den Übergebenen Informationen erstelle ich ein Postfach und prüfe dann ob das Postfach auch angelegt wurde. Je nach Ertfolg oder nicht wird eine Variable mit 0 oder 1 erstellt.
Diese soll an Skript 1 zurückgegeben werden.
Frage:
Funktioniert mein Plan überhaupt? Oder kann ich wahlweise aus dem Skript 1 heraus variablen in Skript 2 auf Inhalt prüfen?
Für jede Hilfe bin ich dankbar.
Viele Grüße
Patrick
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 613118
Url: https://administrator.de/contentid/613118
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
3 Kommentare
Neuester Kommentar
Moin Patrick,
Arbeite stattdessen mit Invoke-Command, dann bekommst du auch die Ausgaben zurück, die dir der Remote-Rechner liefert.
Wichtig ist nur, das du separierst, welche Variablen lokal ausgewertet werden (also übergeben) werden sollen; und welche erst auf dem Remoterechner ausgewertet werden sollen.
Beispiel:
Gruß Thomas
Zitat von @Sonny1895:
Wenn das sammeln Erfolgreich ist öffne ich eine PS-Session zu Computer 2 und Starte dort ein Skript und Übergebe die Variablen (param).
Wenn ich dich richtig verstehe, machst du das mit Enter-Pssession?! Dieser Befehl ist eigentlich nur dazu gedacht, um manuell Remote zu arbeiten.Wenn das sammeln Erfolgreich ist öffne ich eine PS-Session zu Computer 2 und Starte dort ein Skript und Übergebe die Variablen (param).
Arbeite stattdessen mit Invoke-Command, dann bekommst du auch die Ausgaben zurück, die dir der Remote-Rechner liefert.
Wichtig ist nur, das du separierst, welche Variablen lokal ausgewertet werden (also übergeben) werden sollen; und welche erst auf dem Remoterechner ausgewertet werden sollen.
Beispiel:
# Zugangsdaten festlegen (falls erforderlich)
$Cred = Get-Credential 'Username'
# Auszuführende Befehle
$Script = @(
'write-host $Env:Computername' # Die Variable wird erst auf dem Remoterechner ausgewertet, da in Single-Qutoes
"write-host $Env:Computername" # Die Variable wird bereits lokal ausgewertet, da in Double-Quotes
)
Invoke-Command -ComputerName 'PC02' -Credential $Cred -ScriptBlock ([scriptblock]::Create($Script -Join ';'))
Gruß Thomas
Wenn ich das richtig sehe, hast auch bei -Join auch einen Doppelpunkt statt einem Semikolon verwendet.
Ein Problem was bei der Methode entsteht ist, das ich ein Com-Objekt erstellen muss um das Postfach per Powershell anlegen zu können, das aber über Invoke-Command in einen Fehler läuft. Da das Erstellen des Com-Objektes lokal auf der Maschine funktioniert, war die idee ein Script lokal auszuführen.
Du sollst natürlich auch genau das dann mit Invoke-Comand tun -> Skript auf dem Remoterechner ausführen, welches dir die gewünschten Informationen zurück liefert.