In today’s post I am going to discuss a very flexible yet simple technique I use to accomplish bulk administration tasks in PowerShell using the import-csv and the ForEach-Object cmdlets. In today’s example we will be looking at bulk imports of Mail Contacts (New-MailContact) in Exchange. The task itself could be anything however the concept here remains the same.
The first thing we need to determine is which parameters are required for the New-MailContact cmdlet. To do this use Get-Help New-MailContact. From the results we see that -ExternalEmailAddress and -Name are required parameters. At a minimum our csv needs to include data for these two fields.
Next build the CSV. I typically name the headers to match the parameter names I plan to use during the import. This simplifies the syntax later however matching the header names to the parameter names is not a requirement.
In this example Ill save the file as c:\users.csv. If creating the CSV in Excel be sure to change Save as type to CSV (Comma delimited).
Next, verify your CSV imports successfully by running import-csv c:\users.csv. If any errors are found in your csv, resolve them before moving forward.
Next pipe the results of import-csv to ForEach-Object and specify the action to take for each object within {}. In this case, import-csv C:\users.csv | ForEach-Object {New-MailContact}. Now, at a minimum, add the required parameters as part of New-MailContact and specify the values found in the CSV by using $_. followed by the the column header name (-Name $_.FirstName). The final syntax should look something like this.
import-csv “C:\users.csv” | ForEach-Object {New-MailContact -name $_.FirstName –FirstName $_.FirstName –LastName $_.LastName -ExternalEmailAddress $_.ExternalAddress -OrganizationalUnit $_.OrganizationalUnit -Displayname $_.FirstName}
That is it! A very simple yet versatile way to complete bulk administration tasks in almost any environment using Import-CSV coupled with ForEach-Object.