Powershell:如何在分配变量时摆脱CMD输出(nslookup)

时间:2015-09-04 10:31:53

标签: powershell redirect cmd ip nslookup

我想在powershell脚本中运行nslookup,将输出分配给我可以解析的字符串变量。我不想看到像#34;非权威回答的回声:"在来自CMD执行的powershell窗口中,但我试图将命令的输出专门管道或重定向到变量的所有内容都没有工作或破坏变量。

示例:

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的Resolve-DnsName命令。我需要这两台服务器,因为我正在重定向查找以获取我的公共IP。还有其他方法可以做到这一点,但是这个方法非常有效,(invoke-WebRequest ifconfig.me/ip).Content在处理这个脚本时已经搞砸了。

1 个答案:

答案 0 :(得分:5)

您可以通过指定-Server的{​​{1}}参数来指定要解决查询的服务器。

Resolve-DnsName

来自Resolve-DnsName -Name myip.opendns.com -Server resolver1.opendns.com 命令的MSDN documentation

  

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