从 ipconfig /all 中提取 DNS 服务器的正则表达式

Regex to extract DNS Servers from ipconfig /all

我四处寻找解决方案,但还没有找到任何好的解决方案。我需要在 powershell 脚本中从命令 ipconfig /all 的输出中提取 DNS 服务器。提取此信息的最佳方法是什么?

示例:

   Lease Expires . . . . . . . . . . : Monday, August 6, 2018 12:46:13 PM
   Default Gateway . . . . . . . . . : fe80::200:5eff:fe00:204%4
                                       10.161.180.1
   DHCP Server . . . . . . . . . . . : 10.221.228.17
   DHCPv6 IAID . . . . . . . . . . . : 115363651
   DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-22-DE-E5-35-E0-4F-43-29-6E-21
   DNS Servers . . . . . . . . . . . : 10.50.50.50
                                       10.50.10.50
   NetBIOS over Tcpip. . . . . . . . : Enabled

我需要选择 2 个 IP 的 10.50.50.50 和 10.50.10.50。

您可以像这样使用正则表达式:

"DNS Servers[ .]+:\s+(?<DNS1>\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?)\s*(?<DNS2>\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?)?"

本文有几个使用 PowerShell 中的正则表达式的示例: https://kevinmarquette.github.io/2017-07-31-Powershell-regex-regular-expression/

以下是它可能如何解决您的问题:

$result = ipconfig /all
$groups = [regex]::matches($result, "DNS Servers[ .]+:\s+(?<DNS1>\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?)\s*(?<DNS2>\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?)?")[0].Groups

要获得第一个结果 (DNS1),请使用 $groups[1].Value,对于第二个 (DNS2),请使用 $groups[2].Value。结果如下:

$groups[1].Value -> 10.50.50.50
$groups[2].Value -> 10.50.10.50