
При запуске 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 возвращает ошибку, когда его ответ включает записи с неавторитетного сервера имен. Однако в вашем случае это не проблема, поэтому вы можете игнорировать ошибку, как описано выше.