Ce face Hashtable (@{})
Un hashtable (dicționar) se scrie cu @{ } și perechi Cheie = valoare, separate prin ; sau pe rânduri diferite. Citești o valoare cu $h.Cheie sau $h['Cheie'], adaugi sau modifici cu $h['Cheie'] = valoare sau $h.Add('Cheie', valoare), ștergi cu $h.Remove('Cheie') și verifici cu $h.ContainsKey('Cheie'). Cheile nu țin cont de majuscule. .Keys, .Values și .Count dau cheile, valorile și numărul de perechi.
Ordinea cheilor într-un hashtable obișnuit nu este garantată. Când contează (afișare, export), folosește [ordered]@{ ... }, disponibil din Windows PowerShell 3.0, care creează un OrderedDictionary. [ordered] se pune imediat înaintea lui @, nu înaintea numelui variabilei. Pentru a parcurge perechile prin pipeline, folosește $h.GetEnumerator(), care trimite obiecte cu .Key și .Value.
Tot din 3.0, [pscustomobject]@{ ... } transformă perechile într-un obiect cu proprietăți, în ordinea scrisă. Este felul uzual de a-ți construi propriile rânduri de date: le poți sorta, filtra, afișa în tabel sau exporta cu Export-Csv și ConvertTo-Json, exact ca ieșirea unui cmdlet.
Parametri
| Parametru | Descriere |
|---|---|
@{ K = v } |
Creează un hashtable. |
[ordered]@{ K = v } |
Dicționar care păstrează ordinea cheilor (Windows PowerShell 3.0+). |
$h.K / $h['K'] |
Citește valoarea cheii K. |
$h['K'] = v |
Adaugă cheia sau îi schimbă valoarea. |
.Add(K, v) |
Adaugă o cheie; dă eroare dacă cheia există deja. |
.Remove(K) |
Șterge cheia. |
.ContainsKey(K) |
True dacă cheia există. |
.GetEnumerator() |
Trimite perechile prin pipeline, ca obiecte cu Key și Value. |
[pscustomobject]@{...} |
Creează un obiect cu proprietățile date, în ordinea scrisă (Windows PowerShell 3.0+). |
Exemple
Exemplul 1: Citești valori după cheie
Notația cu punct și cea cu paranteze drepte sunt echivalente.
$elev = @{ Nume = 'Ana'; Oras = 'Iași'; Nota = 10 }
$elev.Nume
$elev['Oras']
$elev.Count
$elev.ContainsKey('Varsta')
Ieșire în terminal
Ana
Iași
3
False
Exemplul 2: Lista de prețuri, în ordinea în care ai scris-o
Cu [ordered], cheia adăugată ulterior apare la final, iar afișarea are coloanele Name și Value.
$preturi = [ordered]@{ Cafea = 12; Ceai = 9 }
$preturi['Croissant'] = 8
$preturi
Ieșire în terminal
Name Value
---- -----
Cafea 12
Ceai 9
Croissant 8
Exemplul 3: Rânduri de date cu [pscustomobject]
Obiectele se sortează după proprietatea Nota ca orice ieșire de cmdlet. Coloana numerică e aliniată la dreapta.
$elevi = @(
[pscustomobject]@{ Nume = 'Ana'; Oras = 'Iași'; Nota = 10 }
[pscustomobject]@{ Nume = 'Mihai'; Oras = 'Cluj'; Nota = 9 }
)
$elevi | Sort-Object Nota
Ieșire în terminal
Nume Oras Nota
---- ---- ----
Mihai Cluj 9
Ana Iași 10
Greșeli frecvente
- Să te bazezi pe ordinea cheilor dintr-un
@{ }obișnuit: poate diferi de cea scrisă. Folosește[ordered]. - Să scrii
[ordered]$h = @{ }: dă eroare de parsare. Corect:$h = [ordered]@{ }. - Să trimiți un hashtable direct în
Export-CsvsauSort-Objectși să aștepți câte un rând pe cheie: hashtable-ul e un singur obiect. Folosește.GetEnumerator()sau transformă-l în[pscustomobject]. - Să folosești
.Add()pentru o cheie care există deja: dă eroare. Pentru „adaugă sau înlocuiește” folosește$h['Cheie'] = valoare.
Comenzi înrudite
Variabile și tipuri: Variabilele încep cu $, primesc orice obiect .NET și pot fi legate de un tip ([int], [string], [datetime]); .GetType() arată tipul.Tablouri (@()): Un tablou ține mai multe valori; îl creezi cu virgule sau @(), îl citești cu [index], iar += creează de fiecare dată un tablou nou.Select-Object: Alege doar anumite proprietăți ale obiectelor, adaugă proprietăți calculate sau păstrează primele, ultimele ori unicele elemente.Export-Csv: Salvează obiectele într-un fișier CSV: un rând de antet cu numele proprietăților și câte un rând pentru fiecare obiect.ConvertTo-Json: Transformă obiecte PowerShell într-un șir JSON, de exemplu pentru un fișier de configurare sau corpul unei cereri către un API.