#On vérifie que les modules soient bien installés if (Get-Module -ListAvailable -Name PSWriteColor) { $modExiste = $true } else { $modExiste = $false } #Cette étape permet de désactiver les messages de confirmation d'install Set-PSRepository -Name 'PSGallery' -InstallationPolicy Trusted switch ($modExiste) { $true{Import-Module ActiveDirectory;Import-Module PSWriteColor} $false{Install-Module PSWriteColor -Confirm:$False;Import-Module ActiveDirectory;Import-Module PSWriteColor} Default {Import-Module ActiveDirectory;Import-Module PSWriteColor} } #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 = "S-1-5-21-$domaineSID-1111" $grpDHCPuser = "S-1-5-21-$domaineSID-1110" $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-Color -Text "L'utilisateur ", $user, " existe déjà. Application des permissions." -Color White, Yellow } $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,$grpDHCPadm,$grpGPOadmin,$grpNetAdmin)} "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-Color -Text "L'utilisateur ",$User," a bien été crée. Son mot de passe est ",$userPass -Color White,Green,White,Cyan } catch { Write-Error "Erreur pour l'utilisateur $user : $_" } } Write-Color -Text "Les utilisateurs ainsi que leur mots de passes ont été exportés ici : ","C:\techLogins-$pcName.csv" -Color White,Green