Heb je ooit dezelfde taak meerdere keren moeten uitvoeren? Bijvoorbeeld het aanmaken van meerdere Active Directory-gebruikers één voor één met behulp van de GUI? Of het inloggen op een server om oude logbestanden uit geselecteerde mappen te verwijderen? Als je antwoord ja is, weet dan dat je niet de enige bent. Het is tijd om de Import-Csv
cmdlet en de foreach-lus van PowerShell onder de knie te krijgen.
Er is niets mis met handmatige taken; het is soms noodzakelijk. Maar als het gaat om het lezen en verwerken van CSV-bestanden, kunnen de PowerShell-cmdlet Import-Csv
en de ForEach
-lus helpen.
De PowerShell-cmdlet Import-Csv
is een uitstekende manier om gegevens uit een getabelde bron, zoals een CSV-bestand, te lezen. Je kunt vervolgens de ForEach
-lus gebruiken om elk rij in de CSV-gegevens te doorlopen.
In dit artikel leer je hoe je deze krachtige combinatie kunt gebruiken om bulk-, saaie en repetitieve taken te automatiseren.
Als je nieuw bent met de
Import-Csv
-cmdlet en deForEach
-lus, of als je je kennis wilt opfrissen, kun je deze links bezoeken om meer te leren.CSV-bestanden beheren in PowerShell met Import-Csv (foreach-lus)
Vereisten
In dit artikel staan verschillende voorbeelden en demo’s. Om mee te doen, moet je eerst een paar dingen hebben.
- A script editor such as Visual Studio Code, Atom, or Notepad++. Use whichever one you’re comfortable with.
- Windows PowerShell 5.1 of PowerShell Core 6+
- Toegang tot Exchange Online (optioneel als u het voorbeeld met betrekking tot Exchange Online hands-on wilt volgen).
Het in actie brengen van Import-Csv en de ForEach-lus
In de volgende secties staan verschillende voorbeelden van hoe u de Import-Csv
-cmdlet en ForEach
-lus kunt gebruiken die u in real-world scenario’s kunt tegenkomen. Hoewel deze voorbeelden van CSV-import foreach PowerShell specifiek zijn voor elk doel, is het cruciaal om te begrijpen dat het concept en de techniek die worden toegepast hetzelfde zijn.
Records lezen en weergeven uit CSV
Misschien is het meest basale gebruik van Import-Csv
en ForEach
-lus het lezen van records uit een bestand en deze weergeven in de console. De anatomie van een CSV-bestand is vergelijkbaar met die van een database. Het heeft kolomkoppen, en elke rij wordt beschouwd als een record.
Bijvoorbeeld, hieronder staat de inhoud van het bestand genaamd employee.csv
, dat bestaat uit drie kolommen – EmployeeID, Naam, en Geboortedatum, en vier records.

De onderstaande code importeert de inhoud van het bestand employee.csv en leidt de geïmporteerde gegevens vervolgens door naar de ForEach-Object
-cmdlet. Vervolgens zal ForEach-Object
elk record in de geïmporteerde CSV doorlopen om de geconcateneerde waarden in de console weer te geven. Kopieer de onderstaande code en sla deze op als lijst-medewerker.ps1.
Opmerking: Het type ForEach-lus dat in dit voorbeeld wordt gebruikt, is de ForEach-Object-cmdlet. Raadpleeg de sectie “De ForEach-Object-cmdlet” in dit artikel.
Zodra het script is opgeslagen, voer het uit door de bestandsnaam aan te roepen in PowerShell. Wanneer het script wordt uitgevoerd, zou je een uitvoer moeten zien die vergelijkbaar is met de onderstaande schermafbeelding.

Zoeken en weergeven van gegevens uit CSV
In het vorige voorbeeld heb je geleerd hoe je alle gegevens uit een CSV kunt lezen en weergeven. In dit voorbeeld wordt dezelfde CSV-bestand employee.csv gebruikt, maar deze keer maak je een PowerShell-functie om te zoeken naar een EmployeeID in het CSV-bestand.
De onderstaande codefragment is een PowerShell-functie genaamd Find-Employee
met slechts één parameter. De parameter heet EmployeeID
en accepteert een werknemer-ID-waarde die moet worden gezocht in het CSV-bestand.
Voordat deze functie kan worden gebruikt, moet deze eerst worden geïmporteerd in je PowerShell-sessie. Er zijn twee manieren om de Find-Employee
-functie in het geheugen te importeren:
- Het onderstaande codefragment kopiëren en plakken in PowerShell.
- Het script opslaan als
Find-Employee.ps1
en importeren met behulp van de dot-sourcing-techniek.
Opmerking: Het type ForEach-lus dat in dit voorbeeld wordt gebruikt, is de ForEach-verklaring. Raadpleeg de sectie “De foreach-verklaring” in dit artikel.
Zodra de functiecode is geïmporteerd in de PowerShell-sessie, roep deze aan door de functienaam in te typen zoals hieronder.
Wanneer de functie wordt uitgevoerd zonder gebruik te maken van de EmployeeID
-parameter, zal het vragen om de waarde van de EmployeeID
te zoeken. Zie het voorbeeld van de output hieronder.

