PowerShell 中的 NSLookup 总是引发 RemoteException 错误

PowerShell 中的 NSLookup 总是引发 RemoteException 错误

当我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 服务器进行查找不会返回错误。

在我自己尝试寻找解决方案的过程中,我发现了这一点所以回答。建议使用解析 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 正在将其输出的一部分发送到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 的答案包含来自非权威名称服务器的记录时,它会返回错误。但是,就您而言,这似乎不是问题,因此您可以忽略上述错误。

相关内容