PowerShell Measure-Object: Een Complete Gids met Voorbeelden

Het tellen of berekenen van numerieke eigenschappen van objecten, zoals tekens, woorden en regels in tekenreeksen, kan frustrerend zijn. Gelukkig is de PowerShell Measure-Object cmdlet geschikt voor de taak.

In deze tutorial leer je de kracht van de Measure-Object cmdlet in het automatiseren van het meten van objecteigenschappen in PowerShell.

Duik er meteen in om je vaardigheden in het meten van objecten te verbeteren!

Vereisten

Deze tutorial is een hands-on demonstratie. Om mee te doen, heb je een systeem met PowerShell geïnstalleerd nodig. Deze tutorial maakt gebruik van Windows 10 met PowerShell v7.

Het tellen van bestanden en mappen

Het kennen van het aantal bestanden en mappen in een map kan nuttig zijn in verschillende scenario’s. Een voorbeeld is wanneer je de grootte van een map moet bewaken of het aantal bestanden in een map moet controleren.

De Measure-Object cmdlet telt het aantal bestanden en mappen in een map. Het exacte aantal helpt je bij het beter beheren en optimaliseren van je systeembronnen.

Om te zien hoe de Measure-Object cmdlet werkt bij het tellen van bestanden en mappen:

1. Open PowerShell en voer de volgende Get-ChildItem-opdracht uit om het totaal aantal bestanden en mappen gezamenlijk terug te geven (Measure-Object) in uw huidige directory.

Get-ChildItem | Measure-Object

De onderstaande uitvoer geeft 4852 bestanden en mappen aan in de huidige directory.

Counting the files and folders in the current directory

Misschien wil je alle bestanden en submappen in de directorystructuur recursief opnemen. Voeg in dat geval de parameter -Recurse toe, zoals hieronder weergegeven. Get-ChildItem -Recurse | Measure-Object

2. Voer vervolgens dezelfde opdracht uit als in stap één. Maar voeg deze keer de parameter -Directory toe om alleen het totaal aantal mappen binnen de werkmap te tellen.

Get-ChildItem -Directory | Measure-Object

Zoals je hieronder kunt zien, is het totale aantal nu lager (135) omdat de opdracht alleen mappen heeft geteld, met uitsluiting van alle andere objecten.

Counting the number of directories in the current directory

3. Voer nu de onderstaande opdracht uit om het aantal uitvoerbare bestanden (.exe) in uw huidige directory te tellen.

De -Filter-parameter vertelt de Get-ChildItem-cmdlet om de resultaten te filteren en alleen de bestanden met de opgegeven extensie terug te geven (bijv. *.txt, *.jpg, *.csv).

Get-ChildItem -Filter *.exe | Measure-Object
Counting the number of executable files in a directory

Het Meten van Bestandsgroottes

Het meten van objectlengtes en -groottes kan helpen bij het beter beheren van uw systeem, aangezien grote bestanden invloed hebben op de prestaties van uw systeem. Naast het tellen van eigenschappen, kunt u ook de lengte en grootte van objecten meten via de Measure-Object cmdlet.

Voer de onderstaande code uit om alle bestanden in de huidige map op te halen (Get-ChildItem) en hun respectievelijke lengtes standaard in bytes weer te geven (Write-Host).

De onderstaande code geeft elke meting weer op de console, inclusief de minimale en maximale bestandsgroottes, de gemiddelde bestandsgrootte, de som van bestandsgroottes en het totale aantal bestanden.

# Stel de drempel in voor de gemiddelde bestandsgrootte
$threshold = 5000000 
# Meet de grootte van elk bestand in de huidige map
$files = Get-ChildItem | Measure-Object -Property length -Minimum -Maximum -Sum -Average

Write-Host "Minimum file size: $($files.Minimum) bytes"
Write-Host "Maximum file size: $($files.Maximum) bytes"
Write-Host "Sum of file sizes: $($files.Sum) bytes"
Write-Host "Average file size: $($files.Average) bytes"
Write-Host "Total number of files: $($files.Count)"

# Controleer of de gemiddelde bestandsgrootte boven of onder de drempel ligt
if ($files.Average -ge $threshold) {
    # Als de gemiddelde bestandsgrootte boven de drempel ligt, speel dan een hoog geluid af
    [console]::beep(1000, 500)
} else {
    # Als de gemiddelde bestandsgrootte onder de drempel ligt, speel dan een laag geluid af
    [console]::beep(500, 500)
}

