我可以在Powershell单行中选择一个属性和一个子属性吗



我正在尝试使用PowerShell从Windows DHCP服务器获取DHCP租约的MAC地址和相关IP地址的JSON数组。

使用此:Get-DhcpServerv4Lease -ScopeId 192.168.0.0 | Where-Object {$_.AddressState -eq "ActiveReservation"} | Select-Object -Property ClientId,IPAddress | ConvertTo-Json

我得到这个输出:

[
{
"ClientId": "00-11-22-33-44-55",
"IPAddress": {
"Address": 12345678,
"AddressFamily": 2,
"ScopeId" : null,
"IPAddressToString": "192.168.0.2"
}
},
{
"ClientId": "00-11-22-33-44-66",
"IPAddress": {
"Address": 12345679,
"AddressFamily": 2,
"ScopeId" : null,
"IPAddressToString": "192.168.0.3"
}
}
]

但我只想要IPAddressToString的ClientId和值,而不想要其他属性:

[
{
"ClientId": "00-11-22-33-44-55",
"IPAddressToString": "192.168.0.2"
},
{
"ClientId": "00-11-22-33-44-66",
"IPAddressToString": "192.168.0.3"
}
]

这在一个班轮里可能吗?

试试这个

Get-DhcpServerv4Lease -ScopeId 192.168.0.0 | Where-Object { $_.AddressState -eq "ActiveReservation" } |  Select-Object -Property ClientId, @{Name = "Address"; Expression = { $_.IpAddress.IPAddressToString} } | ConvertTo-Json

由于返回的json是一个数组,我认为您需要循环遍历等元素

Get-DhcpServerv4Lease -ScopeId 192.168.0.0 | 
Where-Object {$_.AddressState -eq "ActiveReservation"} | 
ForEach-Object {
$_ | Select-Object ClientId, @{Name = 'IPAddress'; Expression = {$_.IPAddress.IPAddressToString}}
} | ConvertTo-Json

输出:

[{"ClientId":"00-11-22-33-44-55","IP地址":"192.168.0.2"},{"ClientId":"00-11-22-33-44-66","IPAddress":"192.168.0.3"}]

p.S.你可以把它写成一行代码,但这会让代码更难阅读,更容易出错,而且写长行代码也没有任何好处。这样做只会让事情变得更加困难

最新更新