106 lines
3.6 KiB
PowerShell
106 lines
3.6 KiB
PowerShell
#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
|
|
}
|
|
|
|
function GetACID { #Fonction de test
|
|
return "superSID"
|
|
}
|
|
#################################
|
|
|
|
########### 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"
|
|
$grpPowerUsers = "S-1-5-32-547"
|
|
#################################
|
|
|
|
|
|
########### Script ###########
|
|
|
|
#Pour chaque user, on le crée + ajoute aux bons groupes
|
|
ForEach($user in $userList){
|
|
|
|
$userPass = (GenPass)
|
|
$detailsUser = @{
|
|
Name = $user
|
|
AccountPassword = $userPass
|
|
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 = @($grpPowerUsers,$grpPrintOp)}
|
|
"Tech-N2"{$Groups = @($grpAccountOp,$grpPrintOp)}
|
|
"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é cée et ajouté aux groupes 'Account operators' et 'Print Operators'. Son mot de passe est ",$userPass -Color White,Green,White,Cyan
|
|
}
|
|
|
|
Write-Color -Text "Les utilisateurs ainsi que leur mots de passes ont été exportés ici : ","C:\techLogins-$pcName.csv" -Color White,Green |