
Beim Ausführen nslookup
eines PowerShell-Skripts erhalte ich immer eine Fehlermeldung (die in der Konsole ausgegeben wird), obwohl die Suche erfolgreich war:
PS C:\Windows\system32> $MyOutput = nslookup -q=SOA superuser.com
8.8.4.4 nslookup : Non-authoritative answer: At line:1 char:13
+ $MyOutput = nslookup -q=SOA superuser.com 8.8.4.4
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (Non-authoritative answer::String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Dies scheint daran zu liegen, dass die Antwort nicht autorisierend ist. Eine Suche bei einem autoritativen DNS-Server führt zu keinem Fehler.
Bei meinen Versuchen, selbst eine Lösung zu finden, fand ich FolgendesSO AntwortEs wird vorgeschlagen, dieDNS-Name auflösenBefehl. Leider erfordert dies Windows 8.1/Server 2012 R2 und einige der Systeme, auf denen mein Skript ausgeführt wird, stammen aus der Windows 7-Ära.
Wie kann ich die Anzeige dieses Fehlers verhindern?
Bonuspunkte für die Erklärung, warum PowerShell denkt, dass ein Fehler aufgetreten ist!
Antwort1
Ignorieren Sie den Fehler der ausführbaren Datei, indem Sie zu $null umleiten
Ihre ausführbare Datei sendet die Ausgabe an den STDERR-Stream. Sie können es unterdrücken, indem Sie es auf die automatische Variable $null umleiten:
nslookup.exe example.com 2>$null
Anmerkungen:
Sie müssen auf die
$null
Variable von PowerShell umleiten. Mit PS können Sie dies nicht auf die herkömmliche Art (also2>nul
) tun.Weiterleitung zu
$null
ist schnellerals mitOut-Null
Erläuterung
NSLookup sendet einen Teil seiner Ausgabe an dieSTDERR-Datenstrom. Wenn eine Windows-Konsolenanwendung dies tut, meldet PowerShell dies alsNativeCommandErrorFehler.
Führen Sie in der Eingabeaufforderung Folgendes aus nslookup -q=SOA superuser.com 1>nul 2>con
, um zu sehen, was NSLookup in STDERR schreibt:
Nicht verbindliche Antwort:
Das istgenauwas PowerShell in der ersten Zeile seiner Fehlermeldung zurückgibt:
nslookup: Nicht maßgebliche Antwort:
In Zeile:1 Zeichen:1
+ nslookup -q=ns example.com
Anscheinend gibt NSLookup einen Fehler zurück, wenn seine Antwort Datensätze von einem nicht autoritativen Nameserver enthält. In Ihrem Fall scheint dies jedoch kein Problem zu sein, sodass Sie den Fehler wie oben beschrieben ignorieren können.