Hieronder zie je de groottes weergegeven in bytes.

Measuring file sizes

Misschien is het plakken van de code in de console niet jouw ding. Zo ja, sla de code op in een PowerShell-scriptbestand en voer het uit.

Voer nu de volgende opdrachten uit om een bestand te krijgen in de huidige map, waarvan de grootte ($_.Length) gelijk is (-eq) aan de maximale bestandsgrootte ($files.Maximum).

# Haal het bestand op en sla het op met dezelfde grootte als $files.Maximum
$max = Get-ChildItem | Where-Object -FilterScript {$_.Length -eq $files.Maximum}
# Geef de waarde van de maximale grootte ($files.Maximum) en het bestand met die grootte weer
Write-Host "Maximum file size: $($files.Maximum) bytes `nFile: $max"

De uitvoer hieronder toont de naam van het grootste bestand in de huidige map.

Getting the most extensive file in size

Het meten van de inhoud van tekstbestanden

In plaats van bestandsgroottes te meten, moet je mogelijk het aantal regels, woorden of tekens in een tekstbestand bepalen. Als dat het geval is, heeft het Measure-Object-cmdlet veel andere parameters om de inhoud van tekstbestanden te meten.

Voer de onderstaande code uit om de inhoud van het tekstbestand te meten (Measure-Object) op basis van -Character, -Line en -Word, en geef de metingen weer (Write-Host).

Zorg ervoor dat je de waarden van de variabelen $file_path en $file_content wijzigt naar jouw voorkeur.

# Definieer het bestandspad en de inhoud
$file_path = "C:\Temp\measure-object.txt"
$file_content = "One fish, two fishes, three fishes"

# Maak het bestand aan volgens het opgegeven bestandspad en de inhoud
Set-Content -Path $file_path -Value $file_content

# Meet de inhoud van het tekstbestand
$measurements = Get-Content -Path $file_path | Measure-Object -Character -Line -Word

# Geef de metingen weer op de console
Write-Host "The file '$file_path' contains $($measurements.Lines) lines, $($measurements.Words) words, and $($measurements.Characters) characters."
Measuring text file contents

Boolean Waarden Meten

Boolean-waarden zijn waarden die alleen waar of onwaar kunnen zijn. In PowerShell worden Boolean-waarden vaak gebruikt om de stroom van een script te regelen, een voorwaarde te bepalen (waar of onwaar) of het succes of falen van een opdracht aan te geven.

Het meten van Boolean-waarden kan nuttig zijn in verschillende scenario’s, zoals:

  • Het tellen van het aantal waarheids- of onwaarheidswaarden in een dataset.
  • Het bepalen van het percentage waarheidswaarden ten opzichte van het totale aantal waarden.

Deze informatie kan helpen bij het nemen van weloverwogen beslissingen bij het verwerken of analyseren van gegevens.

Om te zien hoe het meten van Boolean-waarden werkt:

Voer de volgende opdrachten uit om de som van Booleaanse waarden (standaard waarheidswaarden) in de array ($values) te tellen.

# Definieer een array van Booleaanse waarden ($true en $false).
$values = $true,$false,$false,$true,$true,$true,$false,$false,$true
# Meet (tel) de Booleaanse waarden (standaard waarheidswaarden).
$values | Measure-Object -Sum

Hieronder is het totale Telling van de Booleaanse waarden negen (9), terwijl de Som vijf (5) is omdat alleen de ware waarden worden geteld.

En de onware waarden? Ga naar de volgende stap en voer nog een paar opdrachten uit.

Counting the number of true values in an array

Voer nu de onderstaande code uit om de som van ware waarden ($trueCount) af te trekken van het totale aantal Booleaanse waarden ($count). Het verschil van de vergelijking is het totaal van onware waarden ($falseCount).

# Krijg het totale aantal Booleaanse waarden in een array
$count = $values.Count
# Krijg de som van ware waarden
$trueCount = ($values | Measure-Object -Sum).Sum
# Trek het totaal van ware waarden af van het totale aantal Booleaanse waarden
# om het totaal van de onware waarden te krijgen
$falseCount = $count - $trueCount
# Toon totale tellingen van zowel ware als onware waarden
Write-Host "Number of true values: $trueCount"
Write-Host "Number of false values: $falseCount"
Counting the number of false values

Als het meten van Booleaanse waarden een dagelijkse taak is, kunt u een functie maken die u op elk moment kunt aanroepen om de taak uit te voeren.

Het meten van Hashtables

