検索できたいくつかの例を参照しました。これは非常に適切であるように見えましたが、それでもこれを機能させることができません。
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
を追加します。
$ matches [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+)\.'
これで問題なく動作します。退屈しているときは、以前やっていたことが失敗していたことを微妙な方法で発見するために、しばらく時間を費やすかもしれません。