Stappen:
- Pas het Excel bestand aan en sla deze op als CSV
- Converteer CSV bestand naar UTF8 formaat
- Gebruik Powershell script om de gebruikers aan te maken
Stap 1:
In de eerste regel van Excel staan de kolomnamen die ook in het Powershell script terug komen.
De Excel sheet heb ik enigszins moeten aanpassen zodat er kolommen ontstonden met bijvoorbeeld: gebruikersnaam conventie (voorletter.geboortenaam) en DisplayName
Hier de door mij gebruikte eerste Excel rij:
PERSONEELSNUMMER;GivenName;1ste_letter_GN;Gebruikersnaam_tussenvoegsel;Geboorte_SN;Gebruikersnaam_met_spaties;Gebruikersnaam;UPN_Suffix;UPN;Title;Mobiel;Afdeling;Locatie;Preffered_SN;Space;DisplayName;EMAILADRES;Password
Stap 2:
Het Powershell script maakt gebruik van het import-csv commando, echter importeert deze de csv in ASCII formaat.
Dat kan onderstaand resultaat opleveren:
Het CSV bestand zal daarom eerst geconverteerd moeten worden naar UTF8 formaat.
Dat kan gelukkig makkelijk doordat het Get-Content (cat) commando bestanden uitleest in UTF8 formaat.
Hierdoor hoef je alleen de output weg te schrijven naar een nieuw csv bestand, dat dan in UTF8 formaat is.
PS C:\SCRIPTS\CADU>cat NewUsers.csv > NewUsers2.csv
Stap 3:
Gebruik CreateADUsers.ps1 en pas deze eventueel aan:
# CreateADUsers.ps1
Set-ExecutionPolicy Unrestricted
Import-Module ActiveDirectory
$csvpath = "c:\Scripts\CADU\NewUsers.csv"
$date = Get-Date
$logfile = "c:\Scripts\CADU\create_AD_users.log"
$Bedrijf = "TBedrijf"
$i=0
# Specify parent container for all new users.
$OU = "OU=Users,OU=TBedrijf,DC=test,DC=local"
Import-Csv $csvpath -Delimiter:";" | ForEach-Object {
$sam = $_.Gebruikersnaam
Try { $exists = Get-ADUser -LDAPFilter "(sAMAccountName=$sam)" }
Catch { }
If(!$exists)
{
$Password = $_.Password
New-ADUser $sam -GivenName $_.GivenName -Surname $_.Preffered_SN -DisplayName $_.DisplayName -Company $Bedrijf -Department $_.Afdeling -Mobilephone $_.Mobiel -Title $_.Title -Office $_.Locatie -EmailAddress $_.EmailAdres -UserPrincipalName $_.UPN -passthru |
ForEach-Object {
$_ | Set-ADAccountPassword -Reset -NewPassword (ConvertTo-SecureString -AsPlainText $Password -Force)
$_ | Enable-ADAccount }
# Set an ExtensionAttribute
$dn = (Get-ADUser $sam).DistinguishedName
$ext = [ADSI]"LDAP://$dn"
$ext.SetInfo()
Move-ADObject -Identity $dn -TargetPath $OU
$newdn = (Get-ADUser $sam).DistinguishedName
Rename-ADObject -Identity $newdn -NewName $_.DisplayName
$output = $date.ToString() + " CREATED - Naam: " + $_.DisplayName + " (login: "
$output += $_.UPN + " / " + $_.Password + ")"
$output | Out-File $logfile -append
}
Else
{
$output = $date.ToString() + " SKIPPED - Naam: " + $_.DisplayName + " (inlognaam: "
$output += $_.UPN + ")"
$output | Out-File $logfile -append
}
"----------------------------------------" + "`n" | Out-File $logfile -append
}
Persoonlijk vind ik het makkelijk om Powershell ISE in Administrative mode op te starten en het script in te laden.