Bonjour,
pour des besoins métier, nous avons du élaborer un script powershell nous permettant le maintien à jour des comptes locaux de plusieurs serveurs.
ce script est poussé toutes les 30min par un agent puppet installé sur nos centaines de serveur.
Ses fonctions:
– Création d’un groupe qui sera membre du groupe administrateur
– Ajout de compte et ajout au groupe précédemment créée.
– Suppression automatique de compte en cas de départ de la société
– Suppression automatique de compte si l’ajout n’a pas été fait via le fichier CSV
– N’empêche pas l’utilisateur déjà présent de changer de mot de passe.
Le script utilise un fichier csv pour récupérer la liste à jour des utilisateurs.
# Déclaration groupe admin local $group = "Administrateurs" $group2 = "Administrators" $group3 = "Admins-Astreinte" # Création du groupe Admins-Astreinte net localgroup $group3 /add /comment:"Groupe Administrateurs Astreinte - ne pas ajouter manuellement d'utilisateur risque fort de suppression automatique via Puppet" # Ajout du groupe Admins-Astreinte au groupe administrateur\administrator peut importe la langue installée. net localgroup $group /add $group3 net localgroup $group2 /add $group3 # déclaration date $date = (get-date).ToString("dd-MM-yyyy") # récupération du nom du serveur $adsi = [ADSI]"WinNT://$env:COMPUTERNAME" # récupération du contenu de la liste à jour des utilisateurs $userfile = get-content "C:\Liste-a-jours.csv" # récupération liste utilisateur actuellement présent dans le groupe $Astreintemembers = NET LOCALGROUP $group3 # pour tous les membres actuels du groupe Admins-Astreinte foreach ($user in $Astreintemembers){ if (!$user){} else{ # S'il est également présent dans le fichier CSV alors on ne fait rien, sinon il est supprimé if ($userfile | select-string -pattern $user){ } else { NET USER $User /delete # J'incrémente également un fichier afin de pouvoir historiser les suppressions si besoin de comprendre ce qui s'est passé. $del = (-join ($user," - ",$date)) $del >> c:\Suppression-groupe-Astreinte.txt }}} # On s'occupe ensuite des nouveaux arrivants foreach ($user in $userfile){ # On vérifie si l'utilisateur existe localement $existing = $adsi.Children | where {$_.SchemaClassName -eq 'user' -and $_.Name -eq $user} # Si inexistant alors création du mot de passe et création du compte if ($existing -eq $null) { $year="2018" $Pass = (-join ("*!",$env:COMPUTERNAME,$user,$year,"*!")) $SecurePassword = $Pass | ConvertTo-SecureString -AsPlainText -Force Write-Host "Creation d'un nouvel utilisateur." & NET USER $user $SecurePassword /add /y /FULLNAME:$user /comment:"Utilisateur Astreinte" WMIC USERACCOUNT where "name='$user'" SET PasswordExpires=False Write-Host "Ajout du compte $user au groupe $group3." & NET LOCALGROUP $group3 $user /add } else {} }
En espérant que ce petit script ou en tout cas une partie de celui ci puisse vous aider\aiguiller lors d’un besoin similaire!
Maxime
Votre commentaire