Of, de functie kan worden uitgevoerd met de opgegeven waarde van de EmployeeID-parameter op het moment van uitvoeren, zoals hieronder getoond.
De schijfruimte van meerdere servers ophalen
Een veelvoorkomende routineklus onder systeembeheerders is het monitoren van de schijfruimte op meerdere servers. In plaats van naar elke server te loggen om de schijfruimte te controleren, kun je een CSV-lijst maken met servernamen, schijfletters en drempelwaarden. Vervolgens kun je met PowerShell het CSV-bestand importeren en door elk regel lopen om een query uit te voeren.
Om een script te maken dat de schijfruimte van externe servers ophaalt, maak eerst de CSV-lijst met de volgende koppen:
- servername – dit is de naam van de server om op te vragen.
- disk – dit is de letter van de schijf waarvan de ruimte wordt opgehaald.
- threshold – dit definieert de grenswaarde in GB. Als de vrije ruimte van de schijf lager is dan deze waarde, geeft het rapport een waarschuwingsstatus weer.
Het voorbeeld hieronder toont vier vermelde records. Uw CSV-bestand zal verschillen afhankelijk van het aantal servers of schijven om te lezen.
Zodra de CSV is voltooid, sla het bestand op als servers.csv. Dit dient als de invoerlijst die zal worden geïmporteerd door het PowerShell-script.
Om een voorbeeld te geven van het ophalen van schijfruimte, kopieer de onderstaande code naar uw scripteditor en sla het op als diskReport.ps1. Het script moet worden opgeslagen op dezelfde locatie als het CSV-pad.
Het bovenstaande script voert de volgende acties uit zodra het is uitgevoerd.
- Importeert het csv-bestand met de naam servers.csv en slaat het op in de variabele
$server_list
. - Doorloop de lijst met servers die zijn opgeslagen in de variabele
$server_list
. - In elke iteratie van de foreach-lus wordt de huidige regel vertegenwoordigd door de variabele
$server
. - Haal de schijfinformatie op van de servers met behulp van de
Get-WmiObject
cmdlet. - Alleen relevante eigenschappen selecteren.
Servernaam – Dit is de naam van het systeem dat wordt bevraagd.
Schijfletter – De letter die aan de schijf is toegewezen.
Grootte (GB) – De grootte van de schijf in GB.
Vrij (GB) – De vrije ruimte op de schijf in GB.
Drempelwaarde (GB) – De gedefinieerde drempelwaarde in GB.
Status – Als de waarde van Vrij (GB) lager is dan de waarde van Drempelwaarde (GB), wordt de status ‘Waarschuwing’ weergegeven. Anders is de status ‘Normaal’.
Na het opslaan van het scriptbestand diskReport.ps1 kan het worden uitgevoerd door de naam ervan in PowerShell aan te roepen.
Zodra het is uitgevoerd, toont de onderstaande schermafbeelding de uitvoer van het script.

De uitvoer kan ook worden geëxporteerd naar CSV. Het exporteren naar CSV is handig wanneer het rapport gedeeld moet worden, omdat het geëxporteerde CSV-bestand kan worden gemaild of geüpload naar een bestandsdeling of een SharePoint-site. Bekijk Export-Csv: De PowerShell-manier om CSV-bestanden als volwaardige onderdelen te behandelen voor meer informatie over het exporteren naar CSV.
Het maken van meerdere actieve directorygebruikers
Op dit punt zou je al een goed idee moeten hebben over het gebruik van Import-Csv
en ForEach
. Het volgende voorbeeld gaat iets verder door de cmdlets New-ADUser
en Get-ADUser
toe te voegen aan de mix.
Laten we aannemen dat je een CSV-bestand hebt ontvangen, genaamd new_employees.csv
, met daarin de lijst van nieuwe medewerkers van de HR-afdeling. Elke rij in het CSV-bestand vertegenwoordigt een gebruiker die aan boord moet worden genomen en heeft de volgende kolommen: Voornaam, Achternaam, Afdeling, Staat, WerknemerID, en Kantoor.
De gebruikersnaam moet worden afgeleid van de eerste letter van de voornaam van de werknemer, gecombineerd met de achternaam (bijv. bparr voor de gebruiker Bob Parr).

