Here is what My output looks like, It's just lease information where the host name is:
IPAddress ScopeId ClientId HostName AddressState
--------- ------- -------- -------- ------------
10.10.10.10 99.99.99.99 11-11-11-11-11-11 AL10 Active
Using this PowerShell script:
$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
What I would like, is it just to output:
ScopeID Name
---------
Name
Goal is: Provide a .txt of hostnames, find the corresponding DHCP Server leases, then output the "name" of the ScopeID like when using Get-DHCPServerv4scope -ComputerName $Server.dnsname | Select-Object "name"
I used a hash table.
$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
}
}
}
}
}
}
Then I called it in my 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"
}
}