In de Microsoft PowerShell scripttaal worden cmdlets gebruikt om drie bewerkingen uit te voeren: informatie verzamelen, informatie instellen, en informatie verwijderen. Naast de cmdlets biedt PowerShell ook de mogelijkheid om informatie meer dan eens te verwerken. Er zijn twee ingebouwde PowerShell-functies die de meeste PowerShell-beheerders gebruiken. Dat zijn ForEach Loop en ForEach-Object. Met de PowerShell ForEach Loop kunt u door een reeks items lopen die in een PowerShell-variabele zijn verzameld. Bijvoorbeeld, met het Get-ADUser PowerShell cmdlet kun je gebruikersinformatie verzamelen uit Active Directory. Als je stadseigenschappen van elke gebruiker moet bekijken voordat je een actie onderneemt, zou je ForEach Loop kunnen gebruiken. De ForEach-Object kan worden gebruikt om direct met objecten te werken en wordt meestal gebruikt in een pijplijn zoals we in dit artikel zullen uitleggen. Laten we eens kijken naar enkele voorbeelden waarin de functies ForEach Loop en ForEach-Object worden gebruikt.
PowerShell ForEach Loop
Ons eerste voorbeeld van het gebruik van ForEach Loop is om de stadseigenschap van Active Directory-gebruikers te controleren en vervolgens een actie uit te voeren. Laten we aannemen dat u gebruikers wilt exporteren waarvan de stadseigenschap is ingesteld op “Londen” en vervolgens het resultaat wilt opslaan in een CSV-bestand. Hier is het PowerShell script:
Zoals je in bovenstaand script kunt zien, hebben we een variabele gemaakt met de naam $CityReport die het pad opslaat voor het CSV bestand waar het rapport zal worden opgeslagen. Vervolgens verzamelen we alle gebruikers van een specifieke organisatorische eenheid en slaan de verzamelde gebruikers met alle eigenschappen op in de variabele $AllUsersNow. Vervolgens begint de ForEach Loop verwerking. In de ForEach Loop functie controleren we de stadseigenschap van de gebruiker en dan gebruiken we een IF voorwaarde, we controleren of de stadseigenschap de waarde “London” heeft of niet voor de huidige gebruiker. Als de gebruiker de waarde “London” in de stadseigenschap heeft, worden de waarden van de gebruikersnaam en de plaatsnaam toegevoegd aan het bestand C:temp.cityReport.CSV.
Een ander voorbeeld van het gebruik van ForEach Loop is het verwerken van informatie die is opgeslagen in een CSV-bestand. Stel dat u een CSV-bestand hebt met de waarden voor gebruikersnaam, plaats en afdeling. U wilt de plaats- en afdelingskenmerken van de gebruiker wijzigen vanuit het CSV-bestand. Om dit te doen, gebruikt u het onderstaande PowerShell script:
Zoals u in bovenstaand script kunt zien, hebben we de inhoud van het CSV bestand geïmporteerd in $CSVFile variabele en vervolgens met behulp van de ForEach Loop de afdelings- en plaatswaarden uit het CSV bestand opgeslagen in $NewDepartment en $NewCity variabelen en vervolgens met het Set-ADUser PowerShell cmdlet de afdelings- en plaatswaarden voor de gebruiker geactualiseerd.
In een notendop, gebruik PowerShell ForEach Loop wanneer je informatie meer dan eens moet verwerken als je een actie moet ondernemen op een specifiek item op basis van de property waarde van het item, en/of wanneer je object informatie uit een bestand moet wijzigen.
Anders dan de ForEach Loop functie, biedt PowerShell ook ForEach-Object. De ForEach-Object werkt, zoals de naam al zegt, direct met de objecten en wordt meestal gebruikt in een pijplijn. Zoals je bijvoorbeeld in het onderstaande commando kunt zien, haalt het cmdlet Get-Process alle processen op de lokale computer op en ForEach-Object verwerkt na de pijplijn (|) de objecten (procesnamen), waarna alleen de procesnaam in het uitvoervenster wordt weergegeven.
Get-Process | ForEach-Object {$_.ProcessName}
Ook als je de procesnaam samen met de proces-ID wilt zien, voer je dit commando uit:
Get-Process | ForEach-Object {$_.ProcessName, $_.ID}
Een ander voorbeeld van het gebruik van ForEach-Object is het opvragen van de lengte van alle bestanden in een directory. Laten we aannemen dat u de lengte van alle bestanden in de map C:Temp wilt controleren. Je voert deze commando’s uit:
$ThisDir = “C:Temp”
Get-ChildItem $ThisDir | ForEach-Object -Process {if (!$_.PSIsContainer) {$_.Name; $_.Length / 1024; ” ” }}
In het ForEach-Object PowerShell-voorbeeld hieronder verzamelt u gebeurtenissen uit het Application Event Log en slaat u vervolgens het gebeurtenisbericht op in een tekstbestand.
Take it from here
Dus nu hebt u een idee hoe u de ForEach en ForEach-Object ingebouwde PowerShell-functies kunt gebruiken. De PowerShell ForEach-lus kan worden gebruikt om door een reeks items te lopen die in een PowerShell-variabele zijn verzameld en in een CSV-bestand zijn opgeslagen. De functie ForEach-Object kan worden gebruikt om rechtstreeks met objecten te werken. De voorbeelden die we in dit artikel hebben gegeven met zowel de ForEach Loop- als de ForEach-Object-functie, moeten u op weg helpen en u laten nadenken over manieren om de opdrachten in uw werk te gebruiken.