Când scriu scripturi PowerShell, deseori caut date specifice, stochez acele date într-un obiect și apoi, de cele mai multe ori, le export în format CSV. Acest articol vă arată cum să faceți toate acestea folosind PSObject.

Cel mai simplu mod pe care îl găsesc pentru a stoca date pentru un obiect este de a le stoca folosind un PSObject. Dacă aveți mai multe obiecte pentru care trebuie să stocați date, atunci puteți stoca fiecare PSObject într-o matrice. Această matrice poate fi apoi exportată în CSV.

Un PSObject seamănă foarte mult cu un hashtable în care datele sunt stocate în perechi cheie-valoare. Puteți crea oricât de multe perechi cheie-valoare doriți pentru fiecare PSObject.

Crearea unui PSObject

După cum am menționat, PowerShell PSObject utilizează o structură de tip cheie & pereche de valori. Pentru a stoca date în PSObject tot ce trebuie să faceți este să definiți o cheie și apoi să stocați o valoare în cheie. Exemplele de mai jos creează un nou PSObject și stochează câteva date în obiect. În acest exemplu, creăm două „chei” (Key1 și Key2). Fiecare dintre acestea conține biți de date despre obiect (Value1 și Value2).

Într-un scenariu din viața reală, cheile și valorile conțin informații de tip descriere despre obiect. Astfel, de exemplu, dacă am stoca informații despre un fișier, unele dintre perechile cheie-valoare pe care le-am putea crea ar fi Name, FileExtension, Path și Size.

Iată cum se creează un PSObject atât în PowerShell 2.0 și 3.0 și mai sus:

PowerShell 2.0

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

PowerShell 3.0 & mai sus

În PowerShell 3.0 și mai sus, se recomandă să folosiți următorul cod pentru a crea un PSObject. Acest lucru se datorează faptului că păstrează ordinea fiecărei valori cheie create, ceea ce înseamnă că la exportul în CSV ordinea de sortare este menținută.

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

Stocarea mai multor PSObjects într-un array

Până acum am analizat stocarea informațiilor despre un singur obiect (de exemplu, un fișier). Ce se întâmplă dacă enumerăm un dosar și trebuie să stocăm informații despre toate fișierele din dosar? În acest caz, vom crea un PSObject pentru fiecare fișier (pentru a stoca datele sale individuale) și apoi vom stoca toate aceste PSObjects într-o matrice. Acest lucru facilitează foarte mult stocarea și exportul de informații pentru mai multe obiecte.

Iată cum se stochează un PSObject în interiorul unui array. Pentru a face acest lucru pentru mai multe fișiere, trebuie doar să faceți acest lucru în interiorul buclei ForEach:

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

Un exemplu din lumea reală

Să configurăm un exemplu rapid pentru a vă ajuta cu demonstrația. În acest exemplu vom face următoarele:

Citerea unui fișier text care conține o listă de nume de angajați. Pentru fiecare nume îi vom căuta în AD și vom aduna câteva informații suplimentare, inclusiv numele de utilizator și adresa de e-mail. Vom ieși apoi aceste date în CSV.

Exemplu de soluție

Scriptul de mai jos enumeră toate numele angajaților din fișierul text și, pentru fiecare dintre ei, caută în AD informații suplimentare despre angajați. Fiecare dintre aceste date este stocat în propriul PSObject numit $hItemDetails.

Pentru a ne asigura că datele sunt în ordinea corectă atunci când sunt exportate în CSV, folosim metoda @{} de creare a unui nou PSObject (disponibilă numai în PowerShell 3.0 și versiunile ulterioare). În cele din urmă, având în vedere că există mai mulți angajați, stochez fiecare PSObject într-un array numit $aResults. Această matrice este apoi exportată în 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"

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.