2013-10-08 55 views
2

我正在通過powershell運行dhcp查詢。我收到了我想看到的信息,但沒有以我需要的格式顯示。
樣品: 數據我用命令的工作:從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 

有人能指出我在哪裏我的邏輯是有缺陷?我似乎無法得到非常需要的正確輸出。提前致謝。

回答

0

這是一個似乎有效的版本。我通過將-split運算符返回的數組存儲在一個變量中來簡化您嘗試的操作,以避免在發送到管道時發生退繞。這樣我們就可以直接訪問每一列。注意,爲了簡化,我剛剛更換你的DHCP命令$dhcpcommand

$dhcpcommand | select-string example.com | %{$cols = @($_ -split '\s+'); "$($cols[0]) $($cols[3] -replace '-','') $($cols[8])"} 
+0

先生,你是我的英雄。 – systemonkey

0

這裏是另一種方式來解析輸出,而是返回文本的豐富的對象:

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() 
     } 
    }  
}