我想在 powershell 脚本中运行 nslookup,将输出分配给我可以解析的字符串变量。我不想在 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
在我编写这个脚本时出现了故障。