In Invoke-Command werden viele Fehler als "nicht-terminierend" behandelt. Das bedeutet, dass sie nicht automatisch von catch abgefangen werden. Setze innerhalb des try Blocks
$ErrorActionPreference = 'Stop'
um "nicht-terminierende" Fehler in "terminierende" Fehler umzuwandeln.
$computers = Get-ADComputer -Filter * | Where-Object { $_.Name -match "-SRV-" }
foreach ($computer in $computers) {
try {
$result = Invoke-Command -ComputerName $computer.Name -ScriptBlock {
try {
$ErrorActionPreference = 'Stop'
hostname
} catch {
Write-Output "Fehler auf $env:COMPUTERNAME: $_"
}
} -ErrorAction Stop
if ($result) {
Write-Output "$($computer.Name) erfolgreich abgefragt: $result"
} else {
Write-Output "$($computer.Name) hat keine Antwort geliefert."
}
} catch {
Write-Output "$($computer.Name) nicht erreichbar"
}
}