Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Powershell - vyhledávání v CSV

Ahoj,
mám 2 CSVčka (AD, HR), každé CSV o 4-6 tisících řádcích a 20-30 hodnotách.

Potřebuji v každém CSV vyhledat jednu hodnotu (employeenumber) a k tomu nějakou další property, a to vše dosadit do nové tabulky.

..    
        $employeenumbers = $($source |select -ExpandProperty employeenumber) + $($AD | select -ExpandProperty employeenumber |select -unique
    
    write-host ".. creating custom hash table"
    # creating custom table containing all employee numbers     
foreach ($number in $employeenumbers) {
     $number
     $dataHR = $HR |?{$_.employeenumber -eq $number} 
     $dataAD = $AD |?{$_.employeenumber -eq $number} 
     $MyObject = New-Object psobject -Property @{
        EmployeeNumber = $number
        Enabled = $dataAD.Enabled
        VemaOsCislo = $dataHR.employeenumber
        VemaDatumOD = $dataHR.datumNastupu
        VemaDatumDO = $dataHR.datumVystupu
      }
    $mycol += $MyObject
    }

Problem je, že to vytvoření té nové tabulky trvá priserne dlouho - 4 employee/sec (je to tím, že používám arraylist a where-object).
Jenže jiný způsob mě, jakožto powershell začátečníka nenapadá (resp. napadá - hashtable, ale neumim to aplikovat pro muj případ)

Napadla mě ještě prasárna, že vytvořím několik hashtables a ty pak sloučím do custom objectu

$htname = @{}
    foreach ($item in $ad) {
    $ADEmployee = $item.employeenumber
    $ADname = $item.name
    $ADMailbox = $item.mailbox
    $htname.set_Item("$ADEmployee","$ADName")
    }
    
    $htmailbox = @{}
    foreach ($item in $ad) {
    $ADEmployee = $item.employeenumber
    $ADMailbox = $item.mailbox
    $ADMailbox = $item.mailbox
    $htmailbox.set_Item("$ADEmployee","$ADMailbox")
    }
    
    $mycol = @()
    
    write-host ".. creating custom table - PsObject"

    foreach ($number in $employeenumbers) {
    
    $myobject = New-Object psobject -Property ([ordered]@{
    employeenumber = $number
    vemacislo = $hthrcislo[$number]
    vemajmeno = $hthrUzivatelskeJmenoAD[$number]
    adname = $htname[$number]
    mailbox = $htmailbox[$number]
    })
    $mycol += $myobject

    
    }
    $mycol

.. ale přece se to nemusí dělat takto .. ne?

Předmět Autor Datum
no nic, už jsem na to přišel import-csv |group employeenumber -asHashTable Zbytek je easy
MKc 23.03.2017 16:03
MKc
Vďaka za napísanie riešenia. poslední
los 23.03.2017 17:46
los

Zpět do poradny Odpovědět na původní otázku Nahoru