PowerShellスクリプトからnslookup
を実行すると、ルックアップが成功したにもかかわらず、常にエラー(コンソールに出力されます)が発生します。
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サーバーに対してルックアップを実行しても、エラーは返されません。
自分で解決策を見つけようとしたところ、これが見つかりました SO回答 。 Resolve-DNSName コマンドを使用することをお勧めします。残念ながら、これにはWindows 8.1/Server 2012 R2が必要であり、スクリプトを実行するシステムの一部はWindows7時代です。
PowerShellがエラーが発生したと見なす理由を説明するためのボーナスポイント!
実行可能ファイルは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は、その回答に権限のないネームサーバーからのレコードが含まれている場合にエラーを返します。ただし、問題ではないように思われる場合は、上記のエラーを無視してかまいません。