ps-scripts/AD/CreateN1-N2Users/Create-ADtechs.ps1

124 lines
5.2 KiB
PowerShell

Import-Module ActiveDirectory
#On récupere le nom de la forest pour déposer les scripts au bon endroit
$domainInfos = Get-ADDomain
$forestName = $domainInfos.Forest
#On crée et place les scripts de logon pour tous les users
New-Item -Path C:\WINDOWS\SYSVOL\sysvol\$forestName\scripts\ -Name "Tech-N1.bat" -ItemType "file"
$contentToAdd = @"
cmd.exe /c "SET __COMPAT_LAYER=RunAsInvoker & START dsa.msc"
cmd.exe /c "SET __COMPAT_LAYER=RunAsInvoker & START dhcpmgmt.msc"
cmd.exe /c "SET __COMPAT_LAYER=RunAsInvoker & START printmanagement.msc"
"@
Add-Content C:\WINDOWS\SYSVOL\sysvol\$forestName\scripts\Tech-N1.bat $contentToAdd
New-Item -Path C:\WINDOWS\SYSVOL\sysvol\$forestName\scripts\ -Name "Tech-N2.bat" -ItemType "file"
$contentToAdd = @"
cmd.exe /c "SET __COMPAT_LAYER=RunAsInvoker & START dsa.msc"
cmd.exe /c "SET __COMPAT_LAYER=RunAsInvoker & START dhcpmgmt.msc"
cmd.exe /c "SET __COMPAT_LAYER=RunAsInvoker & START printmanagement.msc"
cmd.exe /c "SET __COMPAT_LAYER=RunAsInvoker & START dnsmgmt.msc"
cmd.exe /c "SET __COMPAT_LAYER=RunAsInvoker & START gpmc.msc"
"@
Add-Content C:\WINDOWS\SYSVOL\sysvol\$forestName\scripts\Tech-N2.bat $contentToAdd
#On crée le CSV pour y stocker les ID
$pcName = (Get-ComputerInfo).CSName
Set-Content "C:\techLogins-$pcName.csv" -Value "Username,Password"
########### Fonctions ###########
function GenPass { #Genere un mdp aléatoire selon les parametres indiqués
$TokenSet = @{
U = [Char[]]'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
L = [Char[]]'abcdefghijklmnopqrstuvwxyz'
N = [Char[]]'0123456789'
S = [Char[]]'!"#$%&()*+-.:<=>?@[]^_`{}~'
}
$Upper = Get-Random -Count 5 -InputObject $TokenSet.U
$Lower = Get-Random -Count 5 -InputObject $TokenSet.L
$Number = Get-Random -Count 5 -InputObject $TokenSet.N
$Special = Get-Random -Count 5 -InputObject $TokenSet.S
$StringSet = $Upper + $Lower + $Number + $Special
$RdString = (Get-Random -Count 15 -InputObject $StringSet) -join ''
return $RdString
}
function GetADSID { #On récupere le SID de l'AD pour pouvoir l'intégrer aux groupes qui en ont besoin
$fullSID = (Get-ADDomain).DomainSID.Value
$domaineSID = $fullSID.split("-",5)[-1]
return $domaineSID
}
########### Variables ###########
$userList = "Tech-N1","Tech-N2","Tech-N3"
# On récupère le SID du serveur car certains SID de groupes en ont besoin
$domaineSID = (GetADSID)
# On utilise le SID des groupes au lieu de leur noms familliers car Microsoft les traduit dans la langue cible du serveur
$grpAccountOp = "S-1-5-32-548"
$grpDomainAdm = "S-1-5-21-$domaineSID-512"
$grpPrintOp = "S-1-5-32-550"
#$grpServerOp = "S-1-5-32-549" Pas utilisé
#$grpPowerUsers = "S-1-5-32-547" Déprécié
$grpDHCPadm = "Administrateurs DHCP"
$grpDHCPuser = "Utilisateurs DHCP"
$grpGPOadmin = "S-1-5-21-$domaineSID-520"
$grpNetAdmin = "S-1-5-32-556"
#################################
########### Script ############
#Pour chaque user, on le crée + ajoute aux bons groupes
ForEach($user in $userList){
try{
# On vérifie si l'utilisateur existe déjà, passe au suivant si oui
$existingUser = Get-ADUser -Filter { Name -eq $user } -ErrorAction SilentlyContinue
if ($existingUser) {
Write-Host "L'utilisateur " -ForegroundColor White -NoNewline; Write-Host $user -ForegroundColor Yellow -NoNewline; Write-Host " existe deja. Application des permissions." -ForegroundColor White
}
$userPass = (GenPass)
$userEncPass = ConvertTo-SecureString -String $userPass -AsPlainText -Force
$detailsUser = @{
Name = $user
AccountPassword = $userEncPass
Enabled = $true
ChangePasswordAtLogon = $false
PasswordNeverExpires = $true #On fait en sorte qu'il n'expire pas
}
New-ADUser @detailsUser #On cree l'user...
#...puis on l'ajoute aux bons groupes
switch ($user) {
"Tech-N1"{$Groups = @($grpAccountOp,$grpPrintOp,$grpDHCPuser)}
"Tech-N2"{$Groups = @($grpAccountOp,$grpPrintOp,$grpGPOadmin,$grpNetAdmin,$grpDHCPadm)}
"Tech-N3"{$Groups = @($grpDomainAdm)}
Default {}
}
$newCsvLine = @([PSCustomObject]@{Username = $user; Password = $userPass})
$newCsvLine | Export-CSV "C:\techLogins-$pcName.csv" -Append -NoTypeInformation -Encoding UTF8
ForEach ($Group in $Groups) {
Add-ADPrincipalGroupMembership $User -MemberOf $Group
}
Write-Host "L'utilisateur " -ForegroundColor White -NoNewline; Write-Host $User -ForegroundColor Green -NoNewline; Write-Host " a bien ete cree. Son mot de passe est " -ForegroundColor White -NoNewline; Write-Host $userPass -ForegroundColor Cyan
}
catch {
Write-Error "Erreur pour l'utilisateur $user : $_"
}
}
Get-ADUser Tech-N1 | Set-ADUser -ScriptPath "Tech-N1.bat"
Get-ADUser Tech-N2 | Set-ADUser -ScriptPath "Tech-N2.bat"
Write-Host "Les utilisateurs ainsi que leur mots de passes ont ete exportes ici : " -ForegroundColor White -NoNewline; Write-Host "C:\techLogins-$pcName.csv" -ForegroundColor Green