Regex для извлечения DNS-серверов из ipconfig /all

Я искал решение этой проблемы, но пока не нашел ничего хорошего. Мне нужно извлечь DNS-серверы из вывода команды ipconfig /all в сценарии powershell. Что было бы лучшим способом вытащить эту информацию?

Пример:

   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.

1 ответ

Решение

Вы можете использовать регулярное выражение, как это:

"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
Другие вопросы по тегам