Niedawno się tym zajmowałem i w sumie dobrze by było się podzielić takim skryptem. Jest on nieco zmodyfikowany w stosunku, do tego co znalazłem na tej stronie.
Na początku próbka danych, która powinna być zapisana w pliku CSV:
firstname;lastname;username;email;streetaddress;city;zipcode;state;country;department;password;telephone;jobtitle;company;ou Miron;Trawiński;mtrawinski;mtrawinski@serba.website;aleja Niepodległości 49;Tychy;43-100;śląskie;PL;Handlowy;Zaq12wsx!;32 776 33 33;Specjalista ds. handlowych;it.supra.tf;OU=Handlowy,OU=it.supra.tf,DC=serba,DC=local Mikołaj;Staszewski;mstaszewski;mstaszewski@serba.website;aleja Niepodległości 49;Tychy;43-100;śląskie;PL;Handlowy;Zaq12wsx!;32 776 33 33;Specjalista ds. handlowych;it.supra.tf;OU=Handlowy,OU=it.supra.tf,DC=serba,DC=local Adam;Rekowski;arekowski;arekowski@serba.website;aleja Niepodległości 49;Tychy;43-100;śląskie;PL;Handlowy;Zaq12wsx!;32 776 33 33;Specjalista ds. handlowych;it.supra.tf;OU=Handlowy,OU=it.supra.tf,DC=serba,DC=local Joachim;Grabiński;jgrabinski;jgrabinski@serba.website;aleja Niepodległości 49;Tychy;43-100;śląskie;PL;Handlowy;Zaq12wsx!;32 776 33 33;Specjalista ds. handlowych;it.supra.tf;OU=Handlowy,OU=it.supra.tf,DC=serba,DC=local Norbert;Ewertowski;newertowski;newertowski@serba.website;aleja Niepodległości 49;Tychy;43-100;śląskie;PL;Handlowy;Zaq12wsx!;32 776 33 33;Specjalista ds. handlowych;it.supra.tf;OU=Handlowy,OU=it.supra.tf,DC=serba,DC=local Aureliusz;Wręczycki;awreczycki;awreczycki@serba.website;aleja Niepodległości 49;Tychy;43-100;śląskie;PL;Handlowy;Zaq12wsx!;32 776 33 33;Specjalista ds. handlowych;it.supra.tf;OU=Handlowy,OU=it.supra.tf,DC=serba,DC=local Heronim;Ambroży;hambrozy;hambrozy@serba.website;aleja Niepodległości 49;Tychy;43-100;śląskie;PL;Handlowy;Zaq12wsx!;32 776 33 33;Specjalista ds. handlowych;it.supra.tf;OU=Handlowy,OU=it.supra.tf,DC=serba,DC=local Piotr;Jaroszek;pjaroszek;pjaroszek@serba.website;aleja Niepodległości 49;Tychy;43-100;śląskie;PL;Handlowy;Zaq12wsx!;32 776 33 33;Specjalista ds. handlowych;it.supra.tf;OU=Handlowy,OU=it.supra.tf,DC=serba,DC=local Miłosz;Szcześniak;mszesniak;mszesniak@serba.website;aleja Niepodległości 49;Tychy;43-100;śląskie;PL;Handlowy;Zaq12wsx!;32 776 33 33;Specjalista ds. handlowych;it.supra.tf;OU=Handlowy,OU=it.supra.tf,DC=serba,DC=local Eustachy;Kowalewski;ekowalewski;ekowalewski@serba.website;aleja Niepodległości 49;Tychy;43-100;śląskie;PL;Handlowy;Zaq12wsx!;32 776 33 33;Specjalista ds. handlowych;it.supra.tf;OU=Handlowy,OU=it.supra.tf,DC=serba,DC=local Dorian;Kłopotowski;dklopotowski;dklopotowski@serba.website;aleja Niepodległości 49;Tychy;43-100;śląskie;PL;Handlowy;Zaq12wsx!;32 776 33 33;Specjalista ds. handlowych;it.supra.tf;OU=Handlowy,OU=it.supra.tf,DC=serba,DC=local Olgierd;Zaniewski;ozaniewski;ozaniewski@serba.website;aleja Niepodległości 49;Tychy;43-100;śląskie;PL;Handlowy;Zaq12wsx!;32 776 33 33;Specjalista ds. handlowych;it.supra.tf;OU=Handlowy,OU=it.supra.tf,DC=serba,DC=local Gracjan;Zambrzycki;gzambrzycki;gzambrzycki@serba.website;aleja Niepodległości 49;Tychy;43-100;śląskie;PL;Handlowy;Zaq12wsx!;32 776 33 33;Specjalista ds. handlowych;it.supra.tf;OU=Handlowy,OU=it.supra.tf,DC=serba,DC=local Fabian;Ciura;fciura;fciura@serba.website;aleja Niepodległości 49;Tychy;43-100;śląskie;PL;Handlowy;Zaq12wsx!;32 776 33 33;Specjalista ds. handlowych;it.supra.tf;OU=Handlowy,OU=it.supra.tf,DC=serba,DC=local Piotr;Skonieczny;pskonieczny;pskonieczny@serba.website;aleja Niepodległości 49;Tychy;43-100;śląskie;PL;Handlowy;Zaq12wsx!;32 776 33 33;Specjalista ds. handlowych;it.supra.tf;OU=Handlowy,OU=it.supra.tf,DC=serba,DC=local
Poniżej tworzenie OU oraz użytkowników w CSV (warto zwrócić uwagę, że pozycja Państwo jest zdefiniowana jako PL
, a nie Polska
ze względu na to, że w tym polu daje się Country Code.
<#Import active directory module for running AD cmdlets#> Import-Module activedirectory <#Create main OU#> $baseDN = "DC=SERBA,DC=LOCAL" $baseOU = "OU=it.supra.tf" $baseOUstring = $baseOU + "," + $baseDN <#New-ADOrganizationalUnit -Name "SUPRA" -Path $baseOU#> if (Get-ADOrganizationalUnit -Filter "distinguishedName -eq '$baseOUstring'") { Write-Host "$baseOUstring already exists." } else { New-ADOrganizationalUnit -Name $baseOU -Path $baseDN } <#Create OU's#> $OUs = @("Dyrekcja","Handlowy","Marketing","Ksiegowosc","Rozwojowy","Prawny","Logistyczny","Techniczny") <#Loop through each name of the OU to create them#> foreach ($OUcreate in $OUs) { $fullOUstring = "OU=" + $OUCreate + "," + $baseOUstring Write-Output $fullOUstring if (Get-ADOrganizationalUnit -Filter "distinguishedName -eq '$fullOUstring'") { Write-Host "$OUcreate already exists." } else { New-ADOrganizationalUnit -Name $OUcreate -Path $baseOUstring } } <#Store the data from ADUsers.csv in the $ADUsers variable#> $ADUsers = Import-csv -Delimiter ";" -Path .\bulk-users-polska.csv <#Loop through each row containing user details in the CSV file#> foreach ($User in $ADUsers) { <#Read user data from each field in each row and assign the data to a variable as below#> $Username = $User.username $Password = $User.password $Firstname = $User.firstname $Lastname = $User.lastname $OU = $User.ou <#This field refers to the OU the user account is to be created in#> $email = $User.email $streetaddress = $User.streetaddress $city = $User.city $zipcode = $User.zipcode $state = $User.state $country = $User.country $telephone = $User.telephone $jobtitle = $User.jobtitle $company = $User.company $department = $User.department $Password = $User.Password <#Check to see if the user already exists in AD#> if (Get-ADUser -F {SamAccountName -eq $Username}) { <#If user does exist, give a warning#> Write-Warning "A user account with username $Username already exist in Active Directory." } else { <#User does not exist then proceed to create the new user account Account will be created in the OU provided by the $OU variable read from the CSV file#> New-ADUser ` -SamAccountName $Username ` -UserPrincipalName "$Username@serba.local" ` -Name "$Firstname $Lastname" ` -GivenName "$Firstname" ` -Surname "$Lastname" ` -Enabled $True ` -DisplayName "$Firstname $Lastname" ` -Path "$OU" ` -City "$city" ` -Company "$company" ` -State "$state" ` -StreetAddress "$streetaddress" ` -Country "$country" ` -PostalCode "$zipcode" ` -OfficePhone "$telephone" ` -EmailAddress "$email" ` -Title "$jobtitle" ` -Department "$department" ` -AccountPassword (convertto-securestring $Password -AsPlainText -Force) -ChangePasswordAtLogon $False -PasswordNeverExpires $True -CannotChangePassword $True } } Get-ADUser -Filter 'Name -like "*"' -SearchBase 'OU=it.supra.tf,DC=SERBA,DC=LOCAL' -Properties DisplayName | ForEach-Object {Set-ADUser $_ -Office 'SERBA Downtown'} Get-ADUser -Filter 'Name -like "*"' -SearchBase 'OU=Techniczny,OU=it.supra.tf,DC=SERBA,DC=LOCAL' -Properties DisplayName | ForEach-Object {Set-ADUser $_ -Office 'SERBA Headquarters'} Get-ADUser -Filter 'Name -like "*"' -SearchBase 'OU=Dyrekcja,OU=it.supra.tf,DC=SERBA,DC=LOCAL' -Properties DisplayName | ForEach-Object {Set-ADUser $_ -Office 'SERBA Headquarters'}
I na koniec tworzenie kont w Exchange dla tych użytkowników (istotne – ten skrypt musi być odpalony przez Exchange Management Shell):
Import-Module activedirectory Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn <#adding everyone in that specified company#> $users = Get-ADUser -Filter {company -eq "it.supra.tf"} Write-Output $users foreach($user in $users) { Enable-Mailbox -Identity $user.SamAccountName }