Powershell where-객체 속도 개선

Powershell where-객체 속도 개선

Windows Server 2012R2를 실행하는 DHCP 서버에서 DHCP 예약 목록을 가져오고 싶습니다. 목록에는 IP, MAC, 이름, 설명 및 예약 임대 상태가 포함되어야 합니다(클라이언트가 온라인인지 여부를 확인하기 위한 것임). 예약을 받는 데 CMDLet이 있다는 것을 알고 있습니다.

$IP_res = (Get-DhcpServerv4Reservation -ComputerName $env:COMPUTERNAME -ScopeId 10.10.0.0)

결과에는 임대 상태가 포함되지 않습니다. 하지만 이를 얻을 수 있는 또 다른 CMDLet이 있습니다.

$IP_lease =(Get-DhcpServerv4Lease -ComputerName $env:COMPUTERNAME -ScopeId 10.10.0.0)

이제 내 생각은 필요한 모든 속성을 포함하는 사용자 정의 개체를 만드는 것이었습니다.

$save =  New-Object System.Collections.Generic.List[System.Object]
foreach($line in $IP_res)
{
   $new_IP_Obj = "" | Select IP, MAC, Name, Description, LeaseStatus
   $var = $IP_lease | Where-Object {$_.ClientId -eq $line.ClientId } 
   $new_IP_Obj.IP = $line.IPAddress.IPAddressToString
   $new_IP_Obj.MAC = $line.ClientId
   $new_IP_Obj.Name = $line.Name
   $new_IP_Obj.Description = $line.Description 
   $new_IP_Obj.LeaseStatus = $var.AddressState
   $save.add(new_IP_obj)
}

불행히도 대용량 데이터를 비교해야 할 때 Where-Object는 상당히 느립니다.
where-object의 속도를 향상시킬 수 있는 기회가 있습니까?

답변1

여기에 코드가 있습니다.설립하다이를 위해 수정되었습니다.

$Merged = @()
$Scopes = Get-DhcpServerv4Scope -ComputerName dc2008 #-ScopeId '10.1.230.0'
Foreach ($Scope In $Scopes) {
    $IP_res = (Get-DhcpServerv4Reservation -ComputerName dc2008 -ScopeId $Scope.ScopeId)
    $IP_lease =(Get-DhcpServerv4Lease -ComputerName dc2008 -ScopeId $Scope.ScopeId)

    $IP_lease + $IP_res | Group-Object -Property ClientId | ForEach {
        If ($_.group[1].AddressState -ne $null) {
            $Record = New-Object -TypeName psCustomObject -Property @{
                IP=$_.group[0].IPAddress.IPAddressToString;
                MAC=$_.group[0].ClientId;
                Name=$_.group[1].Name;
                Description=$_.group[0].Description;
                LeaseStatus=$_.group[1].AddressState
                };
            $Merged += $Record
        }
    }
}
$Merged | ft -AutoSize

증명할 수는 없지만 Group-Object가 더 빠른 방법이라고 생각하는 경향이 있습니다(목록과 찾을 항목을 하나씩 받는 '어디'와는 달리 두 목록을 모두 받기 때문에 더 빠른 검색 방법을 사용할 수 있습니다). .

관련 정보