# Creation des Utilisateurs locaux $Scriptlocation = Split-Path -Path $MyInvocation.MyCommand.Path $computerName = "$env:computername" $computer = [ADSI]"WinNT://$computerName,computer" $Users = $computer.PSbase.Children | Where { $_.psbase.SchemaClassName -eq 'user' } | Select-Object -ExpandProperty name $NewAdministrateurAccountName = "supporthdf" $Adminlyc_Account_name = "adminlyc" [string[]]$Utilisateurs = @($NewAdministrateurAccountName, $Adminlyc_Account_name) foreach ($utilisateur in $Utilisateurs) { if (($utilisateur -eq $NewAdministrateurAccountName) -and ($utilisateur -notin $users)) { # Création du compte d'utilisateur "supporthdf" $Administrateur = [adsi]"WinNT://$computerName/Administrateur,user" $Administrateur.psbase.rename($NewAdministrateurAccountName) $Suser = [adsi]"WinNT://$computerName/supporthdf,user" $SCryptPwd = get-content "$Scriptlocation\supporthdf-CryptPwd.txt" $SCle = [Convert]::FromBase64String((get-content "$Scriptlocation\Key.txt")) $SPword = ConvertTo-SecureString -Key $SCle -string $SCryptPwd $SUser.SetPassword([System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SPword))) $SUser.psbase.InvokeSet('UserFlags', 65536) # UserFlags Value for the account to be active with a password set to never expire. $SUser.psbase.InvokeSet("Description", "Compte d'utilisateur d'administration de la région") $SUser.SetInfo() } elseif (($utilisateur -eq $Adminlyc_Account_name) -and ($utilisateur -notin $users)) { # Création du compte d'utilisateur "adminlyc" $User_adminlyc = $computer.Create("user", $Adminlyc_Account_name) $User_adminlyc_CryptPwd = get-content "$Scriptlocation\adminlyc-CryptPwd.txt" $User_adminlyc_Cle = [Convert]::FromBase64String((get-content "$Scriptlocation\Key.txt")) $User_adminlyc_Pword = ConvertTo-SecureString -Key $User_adminlyc_Cle -string $User_adminlyc_CryptPwd $User_adminlyc.SetPassword([System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($User_adminlyc_Pword))) $User_adminlyc.psbase.InvokeSet('UserFlags', 66112) # ADS_UF_NORMAL_ACCOUNT + ADS_UF_PASSWD_CANT_CHANGE + ADS_UF_DONT_EXPIRE_PASSWD $User_adminlyc.psbase.InvokeSet("Description", "Compte d'utilisateur d'administration du lycée") $User_adminlyc.SetInfo() } else { write-host "$utilisateur existe déjà" } } # Ajout des utilisateurs dans les groupes de sécurité [string[]]$GroupsSID = @('S-1-5-32-544', 'S-1-5-32-545', 'S-1-5-32-555', 'S-1-5-32-580') foreach ($GroupSID in $GroupsSID) { $SID = New-Object System.Security.Principal.SecurityIdentifier ("$GroupSID") $Group = $SID.Translate([System.Security.Principal.NTAccount]) $GroupName = Split-Path -leaf ($Group.Value) [string[]]$ADSPathMembers = @((Get-LocalGroupMember -SID $GroupSID).Name) if ($ADSPathMembers -ne $null) { [string[]]$Members = Split-Path -leaf $ADSPathMembers -ErrorAction SilentlyContinue } foreach ($utilisateur in $Utilisateurs) { if (($Utilisateur -eq $NewAdministrateurAccountName) -or ($Utilisateur -eq $Adminlyc_Account_name)) { if ($utilisateur -notin $Members) { Write-host "L'utilisateur $utilisateur n'appartient pas au groupe $GroupName, Je l'ajoute..." ([ADSI]"WinNT://$computerName/$GroupName,group").Add("WinNT://$Utilisateur") } else { write-host "L'utilisateur $utilisateur appartient déja au groupe $GroupName" } } } }