Ce face Measure-Object
Measure-Object (alias measure) are două moduri. Modul numeric întoarce un obiect GenericMeasureInfo cu Count și, la cerere, Sum, Average, Maximum, Minimum pentru proprietatea dată în -Property. Modul text (-Line, -Word, -Character) întoarce un TextMeasureInfo.
Rezultatul are mai mult de patru proprietăți, așa că se afișează ca listă. De cele mai multe ori ai nevoie de o singură valoare, pe care o iei direct: ($elevi | Measure-Object Nota -Average).Average.
Din PowerShell 6 există -StandardDeviation și -AllStats (toate statisticile deodată), iar proprietatea poate fi un bloc de script. Din 7.3, un obiect fără proprietatea măsurată nu mai produce eroare (decât în Set-StrictMode).
Parametri
| Parametru | Descriere |
|---|---|
-Property |
Proprietatea măsurată; acceptă wildcard-uri și bloc de script. |
-Sum, -Average |
Suma și media valorilor. |
-Maximum, -Minimum |
Cea mai mare și cea mai mică valoare. |
-StandardDeviation |
Abaterea standard a valorilor (PowerShell 6+). |
-AllStats |
Toate statisticile de mai sus deodată (PowerShell 6+). |
-Line, -Word, -Character |
Numără rândurile, cuvintele și caracterele din șirurile primite. |
-IgnoreWhiteSpace |
Nu numără spațiile la -Character. |
Ce returnează
Un obiect GenericMeasureInfo (sau TextMeasureInfo în modul text).
Exemple
Exemplul 1: Statistici pentru note
Câmpurile necerute (aici StandardDeviation) rămân goale.
$elevi = @(
[pscustomobject]@{ Nume = 'Ana'; Nota = 9 }
[pscustomobject]@{ Nume = 'Mihai'; Nota = 7 }
[pscustomobject]@{ Nume = 'Ioana'; Nota = 10 }
[pscustomobject]@{ Nume = 'Radu'; Nota = 6 }
)
$elevi | Measure-Object -Property Nota -Average -Sum -Maximum -Minimum
Ieșire în terminal
Count : 4
Average : 8
Sum : 32
Maximum : 10
Minimum : 6
StandardDeviation :
Property : Nota
Exemplul 2: Doar numărul de obiecte
Luăm direct proprietatea Count: toți elevii, apoi doar cei cu nota cel puțin 8.
$elevi = @(
[pscustomobject]@{ Nume = 'Ana'; Nota = 9 }
[pscustomobject]@{ Nume = 'Mihai'; Nota = 7 }
[pscustomobject]@{ Nume = 'Ioana'; Nota = 10 }
[pscustomobject]@{ Nume = 'Radu'; Nota = 6 }
)
($elevi | Measure-Object).Count
($elevi | Where-Object Nota -GE 8 | Measure-Object).Count
Ieșire în terminal
4
2
Exemplul 3: Rânduri, cuvinte și caractere
Fiecare șir este un rând; caracterele includ spațiile (12 + 19 = 31).
'Cafenea Iași', 'deschis zilnic 8-20' | Measure-Object -Line -Word -Character
Ieșire în terminal
Lines Words Characters Property
----- ----- ---------- --------
2 5 31
Greșeli frecvente
- Folosirea listei afișate ca valoare:
$m = $elevi | Measure-Object Nota -Sume un obiect; suma este$m.Sum. - Lipsa lui
-Propertype obiecte:$elevi | Measure-Object -Sumnu adună notele, ci încearcă să adune obiectele însele. Scrie-Property Nota. - Media poate avea multe zecimale (de exemplu 8,333…); rotunjește valoarea cu
[math]::Round($m.Average, 2)înainte s-o afișezi.
Comenzi înrudite
Group-Object: Grupează obiectele care au aceeași valoare la o proprietate și arată câte sunt în fiecare grup.Where-Object: Filtrează obiectele din pipeline și le lasă să treacă doar pe cele care îndeplinesc o condiție.ForEach-Object: Rulează un bloc de cod pentru fiecare obiect din pipeline; din PowerShell 7.0 poate rula blocurile în paralel cu -Parallel.Get-Content: Citește conținutul unui fișier ca listă de linii (sau ca un singur șir cu -Raw); poate afișa primele sau ultimele linii și urmări un log.Import-Csv: Citește un fișier CSV și creează câte un obiect pentru fiecare rând, cu proprietăți numite după coloanele din antet.