NSLookup in PowerShell löst immer einen RemoteException-Fehler aus

NSLookup in PowerShell löst immer einen RemoteException-Fehler aus

Beim Ausführen nslookupeines 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 $nullVariable von PowerShell umleiten. Mit PS können Sie dies nicht auf die herkömmliche Art (also 2>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.

verwandte Informationen