Při psaní skriptů PowerShell často vyhledávám konkrétní data, ukládám je do objektu a pak je většinou exportuji do formátu CSV. Tento článek vám ukáže, jak toto vše provést pomocí PSObject.

Nejjednodušší způsob, jak uložit data pro objekt, mi přijde uložit je pomocí PSObject. Pokud máte více objektů, pro které potřebujete uložit data, pak můžete každý PSObject uložit do pole. Toto pole pak můžete exportovat do CSV.

Příkaz PSObject se velmi podobá hashtable, kde jsou data uložena v párech klíč-hodnota. Pro každý PSObject můžete vytvořit libovolný počet dvojic klíč-hodnota.

Vytvoření PSObject

Jak již bylo zmíněno, PowerShell PSObject používá strukturu typu dvojice klíč &hodnota. Pro uložení dat do PSObject stačí definovat klíč a poté do klíče uložit hodnotu. Níže uvedené příklady vytvoří nový objekt PSObject a uloží do něj některá data. V tomto příkladu vytváříme dva „klíče“ (Key1 a Key2). Každý z nich obsahuje bity dat o objektu (Hodnota1 a Hodnota2).

V reálném scénáři klíče a hodnoty obsahují informace typu popisu o objektu. Pokud bychom tedy například ukládali informace o souboru, některé z dvojic klíč-hodnota, které bychom mohli vytvořit, by byly Name (název), FileExtension (přípona souboru), Path (cesta) a Size (velikost).

Tady je návod, jak vytvořit PSObject jak v prostředí PowerShell 2, tak v prostředí PowerShell.0 i 3.0 a vyšší:

PowerShell 2.0

$MyPSObject = New-Object -TypeName psobject -Property @{ Key1 = 'Value1' Key2 = 'Value2'}

PowerShell 3.0 & vyšší

V prostředí PowerShell 3.0 a vyšším se pro vytvoření PSObject doporučuje použít následující kód. Ten totiž zachovává pořadí jednotlivých vytvořených klíčových hodnot, což znamená, že při exportu do CSV bude zachováno pořadí řazení.

$MyPSObject = @{ Key1 = 'Value1' Key2 = 'Value2'}

Uložení více PSObjektů v poli

Dosud jsme se zabývali ukládáním informací o jednom objektu (např. souboru). Co když vyjmenováváme složku a potřebujeme uložit informace o všech souborech ve složce? V takovém případě bychom vytvořili PSObject pro každý soubor (pro uložení jeho individuálních údajů) a pak bychom všechny tyto PSObjekty uložili do pole. Takto lze opravdu snadno ukládat a exportovat informace pro více objektů.

Tady je návod, jak uložit PSObject uvnitř pole. Chcete-li to provést pro více souborů, stačí provést tento postup uvnitř smyčky ForEach:

# Initialising the array$MyArray = @()# Storing PSObject in an array$MyArray += $MyPSObject

Reálný příklad

Nastavíme si rychlý příklad, který nám pomůže s demonstrací. V tomto příkladu budeme provádět následující:

Čtení textového souboru, který obsahuje seznam jmen zaměstnanců. Pro každé jméno je vyhledáme v systému AD a shromáždíme některé další informace, včetně uživatelského jména a e-mailové adresy. Tyto údaje pak budeme vypisovat do formátu CSV.

Příklad řešení

Následující skript vyjmenuje všechna jména zaměstnanců v textovém souboru a pro každé z nich vyhledá v systému AD jejich další informace. Každý z těchto údajů je uložen ve vlastním objektu PSObject s názvem $hItemDetails.

Abychom zajistili správné pořadí údajů při exportu do CSV, použijeme metodu @{} vytvoření nového objektu PSObject (dostupná pouze v prostředí PowerShell 3.0 a vyšším). Nakonec, protože existuje více zaměstnanců, uložím každý PSObject do pole nazvaného $aResults. Toto pole je pak exportováno do CSV.

Import-Module ActiveDirectory$aResults = @()$List = Get-Content "C:\Temp\List.txt" ForEach ($Item in $List) { $Item = $Item.Trim() $User = Get-ADUser -Filter { displayName -like $Item -and SamAccountName -notlike "a-*" -and Enabled -eq $True } -Properties SamAccountName, GivenName, Surname, telephoneNumber $sEmail = $User.GivenName + "." + $User.Surname + "@test.com" $hItemDetails = @ { FullName = $Item UserName = $User.SamAccountName Email = $sEmail Tel = $User.telephoneNumber } #Add data to array $aResults += $hItemDetails}$aResults | Export-CSV "C:\Temp\Results.csv"

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.