PowerShell - Variablen richtig in Remote-Session (Invoke-Command) übergeben
Hallo Zusammen,
ich bin gerade dabei ein Script zu schreiben, dass bestimmte Werte aus einer PS-GUI ausliest und über einen Invoke-Command an mehrere Server übergeben soll.
Zum Verständnis hier der ganze Ablauf des Scripts:
1. Domänen-Namen angeben (.test.de)
2. .msi Datei des Agenten auswählen
3. GUI startet --> .csv mit allen Hosts auswählen
4. GUI ausfüllen (Werte für die Registrierung festlegen)
5. Start drücken --> .msi wird installiert (SOLL danach auch registrieren...)
Die Herausforderung dabei: Der Invoke-Command startet den CheckMK Update Agent, um diesen am Monitoring-Server zu registrieren. Dafür verwende ich dann folgenden Befehl:
Die Variablen des Befehls werden in der GUI, die vorher startet, eingegeben.
Mein Problem:
Wenn ich den oben stehenden Befehl manuell ausführe, egal ob lokal auf dem Client, oder via Invoke-Command von einem beliebigen Server, dann funktioniert alles einwandfrei. Bei diesem Testvorgang habe ich natürlich keine GUI aus der ich die Werte auslesen kann, daher habe ich diese manuell in die Variablen übergeben. Der Befehl an sich funktioniert also. Das Problem ist das korrekte auslesen/übergeben der Variablen für die Registrierung.
Für das Registrieren habe ich eine Funktion erstellt:
Aufrufen tue ich diese Funktion dann so:
Was das Nutzen der Variablen angeht habe ich schon viele Wege versucht. In der Funktion die Variablen als $global:IP festgelegt z.B, oder in dem Start-Process Befehl die Variablen mit $using:IP genutzt.
Aber all das hat leider nicht zum gewünschten Erfolg geführt...Irgendwo muss ich einen Denkfehler, bzw. fehlende Kenntnisse besitzen...
Ich hoffe mir kann da jemand von euch weiterhelfen. Solltet ihr noch mehr Infos vom Script brauchen, dann lasst es mich wissen.
ich bin gerade dabei ein Script zu schreiben, dass bestimmte Werte aus einer PS-GUI ausliest und über einen Invoke-Command an mehrere Server übergeben soll.
Zum Verständnis hier der ganze Ablauf des Scripts:
1. Domänen-Namen angeben (.test.de)
2. .msi Datei des Agenten auswählen
3. GUI startet --> .csv mit allen Hosts auswählen
4. GUI ausfüllen (Werte für die Registrierung festlegen)
5. Start drücken --> .msi wird installiert (SOLL danach auch registrieren...)
Die Herausforderung dabei: Der Invoke-Command startet den CheckMK Update Agent, um diesen am Monitoring-Server zu registrieren. Dafür verwende ich dann folgenden Befehl:
Start-Process -FilePath "C:\ProgramData\checkmk\agent\plugins\cmk-update-agent.exe" -ArgumentList "register -s $($IP) -i $($SITE) -H $($env:COMPUTERNAME) -p $($PROTOCOL) -U $($CMKUSER) -P $($CMKPWD) -v" -Wait -PassThru
Die Variablen des Befehls werden in der GUI, die vorher startet, eingegeben.
$IP = $IPBox.Text (Textbox)
$SITE = $SITEBox.Text (Textbox)
$CMKUSER = $USERBox.Text (Textbox)
$CMKPWD = $PWDBox.Text (Textbox)
$PROTOCOL = $PROTOCOLBox.SelectedItem (Combobox)
Mein Problem:
Wenn ich den oben stehenden Befehl manuell ausführe, egal ob lokal auf dem Client, oder via Invoke-Command von einem beliebigen Server, dann funktioniert alles einwandfrei. Bei diesem Testvorgang habe ich natürlich keine GUI aus der ich die Werte auslesen kann, daher habe ich diese manuell in die Variablen übergeben. Der Befehl an sich funktioniert also. Das Problem ist das korrekte auslesen/übergeben der Variablen für die Registrierung.
Für das Registrieren habe ich eine Funktion erstellt:
function Register-CMKAgent()
{
$IP = $IPBox.Text
$SITE = $SITEBox.Text
$CMKUSER = $USERBox.Text
$CMKPWD = $PWDBox.Text
$PROTOCOL = $PROTOCOLBox.SelectedItem
Start-Process -FilePath "C:\ProgramData\checkmk\agent\plugins\cmk-update-agent.exe" -ArgumentList "register -s $($IP) -i $($SITE) -H $($env:COMPUTERNAME) -p $($PROTOCOL) -U $($CMKUSER) -P $($CMKPWD) -v" -Wait -PassThru
}
Aufrufen tue ich diese Funktion dann so:
Invoke-Command -ComputerName $($mHost+$domain) -ScriptBlock ${Function:Register-CMKAgent}
Was das Nutzen der Variablen angeht habe ich schon viele Wege versucht. In der Funktion die Variablen als $global:IP festgelegt z.B, oder in dem Start-Process Befehl die Variablen mit $using:IP genutzt.
Aber all das hat leider nicht zum gewünschten Erfolg geführt...Irgendwo muss ich einen Denkfehler, bzw. fehlende Kenntnisse besitzen...
Ich hoffe mir kann da jemand von euch weiterhelfen. Solltet ihr noch mehr Infos vom Script brauchen, dann lasst es mich wissen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 595122
Url: https://administrator.de/contentid/595122
Ausgedruckt am: 26.11.2024 um 03:11 Uhr
2 Kommentare
Neuester Kommentar
Zwei Beispiele von diversen Varianten
Oder auch
usw.
function test($a,$b){
write-host "Var1 : $a, Var2 : $b"
}
Invoke-Command -ComputerName XYZ -ScriptBlock ${function:test} -ArgumentList "Inhalt1","Inhalt2"
Invoke-Command -ComputerName XYZ -ArgumentList "Inhalt1","Inhalt2" -ScriptBlock {
param($a,$b)
write-host "Var1 : $a, Var2 : $b"
}