2

PowerShell を使用して dhcp クエリを実行しています。見たい情報が得られますが、必要な形式ではありません。
サンプル: 次のコマンドで作業しているデータ:

netsh dhcp server \\dhcpserver scope 10.0.1.0 show clientsvq

の出力を取得します

10.0.1.21    - 255.255.255.0  -00-23-7d-e9-45-58   -2/19/2016 5:13:50 PM    -D -BUILD-01.example.com -NonQuarantined -INACTIVE -No
10.0.1.22    - 255.255.255.0  -00-23-7d-e9-54-38   -2/19/2016 5:13:55 PM    -D -BUILD-02.example.com -NonQuarantined -INACTIVE -No
10.0.1.23    - 255.255.255.0  -00-23-7d-e8-cf-80   -6/11/2016 11:30:30 AM   -D -BUILD-03.example.com -NonQuarantined -INACTIVE -No

私が出力として欲しいのはこれです:

10.0.1.21 00237de94558 BUILD-01.example.com
10.0.1.22 00237de95438 BUILD-02.example.com
10.0.1.23 00237de8cf80 BUILD-03.example.com

目的の列を抽出し、特殊文字を削除して、出力をフォーマットしようとしました。コマンド:

netsh dhcp server \\dhcpserver scope 10.0.1.0 show clientsvq | findstr example.com | foreach {"$(($_ -split '\s+',10)[0,3])" -replace "\-",""; "$(($_ -split '\s+',10)[8])" -replace "^-","";}

次の出力形式を取得します。

10.0.1.21 00237de94558
BUILD-01.example.com
10.0.1.22 00237de95438
BUILD-02.example.com
10.0.1.23 00237de8cf80
BUILD-03.example.com

誰かが私のロジックのどこに欠陥があるかを指摘できますか? 非常に必要な正しい出力に到達できないようです。前もって感謝します。

4

2 に答える 2

1

出力を解析し、テキストではなくリッチ オブジェクトを返す別の方法を次に示します。

netsh dhcp server \\dhcpserver scope 10.0.1.0 show clientsvq  | foreach  {

    $values = ($_ -split '\s+-')[0,2,5]

    if($values[0] -as [ipaddress])
    {
         New-Object PSObject -Property @{
           IPAddress = [ipaddress]$values[0].Trim()
           MAC = $values[1].Trim() -replace '-'
           Name = $values[2].Trim()
        }
    }    
}
于 2013-10-09T09:04:48.047 に答える