PowerShell中的NSLookup始终会引发RemoteException错误


3

当我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为什么认为发生了错误!


您可以尝试使用[System.Net.Dns]::Resolve("superuser.com")代替Resolve-DNSNamecmdlet。关于nslookup,有趣的是,它并没有在Posh 5中引发错误,而是将其定向Non-authoritative answer:到控制台(即使将输出分配给变量-就像您的示例一样)
WeatherForecastingRat

1
如果您$ErrorActionPreference = "SilentlyContinue"在脚本的开头进行设置,则应该能够阻止它。请记住,这将
消除

$MyOutput = nslookup -q=SOA superuser.com 2>$nullnslookupNon-authoritative answer:消息发送到stdERR 就足够了。为了证明这一点,运行>NUL nslookup -q=SOA superuser.com以及2>NUL nslookup -q=SOA superuser.com从打开的cmd窗口......
JosefZ

就像评论所暗示的那样,这随Powershell版本的不同而不同。如果使用v5,则Non-authoritative answer:可以通过2>$null重定向排除该行。如果使用输出错误的较小版本,则可以修改$ErrorActionPreference。不要以为-ErrorAction会在这里。.NET还有其他替代方法,包括[System.Net.Dns]::GetHostAddresses("superuser.com")

1
@ITSnuggles我正在执行的某些系统是Windows 7,带有该cmdlet的PS版本不在该OS上运行。:(
Twisty模仿者,

Answers:


2

通过重定向到$ 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行:char:1
+ nslookup -q = ns example.com

显然,NSLookup的答案包含来自非权威名称服务器的记录时,将返回错误。但是,对于您来说,这似乎不是问题,因此您可以忽略上述错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.