Bonjour,
Je viens à vous car j’ai un problème que je n’arrive pas à solutionner. Je voudrais, grâce à des scripts PowerShell ainsi que de GPO, prévenir les utilisateurs de l’expiration de leur mot de passe via une pop up qui s’ouvrira au milieu de l’écran en indiquant la procédure pour changer son mot de passe. Mais voilà, après avoir créé sur des machines virtuelles un AD, ainsi que 2 postes clients, un sous Windows 7 et un autre sous Windows 10, les tests ne sont pas convaincants. Les scripts fonctionnent correctement sous Windows 10 mais pas sous Windows 7, comme si certaines commandes que j’évoque dans mon script ne fonctionnaient pas sous Windows 7. Je vous mets les deux scripts avec les commandes qui posent pb en italique et soulignées, si vous avez diverses questions ou réponses, je suis à votre écoute ! Je mets aussi à la fin les erreurs suite aux commandes. Bonne journée et merci !
Premier script qui créé un fichier contenant les utilisateurs dont le mot de passe va expirer prochainement :
Récupérer la date du jour
$date = Get-Date
Création du fichier $fichier=“C:WindowsSYSVOLsysvoldomaine.moiscr iptsusers_expire.txt”
Remove-Item $fichier -Force
New-Item $fichier -ItemType file
ADD-content -path $fichier -value “sam;”
ADD-content -path $fichier -value $date.DateTime
$Listusers = Get-ADUser -SearchBase ‘OU=WindowsFacile, DC=domaine, DC=moi’-Filter {UserAccountControl -ne “514”}
foreach($user in $Listusers) {
$foruser= $user.SamAccountName
Récupérer date d’expiration du MDP du compte
$expiration = ::FromFileTime((Get-ADUser -Identity $foruser -Properties “msDS-UserPasswordExpiryTimeComputed”).“msDS-UserPasswordExpiryTimeComputed”)
Afficher les dates en Ticks
$exp = $expiration.Ticks
$d = $date.Ticks
Calculer la différence de jours
$comp = $exp - $d
12750000000000 = 15 jours
Si $comp est inférieur à 15 jours, ecrire
if ($comp -le 12750000000000) {
ADD-content -path $fichier -value $foruser";"
}
}
Le deuxième script récupère les noms dans le fichier créé précédemment, et identifie si l’utilisateur qui est en train de se connecter est présent dans ce tableau, si oui, il balance une pop up au milieu de l’écran :
$connect = $env:USERNAME
#Nous récupérons dans la variable $connect le SamAccountName de l?utilisateur qui lance sa session.
$fichier = Import-Csv -Delimiter “;” -Path \srv-ad2SYSVOLdomaine.moiscriptsusers_expire.txt
#Nous importons dans la variable $fichier, le chemin vers le fichier texte où sont stockés les SamAccountName des comptes où le mot de passe va expirer.
foreach($line in $fichier) {
#Lancement du foreach en passant sur chaque ligne du fichier (users_expire.txt) ou le chemin est stocké dans la variable $fichier.
$l = $line.sam
#Nous sélectionnons pour chaque ligne, seulement la colonne sam. En fait, nous la forçons juste car c?est la seule colonne.
if ($connect -eq $l)
{
#Nous comparons le SamAccountName du compte connecté au poste avec la ligne du fichier que nous lisons dans la boucle foreach.
$wshell = New-Object -ComObject Wscript.Shell
#Nous créons notre pop-up.
$wshell.Popup(“Veuillez modifier votre mot de passe
Ctrl + Alt + Suppr > Modifier un mot de passe
Merci”)
#Nous mettons le texte qui va s?afficher dans la Pop-up. Ce message va expliquer la marche à suivre à l?utilisateur pour changer son mot de passe. Car c?est possible que des utilisateurs ne savent pas comment faire.
}
#Fin de la boucle If
}
#Fin de la boucle foreach
Exit
#Nous fermons le script. #Fin du script !
Voici les erreurs :
1ère erreur :
Import-Csv : Impossible de traiter l?argument, car la valeur de l?argument « name » n?est pas valide. Modifiez la valeur de l?argument « name »et réexécutez l?opération.
Au niveau de la ligne : 1 Caractère : 22
+$fichier = Import-Csv <<<< -Delimiter ?;? ?Path \srv-ad2SYSVOLdomaine.moiscriptsusers.expire.txt
- CategoryInfo : InvalidArgument : ( [Import-Csv], PSArgumentException
- FullyQualifieErrorID : Argument,Microsoft.Powershell.Commands.ImportCsvCo mmand
2ème erreur :
Jeton « Veuillez » inattendu dans une expression ou une instruction.
Au niveau de ligne : 12 Caractère : 24
- $wshell.Popup(?Veuillez? <<<< modifier votre mot de passe
- CategoryInfo : ParserError: (Veuillez :String) [], ParentContainsErrorRecordException
- FullyQualidiedErrorId : UnexpectedToken
Le terme « CTRL » n?est pas reconnu com nom d?applet de commande, fonction, fichier de script ou programme exécutable.
Vérifiez l?orthographe du nom, ou si un chemin d?accès existe, vérifiez que le chemin d?accès est correct et réessayez.
Au niveau de ligne : 1 Caractère : 5
- CTRL <<<< + ALT + SUPPR > Modifier un mot de passe
- CategoryInfo : ObjectNotFound : (CTRL :String) [] , CommandNotFoundException
- FullyQualifiedErrorId : CommandNotFoundException