Invoke-Command wiederholen falls keine Verbindung möglich
Moin,
ich möchte innerhalb eines Skriptes auf einem entfernten Hosts einen Befehl ausführen. Das ist grundsätzlich kein Problem mit Invoke-Command. Jetzt verhält es sich allerdings so, dass das entfernte System nicht unbedingt auf den ersten Versuch reagiert, sich per Invoke-Command anzusprechen. Daher meine Idee, dass ich versuche den Befehl auszuführen und bei scheitern eine Fehlermeldung auszugeben und dann nach einem Delay einen weiteren Versuch zu unternehmen.
Bei der Fehlermeldung soll es sich um eine eigene Fehlermeldung handeln, nicht die automatisch von PowerShell erzeugte.
Ich hatte überlegt, ob es mit Try-Catch so umsetzbar wäre, meine ersten Versuche damit hatten aber nur das Ergebnis, dass nicht der Catch-Block ausgeführt wurde,
Gibt es sonst noch eine andere Möglichkeit zu prüfen, ob eine Verbindung mittels Invoke-Command aktuell schon möglich ist?
Viele Grüße
ich möchte innerhalb eines Skriptes auf einem entfernten Hosts einen Befehl ausführen. Das ist grundsätzlich kein Problem mit Invoke-Command. Jetzt verhält es sich allerdings so, dass das entfernte System nicht unbedingt auf den ersten Versuch reagiert, sich per Invoke-Command anzusprechen. Daher meine Idee, dass ich versuche den Befehl auszuführen und bei scheitern eine Fehlermeldung auszugeben und dann nach einem Delay einen weiteren Versuch zu unternehmen.
Bei der Fehlermeldung soll es sich um eine eigene Fehlermeldung handeln, nicht die automatisch von PowerShell erzeugte.
Ich hatte überlegt, ob es mit Try-Catch so umsetzbar wäre, meine ersten Versuche damit hatten aber nur das Ergebnis, dass nicht der Catch-Block ausgeführt wurde,
try {
$RemoteVar = Invoke-Command -ComputerName $Host -Credential $cred -ScriptBlock {
$adapter = Get-NetIPAddress | Where-Object {$_.IPAddress -like "x.x.x.x"}
$mac = Get-NetAdapter -Name $adapter.InterFaceAlias
return $mac.MacAddress
}
$RemoteVar | Out-File -FilePath "D:\MAC.txt"
Write-Host "Getting MAC address for $Host was successful."
Read-Host -Prompt "Press any key to exit."
exit
}
catch {
Write-Host -ForegroundColor Red "Connecting to $Host was not possible. Retrying..."
Start-Sleep -Seconds 15
}
Gibt es sonst noch eine andere Möglichkeit zu prüfen, ob eine Verbindung mittels Invoke-Command aktuell schon möglich ist?
Viele Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 53200128923
Url: https://administrator.de/contentid/53200128923
Ausgedruckt am: 24.11.2024 um 15:11 Uhr
3 Kommentare
Neuester Kommentar
meine ersten Versuche damit hatten aber nur das Ergebnis, dass nicht der Catch-Block ausgeführt wurde
Der Grund:Damit CMDlets eine Exception auslösen und damit den Catch muss der Parameter -ErrorAction des jeweiligen CMDlets auf Stop festgelegt sein. (-ErrorAction Stop)
Oder die globale Variable gesetzt sein wenn es für alle Fehler und CMDLets gelten soll .
$erroractionpreference = 'Stop'
https://learn.microsoft.com/de-de/powershell/module/microsoft.powershell ...
$maxtries = 10
$cnt = 1
while($cnt -le $maxtries){
try {
$RemoteVar = Invoke-Command -ComputerName $Host -Credential $cred -ErrorAction Stop -ScriptBlock {
$adapter = Get-NetIPAddress | Where-Object {$_.IPAddress -like "x.x.x.x"}
$mac = Get-NetAdapter -Name $adapter.InterFaceAlias
return $mac.MacAddress
}
$RemoteVar | Out-File -FilePath "D:\MAC.txt"
Write-Host "Getting MAC address for $Host was successful."
Read-Host -Prompt "Press enter key to exit."
exit
} catch {
Write-Host -ForegroundColor Red "Connecting to $Host was not possible. Retrying..."
Start-Sleep -Seconds 15
$cnt++
}
}