-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathaddBulkUsersFromCsv.ps1
More file actions
93 lines (75 loc) · 2.89 KB
/
addBulkUsersFromCsv.ps1
File metadata and controls
93 lines (75 loc) · 2.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# Load in csv file for employee data
function Get-EmployeeFromCsv{
[CmdletBinding()]
Param(
[Parameter(Mandatory)]
[string]$FilePath,
[Parameter(Mandatory)]
[string]$Delimiter,
[Parameter(Mandatory)]
[hashtable]$SyncFieldMap
)
try{
$SyncProperties=$SyncFieldMap.GetEnumerator()
$Properties=ForEach($Property in $SyncProperties){
@{Name=$Property.Value;Expression=[scriptblock]::Create("`$_.$($Property.Key)")}
}
Import-Csv -Path $FilePath -Delimiter $Delimiter | Select-Object -Property $Properties
}catch{
Write-Error $_.Exception.Message
}
}
# can modify to add/remove or change attributes
$SyncFieldMap=@{
First_Name="GivenName"
Last_Name="SurName"
Department="Department"
Title="Title"
Start_Date="Start_Date"
Temp_Password="Temp_Password"
}
$DepartmentOU_Map = @{
"Sales"="OU=Sales-Users, DC=mydomain, DC=com"
"Finance"="OU=Finance-Users, DC=mydomain, DC=com"
"Human Resources"="OU=HR-Users, DC=mydomain, DC=com"
"IT"="OU=IT-Users, DC=mydomain, DC=com"
"Marketing"="OU=Marketing-Users, DC=mydomain, DC=com"
}
$Employees = Get-EmployeeFromCsv -FilePath "MOCK_DATA.csv" -Delimiter "," -SyncFieldMap $SyncFieldMap
# loop to create users from csv
foreach ($Employee in $Employees) {
$givenName = $Employee.GivenName.Trim()
$surName = $Employee.Surname.Trim()
$department = $Employee.Department
$cleanFirst = $givenName -replace "[^a-zA-Z0-9]"
$cleanLast = $surName -replace "[^a-zA-Z0-9]"
$trySamAccountName = ($cleanFirst.Substring(0,1) + $cleanLast).ToLower()
$samAccountName = $trySamAccountName
$upn = "$trySamAccountName@mydomain.com"
$i = 1
# if samAccountName or UserPrincipalName are not unique, append a number and increment until unique
do{
$escapedSamAccountName = $samAccountName -replace "'", "''"
$escapedUpn = $upn -replace "'", "''"
$existingUser = Get-ADUser -Filter "SamAccountName -eq '$escapedSamAccountName' -or UserPrincipalName -eq '$escapedUpn'" -ErrorAction SilentlyContinue
if ($existingUser){
$samAccountName = $trySamAccountName + $i
$upn = "$samAccountName@mydomain.com"
$i++
}
} while ($existingUser -ne $null)
Write-Host "Creating user for $($givenName) $($surName) with SamAccountName: $samAccountName" -ForegroundColor Green
# Create Users in Active Directory
$NewUserParams = @{
Name = "$givenName $surName"
GivenName = $givenName
Surname = $surName
SamAccountName = $samAccountName
UserPrincipalName = $upn
AccountPassword = ($Employee.Temp_Password | ConvertTo-SecureString -AsPlainText -Force)
Enabled = $true
Path = $DepartmentOU_Map[$department]
ChangePasswordAtLogon = $true
}
New-ADUser @NewUserParams
}