#powershell
#powershell
Вопрос:
Я пытаюсь получить массив MAC-адресов в формате JSON и связанные IP-адреса DHCP-арендаторов с DHCP-сервера Windows с помощью PowerShell.
Используя это: 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": "00-11-22-33-44-55",
"IPAddressToString": "192.168.0.2"
},
{
"ClientId": "00-11-22-33-44-66",
"IPAddressToString": "192.168.0.3"
}
]
Возможно ли это в однострочном?
Ответ №1:
Попробуйте это
Get-DhcpServerv4Lease -ScopeId 192.168.0.0 | Where-Object { $_.AddressState -eq "ActiveReservation" } | Select-Object -Property ClientId, @{Name = "Address"; Expression = { $_.IpAddress.IPAddressToString} } | ConvertTo-Json
Ответ №2:
Поскольку этот возвращаемый 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", "IP-адрес": "192.168.0.3" } ]
Постскриптум Вы можете написать это как однострочный, но это затруднило бы чтение кода, упростило бы ошибки и ничего не дало бы путем написания ДЛИННЫХ строк кода. Вы только усложните себе задачу, сделав это