我正在通过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
有人能指出我逻辑错误的地方吗?我似乎无法得到急需的正确输出。提前谢谢。
答案 0 :(得分:0)
这是一个似乎有用的版本。我通过将-split
运算符返回的数组存储在变量中来简化您的尝试,以避免在管道发送时发生的展开。这样我们就可以直接访问每一列。注意,为简化起见,我刚用$dhcpcommand
替换了你的dhcp命令:
$dhcpcommand | select-string example.com | %{$cols = @($_ -split '\s+'); "$($cols[0]) $($cols[3] -replace '-','') $($cols[8])"}
答案 1 :(得分: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()
}
}
}