如何将我的输出从 DHCP 租赁信息更改为 ScopeId“名称”

问题描述

这是我的输出的样子,它只是主机名所在的租约信息:

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 服务器租约,然后像使用 Get-DHcpserverv4scope -ComputerName $Server.dnsname | Select-Object "name" 时一样输出 ScopeID 的“名称

解决方法

我使用了哈希表。

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