This morning my Windows Server 2012 R2 class helped out another IT Pro out on the internet who needed to make some modifications to his Active Directory user accounts based off of information in a CSV file. One of the problems that he had was that the column header in the CSV included a space in the name. We have three ways to deal with this.
1. Change the column header. Yes, this would be a manual task every time you receive a new copy of the CSV for processing. No fun there. Actually avoiding having objects with spaces in their property names would be better, but we do not always have control over this.
2. Change the property name when the file is read.
1 2 3 4 5 6 7 8 9 | ForEach ($User in (Import-CSV -Path E:\PS\Users2.CSV | Select-Object -Property *, @{N="EM";E={"$($_.{Employee Number})"})) { $Address = $User.EmailAddress Get-ADUser -Filter 'EmailAddress -eq $Address' -Properties EmailAddress, EmployeeID | Set-ADUser -EmployeeID $User.EM
} |
Here the Import-CSV command is piped to Select-Object where we convert the object property Employee Number to EM Notice the extra curly braces required to get this to work. On line 7, we use our custom property.
3. Use the property with the space in the name directly in the code.
1 2 3 4 5 6 7 | ForEach ($User in (Import-CSV -Path E:\PS\Users2.CSV)) { $Address = $User.EmailAddress Get-ADUser -Filter 'EmailAddress -eq $Address' -Properties EmailAddress, EmployeeID | Set-ADUser -EmployeeID "$($User.{Employee Number})"
} |
You can see on line 5 that we are using the property with the space in the name. To get this to work, the actual property name in encased inside of curly braces.
For those of you who have taken my PowerShell classes, you already know my position on spaces when used in variable names. Same thing applies to spaces in a property name. Avoid them or be ready to write some extra code.
Comments