PowerShell 中的 NSLookup 總是拋出 RemoteException 錯誤

PowerShell 中的 NSLookup 總是拋出 RemoteException 錯誤

當我從 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 伺服器進行查找不會回傳錯誤。

當我自己嘗試尋找解決方案時,我發現了這一點所以答案。它建議使用解析-DNS名稱命令。不幸的是,這需要 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 正在將其輸出的一部分傳送到標準錯誤流。每當 Windows 控制台應用程式執行此操作時,PowerShell 都會將此報告為本機指令錯誤錯誤。

在命令提示字元下執行nslookup -q=SOA superuser.com 1>nul 2>con以查看 NSLookup 正在寫入 STDERR 的內容:

非權威答案:

這是確切地PowerShell 在其錯誤訊息的第一行中傳回的內容:

nslookup :非權威答案:
在 line:1 char:1
+ nslookup -q=ns example.com

顯然,當 NSLookup 的答案包含來自非權威名稱伺服器的記錄時,它會傳回錯誤。但是,在您的情況下,這似乎不是問題,因此您可以忽略上述錯誤。

相關內容