Add 'NewUser_Creation.ps1'

Signed-off-by: Tre Hayes <thayes@noreply.homeserver.local>
This commit is contained in:
Tre Hayes 2022-03-29 16:30:45 -05:00
parent 437efbbc33
commit d4de260992

289
NewUser_Creation.ps1 Normal file
View File

@ -0,0 +1,289 @@
function Build-ADUser {
[CmdletBinding()]
param (
[Parameter(Mandatory=$true)] [System.Object]$User
)
$retry = $true
while ($true -eq $retry) {
########### Check That Department Code Has 4 Digits ###########
if ($User.dept_Code -match '^\d{4}$') {
if ($(Get-ADUser -Identity $User.emp_ID)) {
[System.Windows.MessageBox]::Show("$($User.emp_ID) is currently used by `
$(Get-ADUser -Identity $User.emp_ID | Select-Object -ExpandProperty Name). `
Please enter a different Employee ID.", 'Existing User','OK','Information')
}
else {
Write-Host "User does NOT exist... Building User...`n"
##############################################################################################################
# New User Build #
# Copy Template User, Create New User, Set Password, Add Groups, Enable Exchange Mailbox #
# Write Completed User Build Info to CSV #
##############################################################################################################
try {
########### Copy Template User ###########
$copyUser = Copy-ADUser ($User.dept_Code) ($User.job_Title) ([REF]$global:build_Mailbox) ([REF]$global:vdi_Pool)
########### Create New User ###########
$OU = (($copyUser).DistinguishedName).split(',')
$newUser = @{
Name = "$($User.first_Name) $($User.last_Name)"
SamAccountName = "$($User.emp_ID)"
DisplayName = "$($User.first_Name) $($User.last_Name)"
UserPrincipalName = "$($User.emp_ID)@nkch.org"
Path = "$($OU[1..($OU.length)] -join(','))"
GivenName = "$($User.first_Name)"
Initials = "$($User.middle_name)"
Surname = "$($User.Last_Name)"
Department = "$($User.department_name)"
Office = "$($User.department_name)"
Description = "$($User.job_Title)"
Title = "$($User.job_Title)"
Enabled = $true
OtherAttributes = @{
nkchDeptCode = $($User.dept_Code);
nkchVP = "$((Get-ADUser -Identity $($User.vice_President)).DistinguishedName)";
}
}
New-ADUser @newUser
########### Set Password ###########
Add-ADGroupMember -Identity 'NewUserPasswordPolicy' -Members $newUser.SamAccountName
Set-ADAccountPassword -Identity $newUser.SamAccountName -Reset -NewPassword (ConvertTo-SecureString $newUser.SamAccountName -AsPlainText -Force)
Remove-ADGroupMember -Identity 'NewUserPasswordPolicy' -Members $newUser.SamAccountName -Confirm:$false
########### Add Groups ###########
Get-ADPrincipalGroupMembership -Identity $($copyUser.SamAccountName) | ? {$_.Name -notlike '*VPN*'} | Select-Object -ExpandProperty DistinguishedName | `
Add-ADGroupMember -Members $newUser.SamAccountName -ErrorAction SilentlyContinue
Add-ADGroupMember -Identity $vdi_Pool -Members $newUser.SamAccountName
Write-Host "User Account Successfully Built!"
}
catch {
[System.Windows.MessageBox]::Show("$($newUser.GivenName) $($newUser.Surname)'s account was not built",`
'ERROR','OK','Warning')
}
########### Build Exchange Mailbox ###########
if ($true -eq $build_Mailbox) {
Write-Host "Please wait while we set up $($newUser.GivenName)'s mailbox..."
$exchSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://<EXCHANGE_SERVER.local>/powershell -Authentication Kerberos
try {
Import-PSSession $exchSession -AllowClobber -CommandName Get-Mailbox,Enable-Mailbox
Start-Sleep -Seconds 2
Enable-Mailbox -Identity $newUser.SamAccountName -Database "$(Get-Random($mailbox_DBs))" -ErrorAction Stop
}
catch {
[System.Windows.MessageBox]::Show("$($newUser.GivenName) $($newUser.Surname)'s mailbox was not built",`
'ERROR','OK','Warning')
}
########### Check If Mailbox Build Was Successful ###########
if (Get-Mailbox -Identity $newUser.SamAccountName) {
Write-Host 'Mailbox Built!'
build-UserLog -empID $newUser.SamAccountName
Remove-PSSession -Session $exchSession
}
}
clear-Fields
$retry = $false
##############################################################################################################
# End New User Build #
##############################################################################################################
}
}
else {
if ($User.dept_Code -notmatch '^\d{4}$') {
$popupWarning = [System.Windows.MessageBox]::Show("$($User.first_Name) $($User.last_Name) does not have a vaild Deptartment `
Code!! Would you like to manually set their Department Code??", 'confirmation','YesNo','Warning')
switch ($popupWarning) {
'Yes' {
$User.dept_Code = 0
while ($User.dept_Code -notmatch '^\d{4}$') {
$User.dept_Code = [Microsoft.VisualBasic.Interaction]::InputBox('What is the department code?: ', 'Department Code')
if ([string]::IsNullOrEmpty($User.dept_Code)) {
Write-Host "Skipping $($User.first_Name) $($User.last_Name)...`n"; Start-Sleep -Seconds 1
$retry = $false
break
}
}
}
'No' {
Write-Host "Skipping $($User.first_Name) $($User.last_Name)...`n"; Start-Sleep -Seconds 1
$retry = $false
}
}
}
}
}
}
function Build-MultiADUser ($departments) {
$newUsers_CSV = Import-Csv -Path '.\NewUser_Test.csv'
foreach ($user in $newUsers_CSV) {
$dept_Name = foreach ($dept in $departments) {
if ([int] $user.dept_Code -eq $dept.'Deparment') {
$VP = $dept.'VP EmpID'
$dept.'DepartmentName'
}
}
########### Check That Department Code Has 4 Digits ###########
if ($user.dept_Code -match '^\d{4}$') {
if ($(Get-ADUser -Identity $user.emp_ID)) {
[System.Windows.MessageBox]::Show("$($user.emp_ID) is currently used by `
$(Get-ADUser -Identity $user.emp_ID | Select-Object -ExpandProperty Name). `
Please enter a different Employee ID.", 'Existing User','OK','Information')
}
else {
Write-Host "User does NOT exist... Building User...`n"
##############################################################################################################
# New User Build #
# Copy Template User, Create New User, Set Password, Add Groups, Enable Exchange Mailbox #
# Write Completed User Build Info to CSV #
##############################################################################################################
try {
########### Copy Template User ###########
$copyUser = Copy-ADUser ($user.dept_Code) ($user.job_Title) ([REF]$global:build_Mailbox) ([REF]$global:vdi_Pool)
########### Create New User ###########
$OU = (($copyUser).DistinguishedName).split(',')
$newUser = @{
Name = "$($user.first_Name) $($user.last_Name)"
SamAccountName = "$($user.emp_ID)"
DisplayName = "$($user.first_Name) $($user.last_Name)"
UserPrincipalName = "$($user.emp_ID)@nkch.org"
Path = "$($OU[1..($OU.length)] -join(','))"
GivenName = "$($user.first_Name)"
Initials = "$($user.MI)"
Surname = "$($user.Last_Name)"
Department = "$($dept_Name)"
Office = "$($dept_Name)"
Description = if ([string]::IsNullOrEmpty($user.EndDate)) { "$($user.job_Title)" }
else {
$date = $user.EndDate.split('/') | % {$_.Padleft(2,'0')}
"$($user.job_Title) (exp. $($date[0]).$($date[1]).$($date[2]))"
}
Title = if ([string]::IsNullOrEmpty($user.EndDate)) { "$($user.job_Title)" }
else {
$date = $user.EndDate.split('/') | % {$_.Padleft(2,'0')}
"$($user.job_Title) (exp. $($date[0]).$($date[1]).$($date[2]))"
}
AccountExpirationDate = if ([string]::IsNullOrEmpty($user.EndDate)) { $null }
else { "$(([DateTime] $user.EndDate).AddDays(2))" }
Enabled = $true
OtherAttributes = @{
nkchDeptCode = $($user.dept_Code);
nkchVP = "$((Get-ADUser -Identity $($VP)).DistinguishedName)";
}
}
New-ADUser @newUser
########### Set Password ###########
Add-ADGroupMember -Identity 'NewUserPasswordPolicy' -Members $newUser.SamAccountName
Set-ADAccountPassword -Identity $newUser.SamAccountName -Reset -NewPassword (ConvertTo-SecureString $newUser.SamAccountName -AsPlainText -Force)
Remove-ADGroupMember -Identity 'NewUserPasswordPolicy' -Members $newUser.SamAccountName -Confirm:$false
########### Add Groups ###########
Get-ADPrincipalGroupMembership -Identity $($copyUser.SamAccountName) | ? {$_.Name -notlike '*VPN*'} | Select-Object -ExpandProperty DistinguishedName | `
Add-ADGroupMember -Members $newUser.SamAccountName -ErrorAction SilentlyContinue
Add-ADGroupMember -Identity $vdi_Pool -Members $newUser.SamAccountName
Write-Host "User Account Successfully Built!"
}
catch {
[System.Windows.MessageBox]::Show("$($newUser.GivenName) $($newUser.Surname)'s account was not built",`
'ERROR','OK','Warning')
}
########### Build Exchange Mailbox ###########
if ($true -eq $build_Mailbox) {
Write-Host "Please wait while we set up $($newUser.GivenName)'s mailbox..."
$exchSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://<EXCHANGE_SERVER.local>/powershell -Authentication Kerberos
try {
Import-PSSession $exchSession -AllowClobber -CommandName Get-Mailbox,Enable-Mailbox
Start-Sleep -Seconds 2
Enable-Mailbox -Identity $newUser.SamAccountName -Database "$(Get-Random($mailbox_DBs))" -ErrorAction Stop
}
catch {
[System.Windows.MessageBox]::Show("$($newUser.GivenName) $($newUser.Surname)'s mailbox was not built",`
'ERROR','OK','Warning')
}
########### Check If Mailbox Build Was Successful ###########
if (Get-Mailbox -Identity $newUser.SamAccountName) {
Write-Host 'Mailbox Built!'
build-UserLog -empID $newUser.SamAccountName
Remove-PSSession -Session $exchSession
}
}
##############################################################################################################
# End New User Build #
##############################################################################################################
}
}
else {
if ($user.dept_Code -notmatch '^\d{4}$') {
$popupWarning = [System.Windows.MessageBox]::Show("$($user.first_Name) $($user.last_Name) does not have a vaild Deptartment `
Code!! Would you like to manually set their Department Code??", 'confirmation','YesNo','Warning')
switch ($popupWarning) {
'Yes' {
$user.dept_Code = 0
while ($user.dept_Code -notmatch '^\d{4}$') {
$user.dept_Code = [Microsoft.VisualBasic.Interaction]::InputBox('What is the department code?: ', 'Department Code')
if ([string]::IsNullOrEmpty($user.dept_Code)) {
Write-Host "Skipping $($user.first_Name) $($user.last_Name)...`n"; Start-Sleep -Seconds 1
break
}
}
}
'No' {
Write-Host "Skipping $($user.first_Name) $($user.last_Name)...`n"; Start-Sleep -Seconds 1
}
}
}
}
}
}
function Copy-ADUser ($dept_Code, $job_Title, $mailbox, $vdi) {
switch ($dept_Code) {
{($_ -eq '6810') -or ($_ -eq '8010')} {
switch -Wildcard ($job_Title) {
'*Nursing*' { Get-ADUser -Identity _templatestudent -Properties MemberOf; $mailbox.Value = $false; $vdi.Value = "$(Get-Random($vdi_Clin_Pool))" }
'*Pharmacy*' { Get-ADUser -Identity _templatestudent -Properties MemberOf; $mailbox.Value = $false; $vdi.Value = "VDI-Pharmacy" }
}
}
'6900' {
switch ($job_Title) {
'RN' { Get-ADUser -Identity _templatePRNPoolRN -Properties MemberOf; $vdi.Value = "$(Get-Random($vdi_Clin_Pool))" }
'CNA' { Get-ADUser -Identity _templatePRNPoolCNA -Properties MemberOf; $vdi.Value = "$(Get-Random($vdi_Clin_Pool))" }
}
}
{($_ -eq '6910') -or ($_ -eq '6920')} {
switch ($job_Title) {
'RN' { Get-ADUser -Identity _templateFloatRN -Properties MemberOf; $vdi.Value = "$(Get-Random($vdi_Clin_Pool))" }
'CNA' { Get-ADUser -Identity _templateFloatCNA -Properties MemberOf; $vdi.Value = "$(Get-Random($vdi_Clin_Pool))" }
}
}
'7100' { Get-ADUser -Identity _templateEDRN -Properties MemberOf; $vdi.Value = "$(Get-Random($vdi_Clin_Pool))" }
#default { Get-ADUser -Identity _templatestudent -Properties MemberOf }
}
}
Add-Type -AssemblyName 'PresentationFramework'
Add-type -AssemblyName 'Microsoft.VisualBasic'
$global:build_Mailbox = $true
$global:vdi_Pool = ''
$VP = ''
$mailbox_DB_Nums = @(1..100 | % {$_.ToString("00")})
$mailbox_DBs = @($mailbox_DB_Nums | % {"NKCH_DB$($_)"})
$vdi_Clin_Pool_Letters = @('A', 'B', 'C')
$vdi_Clin_Pool = @($vdi_Clin_Pool_Letters | % {"VDI-Clinical Pool $($_)"})