Я сослался на несколько примеров, которые мне удалось найти, которые казались очень подходящими, но мне все еще не удалось заставить это работать.
Мои входные данные выглядят следующим образом из команды dhcp server stats, и я подтвердил, что $ output определяется правильно со строками, которые выглядят так:
MIBCounts:
Discovers = 63911.
Offers = 3903.
Delayed Offers = 0.
Requests = 29199.
Acks = 273080.
Naks = 71.
Declines = 0.
Releases = 395.
ServerStartTime = Tuesday, March 27, 2012 7:38:53 PM
Scopes = 34.
Scopes with Delay configured= 0.
Subnet = 10.31.0.0.
No. of Addresses in use = 203.
No. of free Addresses = 40774.
No. of pending offers = 0.
Subnet = 10.32.3.0.
No. of Addresses in use = 0.
No. of free Addresses = 0.
No. of pending offers = 0.
Subnet = 10.32.100.0.
No. of Addresses in use = 48.
No. of free Addresses = 145.
No. of pending offers = 0.
Subnet = 10.32.101.0.
No. of Addresses in use = 34.
No. of free Addresses = 159.
No. of pending offers = 0.
Я попробовал вот что, но не нашел совпадений:
$output=$(netsh -r myserver dhcp server show mibinfo)
$dhcp_regex=@"
(?s)Subnet = (\d\.\d\.\d\.\d)\.\W+
.*No\. of Addresses in use = (\d+)\.\W+
.*No\. of free Addresses = (\d+)\.\W+
"@
$dhcp_record= {
@{
subnet=$matches[0]
inuse=$matches[1]
free=$matches[2]
}}
$output -match $dhcp_regex
$matches
Помощь приветствуется.
Вместо этого попробуйте это для своей первой строки:
(?s)Subnet = (\d+\.\d+\.\d+\.\d+)\.\W*
Вы также захотите посмотреть на каждую строку отдельно:
$output | % { $_ -match $dhcp_regex }
# Добавить | Out-Null
если вы не хотите, чтобы каждая строка выводилась на экран.
$ соответствует [1]
Изменить: вот более полный пример.
$dhcp_regex = 'Subnet = (\d+\.\d+\.\d+\.\d+)'
$dhcp_regex2 = 'in use = (\d+)'
$output | ? { $_ -match $dhcp_regex -or $_ -match $dhcp_regex2} | % { $Matches[1] }
Изменить: вот многострочный пример.
$dhcp_regex = '(?m)Subnet = (\d+\.\d+\.\d+\.\d+)\.\r\n.*in use = (\d+)'
$output | Out-String | % { $_ -match $dhcp_regex }
$matches
кончик шляпы: http://www.vistax64.com/powershell/80160-powershell-regex-help.html
Изменить: похоже (?m)
на самом деле не нужно. Out-String
секретный соус.
Изменено указанное вами регулярное выражение, чтобы добавить дополнительный элемент данных.
$dhcp_regex='(?m)Subnet = (\d+\.\d+\.\d+\.\d+)\.\r\n.*in use = (\d+)\.\r\n.* free Addresses = (\d+)\.'
Теперь это отлично работает - очень ценно! Я могу потратить некоторое время, когда мне будет скучно (хе-хе), чтобы узнать, в каких тонкостях то, что мы делали до этого, терпело неудачу.