Forum Clubic

Pb script powershell windows 7 / windows 10

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

pour le deuxieme probleme : techfornonprofits.com…
si plusieurs lignes mettre un “(back-tick+?n?) to separate lines.”

pour le premier, au pifomètre peut être un problème avec les " "? ou un positionnement?
peut etre essayer de mettre le path en premier, avec puis carrément sans le “- path” ?
genre $fichier = Import-Csv “\srv-ad2\SYSVOL\domaine.moiscriptsusers_expire.txt” -Delimiter “;”
il y aura peut être une combinaison qui plaira aux 2 OS :smiley:

Merci de ta réponse Feunoir !

Je vais essayer et te tenir au courant, bonne année à toi

Bonjour Feunoir,

J’ai essayé de déplacer -Path et même de le supprimer mais sans réussite. Pour le reste, je n’ai pas non plus réussi à afficher ma pop up même avec les modifs que tu m’as dis…

Merci à toi,

Cdlt