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

Laisser un commentaire