2

Когда я запускаю 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 ответ1

1

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

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

nslookup.exe example.com 2>$null

Заметки:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .