Wieso ist die Catch Ausgabe ohne ausgabe der Variable?
Hallo zusammen,
weshalb wird nicht die Variable $_.Hostname mit dem betreffenden nicht vorhandenen Record angezeigt?
Ich erhalte immer
Kein Host-Record vorhanden:
Da sollte eigentlich stehen
Kein Host-Record vorhanden: COMP123456
Der Write Host Befehl im Try block funktioniert.
Ne Idee?
weshalb wird nicht die Variable $_.Hostname mit dem betreffenden nicht vorhandenen Record angezeigt?
Ich erhalte immer
Kein Host-Record vorhanden:
Da sollte eigentlich stehen
Kein Host-Record vorhanden: COMP123456
Der Write Host Befehl im Try block funktioniert.
Ne Idee?
Import-Csv c:\admin\test.csv |
ForEach-Object {
try {
$ErrorActionPreference = 'Stop'
Get-DnsServerResourceRecord -Name $_.Hostname -ZoneName dom.loc
}
catch {
Write-Host "Kein Host-Record vorhanden: $_.Hostname"
}
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 307702
Url: https://administrator.de/forum/wieso-ist-die-catch-ausgabe-ohne-ausgabe-der-variable-307702.html
Ausgedruckt am: 12.04.2025 um 12:04 Uhr
10 Kommentare
Neuester Kommentar
Hallo pixel0815,
Immer wenn du auf Eigenschaften eines Objektes innerhalb von Anführungszeichen zugreifen willst musst du eine SubExpression verwenden, da sonst der Punkt hinter der Variablen etc. als normaler String interpretiert wird.
Ebenso wenn du Array-Objekte ansprichst wie $var diese musst du innerhalb eines Strings mit doppelten Anführungszeichen mit einer Subexpression klammern $($var), damit diese im String korrekt aufgelöst und nicht als String interpretiert werden!
Grüße Uwe
Immer wenn du auf Eigenschaften eines Objektes innerhalb von Anführungszeichen zugreifen willst musst du eine SubExpression verwenden, da sonst der Punkt hinter der Variablen etc. als normaler String interpretiert wird.
Ebenso wenn du Array-Objekte ansprichst wie $var diese musst du innerhalb eines Strings mit doppelten Anführungszeichen mit einer Subexpression klammern $($var), damit diese im String korrekt aufgelöst und nicht als String interpretiert werden!
Grüße Uwe
Sorry, das geht so nicht, da du mit dem $_ im catch auf das Exception Objekt zugreifst. Also speichere das Objekt vorher in einer extra Variablen.
Import-Csv c:\admin\test.csv | %{
$host = $_.Hostname
try {
Get-DnsServerResourceRecord -Name $host -ZoneName dom.loc -EA Stop
}
catch {
Write-Host "Kein Host-Record vorhanden: $host"
}
}
Im Catch-Teil. kannst du z.B. auch direkt auf die Exception zugreifen:
Das ist der Grund warum du darin nicht auf dein Hostname über das $_ zugreifen kannst, weil dem Catch-Teil über das $_ das Exception Objekt übergeben wird.
Das ist an c# etc. angelehnt. Dort kannst du nämlich den Namen des Exception-Objekts explizit angeben:
write-host "Fehler: $($_.Exception.Message)" -F Red
Das ist an c# etc. angelehnt. Dort kannst du nämlich den Namen des Exception-Objekts explizit angeben:
catch (Exception e) { // Exception Body }
funktioniert das nicht. Ist das Absicht??
Klar das geht natürlich nicht. Mach das mit einem [pscustomobject] und schreibe die Fehlerbehafteten in ein extra Objekt das du dann exportierst.Da gibt es diverse Möglichkeiten.. hier mal zwei davon:
$data = (Import-Csv 'c:\admin\test.csv') | %{Add-Member $_ -MemberType NoteProperty -Name "Host-Record" -Value (Get-DnsServerResourceRecord -Name $_.Hostname -ZoneName dom.loc -EA Ignore) -Force -PassThru}
$data | ?{$_.'Host-Record' -ne $null} | select -Expand 'Host-Record' | export-csv 'C:\success.csv' -Delimiter ";" -NoType -Encoding UTF8
$data | ?{$_.'Host-Record' -eq $null} | select Hostname | export-csv 'C:\fail.csv' -Delimiter ";" -NoType -Encoding UTF8
Import-Csv 'c:\admin\test.csv' | %{
$hostna = $_.Hostname
try {
Get-DnsServerResourceRecord -Name $hostna -ZoneName dom.loc -EA Stop | export-csv 'C:\success.csv' -NoType -Encoding UTF8 -Append
}
catch {
[pscustomobject]@{Hostname=$hostna;Status='Kein Resource-Record'} | export-csv 'C:\fail.csv' -NoType -Encoding UTF8 -Append
}
}