Hashtables in PowerShell (een verzameling sleutel-waardeparen) stellen u in staat om gegevens snel en efficiënt op te slaan en op te halen. Als u het aantal items in een hashtable nodig heeft of de maximale en minimale waarden, laat dan de Measure-Object cmdlet uw hashtables meten.

Voer de onderstaande commando’s uit om de Num-eigenschap met de -Minimum– en -Maximum-waarden in uw hashtable ($MyHastable) te vinden.

# Maak een hashtable met drie hashtables, elk met een Num-eigenschap.
$MyHashtable = @(@{Num=10}, @{Num=20}, @{Num=30})
# Meet de Num-eigenschap van de hashtable op minimum en maximum.
$Stats = $MyHashtable | Measure-Object -Minimum -Maximum Num
# Toon de metingen van de hashtable
$Stats
Measuring hashtables

Het meten van Standaarddeviaties

Het controleren van gegevensreeksen kan langdradig zijn, maar dat hoeft niet zo te zijn. Het meten van de standaarddeviatie is handig bij het begrijpen van de verdeling van waarden in een gegevensset. U kunt ook eventuele uitschieters of ongebruikelijke gegevenspunten identificeren die van invloed zijn op de resultaten.

De standaarddeviatie meet de variatie of verspreiding van waarden in een gegevensset ten opzichte van het gemiddelde. Deze meting wordt berekend door de wortel te vinden van de variantie van de gegevens, wat het gemiddelde is van de gekwadrateerde verschillen van het gemiddelde.

Voer de onderstaande code uit om het gemiddelde en de standaarddeviatie van een reeks getallen opgeslagen in de variabele $Numbers te berekenen en weer te geven.

# Definieer een reeks getallen
$Numbers = 10, 20, 30, 40, 50

# Bereken het gemiddelde en de standaarddeviatie van de getallen
$Average = ($Numbers | Measure-Object -Average).Average
$StdDev = ($Numbers | Measure-Object -StandardDeviation).StandardDeviation

# Geef de resultaten weer
"Average: $Average"
"Standard deviation: $StdDev"

In de statistiek meet het gemiddelde de centrale neiging en beschrijft het de typische of meest representatieve waarde van een gegevensset.

Het gemiddelde wordt berekend door alle getallen in een gegevensset op te tellen en te delen door het totale aantal waarden. In dit voorbeeld is de gegevensset {10, 20, 30, 40, 50} met een som van 150, en er zijn vijf getallen (5) in de set.

Als gevolg daarvan wordt hieronder het gemiddelde berekend, dat 30 is.

Average = (10 + 20 + 30 + 40 + 50) / 5 = 30

Aan de andere kant meet de standaarddeviatie de spreiding of verspreiding van een reeks gegevens. De standaarddeviatie wordt als volgt berekend:

1. Find the difference between each data point and the average:
   10 - 30 = -20
   20 - 30 = -10
   30 - 30 = 0
   40 - 30 = 10
   50 - 30 = 20
   
2. Square each of these differences:
   (-20)^2 = 400
   (-10)^2 = 100
   0^2 = 0
   10^2 = 100
   20^2 = 400
   
3. Add up all the squared differences:
   400 + 100 + 0 + 100 + 400 = 1000
   
4. Divide the sum of squared differences by the total number of values:
   1000 / 5 = 200
   
5. Take the square root of the result:
   sqrt(200) = 14.142135623731
   
The standard deviation of this set of data is approximately 14.14. But 
in this case, the result is 15.8113883008419 
because of floating-point arithmetic limitations in computers.
Measuring the standard deviation

Conclusie

Het meten van gegevens is een essentiële taak, en de PowerShell Measure-Object cmdlet is een krachtig hulpmiddel om de taak te volbrengen. En in deze tutorial heb je geleerd hoe je gegevens op vele manieren kunt meten. Of je nu werkt met bestanden, tekstbestandsinhoud, booleaanse waarden, strings, arrays of hashtables, het meten ervan kan waardevolle inzichten bieden.

Nu kun je eenvoudig het gemiddelde, maximum en minimum van je gegevens berekenen en de variatie of spreiding van je gegevens meten. Met deze functies kun je een dieper inzicht krijgen in je gegevens en op basis van je analyse weloverwogen beslissingen nemen.

Met deze nieuwe kennis, waarom zou je dan niet je PowerShell-toolkit uitbreiden en Compare-Object toevoegen aan je arsenaal?

Source:
https://adamtheautomator.com/powershell-measure-object/