当我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 的答案包含来自非权威名称服务器的记录时,它会返回错误。但是,就您而言,这似乎不是问题,因此您可以忽略上述错误。