arrayspowershelloutputdhcpscope-id

How can I change my output from DHCP Lease info to ScopeId "Name"


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"


Solution

  • 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"
        }
    }