【问题标题】:Powershell: how to get rid of CMD output while assigning a variable (nslookup)Powershell:如何在分配变量时摆脱 CMD 输出(nslookup)
【发布时间】:2015-09-04 10:31:52
【问题描述】:

我想在 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 在我编写这个脚本时出现了故障。

【问题讨论】:

  • 在这种情况下不起作用。我很想跳过旧的 CMD 文件,但就像我在上一段中提到的那样,我还没有找到一个纯粹的 powershell 方法来使用 2 个服务器。我在我们的帖子中尝试了该命令,它抱怨“没有这样的主机已知”。 ...我发誓我不是在自言自语。这里有另一个评论,现在它消失了。 O.o
  • 您可以像这样nslookup "myip.opendns.com resolver1.opendns.com 2>out-null 将错误消息重定向到 null

标签: powershell redirect cmd ip nslookup


【解决方案1】:

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

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

来自MSDN documentationResolve-DnsName 命令:

-服务器
指定要查询的DNS服务器的IP地址或主机名。如果不提供此参数,默认查询接口 DNS 服务器。

【讨论】:

  • 感谢您清除命令,我不知何故以为我正在尝试将服务器解析为另一台服务器,但我不知道其中一个需要指定为名称。现在我看到了,它是有道理的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
  • 2021-10-04
  • 2013-06-21
  • 2015-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多