Importera användare till Active Directory från en csv-fil med hjälp av Powershell kan vara väldigt enkelt men några vanliga fällor kan dyka upp. Här är några av mina lösningar.
CSV-filen
· Formatet på infilen, dessa verkar alltid vara olika. I vissa fall kan de lösas med delimiter parametern på import-csv (finns från och med version 2 av Powershell)
exempel : import-csv .\test.csv -Delimiter ";"
· Ett annat fel som jag stött på är om första raden (kolumnhuvuden) avslutas med ett skiljetecken. Detta verkar inte Powershell inte kunna hantera.
Exempel:
Name;ålder;längd;
Jim;42;185
Radera semikolonet efter längd så kommer de fungera.
· Teckenformatet klara inte åäö i datat. En lösning på detta problemet är att köra "get-content" och skicka de till en ny fil.
Exempel: get-content .\test.csv > .\test_fixed.csv
Lösenordet.
Se till att de lösenordet du försöker sätta följer lösenordspolicyn i domänen. De går inte att skicka med lösenordet som en sträng i klartext. Här är två exempel på hur du kan göra.
· Om lösenordet ska vara enligt ett fält från csv-filen måste de konverteras till ett System.Security.SecureString-format. I detta exempel är lösenordet sparat i "Password" kolumnen vilket inte kommer fungera utan att byta namn på parametern enligt exempel i nästa sektion.
import-csv .\test.csv -Delimiter ";" |
% {$_.password = $_.password |
ConvertTo-SecureString -AsPlainText -Force;$_}
· Om de är en större mängd konton som ska skapas med samma lösenord, skapa variablen först exempel:
$UsrPwd = convertto-securestring "Password-1" -asplaintext -force
Variabeln kan sen användas med New-ADUser cmdlet.
Exempel: New-ADUser -Name "Jimmy" -AccountPassword $UsrPwd
Parameternamnen ska matcha kolumnhuvuden.
Snyggast är de när objektet som kommer i pipen mappar sina attribut direkt till rätt parametrar. För att få rätt kolumn till rätt parameter kan de krävas att namnen ändras. Om de är en engångsföreteelse är de nog enklast att byta kolumnnamn i csv-filen. I andra fall kan powershell mappa om parametrar med Select-object cmdlet. Exempelet nedan mappar om 'Efternamn' till 'Surname' och 'Password' till 'AccountPassword'.
Import-Csv -Path $sPath -Delimiter ";"| Select @{Name="Surname";Expression={$_."Efternamn"}}, @{Name="AccountPassword";Expression={$_."Password"}} | New-ADUser
I vissa fall kan man behöva lägga till flera attribut direkt i pipen med data som inte kommer från csv-filen. Exempel:
Import-Csv -Path $sPath -Delimiter ";" | Add-Member -name AccountPassword -type noteproperty -value $Password –PassThru | New-ADUser