Как я могу изменить свой вывод с информации об аренде DHCP на ScopeId «Name»
Вот как выглядит мой вывод: это просто информация об аренде, где указано имя хоста:
IPAddress ScopeId ClientId HostName AddressState
--------- ------- -------- -------- ------------
10.10.10.10 99.99.99.99 11-11-11-11-11-11 AL10 Active
Используя этот сценарий PowerShell:
$hostname = "AL10"
$locationArray = @()
foreach ($Server in $DHServers){
$scope = Get-DHCPServerv4scope -ComputerName $Server.dnsname | Get-DHCPServerv4Lease -ComputerName $Server.dnsname | Where-Object HostName -like "$hostName*"
$locationArray += $scope
}
$locationArray
Я бы хотел просто вывести:
ScopeID Name
---------
Name
Цель: предоставить .txt с именами хостов, найти соответствующие аренды DHCP-сервера, а затем вывести «имя» ScopeID, как при использовании
Get-DHCPServerv4scope -ComputerName $Server.dnsname | Select-Object "name"
1 ответ
Решение
Я использовал хеш-таблицу.
$hashtable = @{} #create hash table
$i=0
foreach ($Server in $DHServers){
$scopes = Get-DHCPServerv4Scope -ComputerName $Server.dnsname #get all scopes
foreach ($hostname in (Import-Csv C:\script\Asset_List.csv | Select-Object -ExpandProperty asset)){ #get hostnames from list
foreach ($scope in $scopes) {
if($scope | Get-DhcpServerV4Lease -ComputerName $server.dnsname | Where-Object HostName -like "$hostName*" ) { #compares the hostname to find which lease it is in
try{
$hashtable.add($hostname, $scope.name)# add keys, values to table
}
catch {
$ErrorMessage = $_.Exception.Message
if ($ErrorMessage -like '*Key in dictionary Already*') {
write-host 'Network issues could be causing process to take longer than normal' -ForegroundColor Green
}
}
}
}
}
}
Затем я позвонил в свой
PSCustomObject
[PSCustomObject]@{ #Rename varibles in data pull for output file
Asset = $hostname
Model = $System.Model
SerialNumber = $BIOS.SerialNumber
Location = $hashtable[$hostname]
LastUser = $User
MacAddress = $mac
IpAddress = $IpV
Status = "Online"
}
}