2015-09-04 34 views
4

我想在powershell脚本中运行nslookup,将输出分配给我可以解析的字符串变量。我不想在CMD执行的powershell窗口中看到回声,如“非权威答案:”,但是我试图将命令的输出专门输入或重定向到变量的所有内容都没有工作或破坏变量。Powershell:如何摆脱CMD输出,同时分配一个变量(nslookup)

例子:

PS> $temp = (& nslookup 'myip.opendns.com','resolver1.opendns.com'); 
Non-authoritative answer: 

我试过几个变通......

PS> $temp = Invoke-Expression "cmd /c nslookup myip.opendns.com resolver1.opendns.com" >$null 

PS> $temp = Invoke-Expression "cmd /c @ECHO off && nslookup myip.opendns.com resolver1.opendns.com" 

也许有一个更好的方式来做到这一点。我在这里使用字符串来获取IP地址的方式比我想要的多了几行。

$temp = (nslookup myip.opendns.com resolver1.opendns.com) | Out-String 
$temp = $temp.split() 
$tempIPs = $temp -match "^(.|\r|\n)*?\b(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b" 
$publicIP = $tempIPs[1] 
return $PublicIP 

我,因为使用两个服务器,像我用NSLOOKUP做,似乎并不使用PowerShell的决心,DNSNAME命令上班走了这条路线。我需要两台服务器,因为我正在重定向查找以获取公有IP。还有其他方法可以做到这一点,但是这个工作非常好,(invoke-WebRequest ifconfig.me/ip).Content在处理这个脚本时对我产生了一些影响。

+0

这在这种情况下不起作用。我很想跳过旧的CMD文件,但就像我在最后一段中提到的那样,我还没有找到一种纯粹的PowerShell方式来处理2台服务器。我在我们的帖子中试过命令,它抱怨说“没有这样的主机在已知的”。 ...我发誓我不是在跟自己说话。这里有另一个评论,现在它消失了。 Oo – TwoRoses

+0

您可以将错误消息重定向到像这样的'nslookup'myip.opendns.com resolver1.opendns.com 2> out-null' –

回答

4

您可以指定服务器通过指定-Server参数Resolve-DnsName解决您的查询。

Resolve-DnsName -Name myip.opendns.com -Server resolver1.opendns.com 

MSDN documentationResolve-DnsName命令:

-Server <字符串[] >
   指定的IP地址或DNS服务器的主机名,以进行查询。默认情况下,如果未提供此参数,则会查询接口DNS服务器。

+0

感谢您清除命令,我以某种方式以为我试图解决一个服务器另一台服务器,我不知道其中一个需要指定为名称。现在我明白了,这是有道理的。 – TwoRoses