NSLookup в PowerShell всегда выдает ошибку RemoteException

NSLookup в PowerShell всегда выдает ошибку RemoteException

При запуске nslookupиз скрипта PowerShell я всегда получаю ошибку (которая выводится на консоль), несмотря на то, что поиск выполняется успешно:

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

Похоже, это вызвано тем, что ответ не является авторитетным. Поиск по авторитетному DNS-серверу не возвращает ошибку.

В своих попытках найти решение самостоятельно я нашел этоТАК ответь. Он предлагает использоватьResolve-DNSNameкоманда. К сожалению, для этого требуется Windows 8.1/Server 2012 R2, а некоторые из систем, на которых будет работать мой скрипт, — это системы эпохи Windows 7.

Как можно предотвратить появление этой ошибки?

Бонусные баллы за объяснение того, почему PowerShell считает, что произошла ошибка!

решение1

Игнорируйте ошибку исполняемого файла, перенаправив его на $null

Ваш исполняемый файл отправляет вывод в поток STDERR. Вы можете подавить его, перенаправив его в автоматическую переменную $null:

nslookup.exe example.com 2>$null

Примечания:

  • Вам необходимо выполнить перенаправление на переменную PowerShell $null. PS не позволит вам сделать это по-старинке (т. е. 2>nul).

  • Перенаправление на$null быстреечем использоватьOut-Null


Объяснение

NSLookup отправляет часть своих выходных данных вSTDERR-поток. Всякий раз, когда консольное приложение Windows делает это, PowerShell сообщает об этом какNativeCommandErrorошибка.

В командной строке выполните команду nslookup -q=SOA superuser.com 1>nul 2>con, чтобы увидеть, что NSLookup записывает в STDERR:

Неавторитетный ответ:

Этоточночто PowerShell возвращает в первой строке сообщения об ошибке:

nslookup : Неавторитетный ответ:
В строке:1 символ:1
+ nslookup -q=ns example.com

По-видимому, NSLookup возвращает ошибку, когда его ответ включает записи с неавторитетного сервера имен. Однако в вашем случае это не проблема, поэтому вы можете игнорировать ошибку, как описано выше.

Связанный контент