Nadat het CSV-bestand is opgeslagen, gebruikt het onderstaande script Import-Csv
om het CSV-bestand new_employees.csv te lezen. Vervolgens wordt er door elke rij geïtereerd, waarbij de waarden worden doorgegeven aan de juiste parameters van New-ADUser
.
Na het uitvoeren van het script zouden de nieuwe gebruikers al in Active Directory moeten bestaan. Het is echter een goede praktijk om te bevestigen dat de gebruikersaccounts daadwerkelijk zijn aangemaakt.
Met behulp van hetzelfde CSV-bestand new_employees.csv als referentie, zal het onderstaande script CSV importeren en foreach gebruiken om de ADUser-objecten te verkrijgen die overeenkomen met degenen in de lijst.
Het toevoegen van een Proxy-e-mailadres aan de Office 365 Mailbox
In het beheer van de Office 365-mailbox komen verzoeken voor het toevoegen van proxy-adressen voor meerdere gebruikers niet zelden voor. Gewoonlijk ontvangt de beheerder bij zo’n verzoek een lijst met gebruikers en het toe te voegen e-mailadres, vergelijkbaar met het onderstaande CSV-voorbeeld.

Opmerking: Voordat u enige Exchange Online-cmdlets kunt uitvoeren in PowerShell, moet u eerst zijn ingelogd op de Exchange Online-beheeromgeving.
Met behulp van de Import-Csv
en ForEach
lus in een PowerShell-script kan de lijst in één keer worden verwerkt. Het onderstaande script laat zien hoe dit kan worden gedaan.
Het onderstaande script importeert de inhoud van het bestand new_address.csv en slaat deze op in de variabele $user_list
. Vervolgens doorloopt PowerShell met behulp van de foreach()
methode de hele lijst met gebruikers en gebruikt de gebruikersnaam
en e-mail
waarden in elk record om een nieuw e-mailadres toe te voegen aan elke mailbox.
Zodra het script is uitgevoerd, wordt er geen uitvoer weergegeven in de console. Geen schermuitvoer betekent dat het nieuwe e-mailadres succesvol is toegevoegd. Maar hoe kunt u er zeker van zijn dat de e-mailadressen zijn toegevoegd?
Met behulp van hetzelfde CSV-bestand new_address.csv als referentie kan worden geverifieerd of de nieuwe adressen zijn toegevoegd met behulp van Import-Csv
en ForEach
.
Het onderstaande script importeert de inhoud van het bestand new_address.csv en slaat deze op in de variabele $user_list
. Vervolgens doorloopt PowerShell met behulp van de foreach()
methode de hele lijst met gebruikers om te controleren of het nieuwe e-mailadres bestaat in de lijst met mailbox-proxyadressen. Indien gevonden, wordt de status True; anders is het resultaat False.
Wanneer het validatiescript wordt uitgevoerd, zou de uitvoer eruit moeten zien zoals de schermafbeelding hieronder weergeeft. U zult merken in de uitvoer hieronder dat de status allemaal WAAR is, wat zou betekenen dat de nieuwe e-mailadressen succesvol aan elke mailbox zijn toegevoegd.

Het versturen van Dagelijkse Weersvoorspelling naar een Mailinglijst
In dit voorbeeld wordt aangenomen dat u een CSV-bestand hebt met een lijst van e-mailadressen van de abonnees en hun gebied of locatie. Deze abonnees verwachten dagelijks een e-mail met de weersvoorspelling voor de dag, specifiek voor hun locatie. Bekijk de voorbeeld CSV hieronder met bestandsnaam subscribers.csv.

De CSV hieronder bevat slechts twee abonnees. Een in Los Angeles en een in Manila.
Het doel is om een script te creëren dat de volgende acties uitvoert:
- Importeer de e-mail en gebiedsinformatie uit het subscribers.csv bestand
- Voor elke abonnee:
– Download de weersvoorspelling afbeelding op basis van het gebied van de abonnee van https://wttr.in/
– Stuur de weersvoorspelling afbeelding als een e-mail naar het e-mailadres van de abonnee.
Het script hieronder voert de acties uit die hierboven zijn vermeld. U hoeft alleen de eerste drie variabelen te wijzigen – $senderAddress
, $smtpServer
, en $smtpPort
. Kopieer vervolgens deze code en sla het op als Send-WeatherInfo.ps1.
Raadpleeg de opmerkingen boven elk gedeelte van het script om meer te leren over wat de code doet.
Wanneer het script wordt uitgevoerd, wordt een e-mail naar elke abonnee gestuurd, vergelijkbaar met het voorbeeld van de e-mailscreenshot hieronder.


Samenvatting
Er is geen limiet aan de taken waarbij de Import-Csv
en de ForEach
-lus kunnen worden toegepast. Zolang de taak een lijst met gescheiden kolommen omvat, kunt u zeker in deze krachtige combinatie duiken.
In dit artikel heb je geleerd hoe een CSV-bestand vergelijkbaar is met een database. Je hebt ook geleerd hoe je Import-Csv
kunt gebruiken voor het importeren van gegevens en hoe je naar de waarden kunt verwijzen tijdens de iteratie van de ForEach
-lus.
I hope that with the many examples provided in this article, you now understand more of the Import-Csv
and ForEach
. And, that you would be able to use the knowledge you gained in this article in your administration and automation tasks.
Verder lezen
Source:
https://adamtheautomator.com/import-csv-and-the-foreach-loop/