Menu

PB SCRIPT POWERSHELL WINDOWS 7/10

Messages postés
3
Date d'inscription
jeudi 27 décembre 2018
Dernière intervention
7 janvier 2019
- - Dernière réponse : AyRoTiK
Messages postés
3
Date d'inscription
jeudi 27 décembre 2018
Dernière intervention
7 janvier 2019
- 7 janv. 2019 à 15:18
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:\Windows\SYSVOL\sysvol\domaine.moi\scr ipts\users_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 = [datetime]::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-ad2\SYSVOL\domaine.moi\scripts\users_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-ad2\SYSVOL\domaine.moi\scripts\users.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
Afficher la suite 

Votre réponse

2 réponses

Messages postés
3
Date d'inscription
jeudi 27 décembre 2018
Dernière intervention
7 janvier 2019
0
Merci
Up svp
Commenter la réponse de AyRoTiK
Messages postés
3
Date d'inscription
jeudi 27 décembre 2018
Dernière intervention
7 janvier 2019
0
Merci
Bonjour, personne n'est apte à répondre à ma demande ?

Merci à vous
Commenter la réponse de AyRoTiK