J’ai été confronté à un soucis dans ma nouvelle entreprise, les machines n’appliquent pas les mises à jour Windows, car les utilisateurs soient ne les éteignent jamais, soient ne redémarre pas quand Windows les informes de nouvelles mises à jour.

Soucis, je ne peux pas forcer l’arrêt des machines le soir, car le service tourne 24/24 7/7 ….

Il faut donc que je sois sur que l’action vient de l’utilisateur, soit qu’il n’y a personne derrière la machine. Malheureusement je ne peux pas non plus passé par un logiciel, car cela est contraire aux règles de sécurité de ma boîte.

Voilà mon script en powershell, il fonctionne uniquement sous des PC sous W10 car il utilise des commandes dispo uniquement sous powershell 5.0.

Il se décompose en deux scripts, le premier script s’inscrit par défaut avec le script d’ouverture de session de l’utilisateur , il ajoute dans le planificateur de tâche de l’utilisateur la demande de redémarrage (en appelant le deuxième script), elle s’exécute chaque vendredi à 23h00.

Le deuxième script fait ceci :

Quand le vendredi arrive, une boîte de dialogue s’ouvre avec un message avec trois possibilités pour l’utilisateur :

  1. Bouton OK = Redémarrage la machine
  2. Bouton annuler = Reporte le script et le relance 60 minutes plus tard (en inscrivant dans le planificateur de tâche une nouvelle tâche dans 60 minutes)
  3. La croix rouge  = Fait la même chose que le bouton annuler

Mais si personne ne se trouve derrière la machine ? Et bien le script sans réponse dans les 30minutes redémarre la machine.

Voilà problème résolu :

##############################################################################################
# #
# Variable a adapté, selon votre environnement #
# UNIQUEMENT POUR WINDOWS 10 #
# #
##############################################################################################

#Suppresion affichage erreur (Pour les postes en W7)
$ErrorActionPreference = "SilentlyContinue"

#Nom de votre tache et description
$nomtache = "Mise_a_jour"
$descriptiontache = "Redemarre le PC pour application mises à jour"

# Attention modifier unqiuement le chemin partage de type "\\Serveur\...\MAJ.PS1"
$cheminscript = '-WindowStyle Hidden -ExecutionPolicy Bypass -File "chemin du deuxième script"'


#Heure et jour d'application de la tache par defaut chaque vendredi à 1h00 (format heure anglais)
$Heuredapplication = '01:00AM'
$jourdapplication = 'Friday'


##############################################################################################
# #
# Script ne pas modifier #
# #
##############################################################################################

#Suppression de la tache si présente (pour que ce soit toujours l'utilisateur en cour qui l'éxécute)
Unregister-ScheduledTask $nomtache -Confirm:$false -ErrorAction SilentlyContinue

# Action à exécuter - script MAJ.PS1

$action=New-ScheduledTaskAction -Execute 'Powershell.exe' -Argument $cheminscript -ErrorAction SilentlyContinue

# Planification de la tâche

$trigger=New-ScheduledTaskTrigger -Weekly -WeeksInterval 1 -DaysOfWeek $jourdapplication -At $Heuredapplication -ErrorAction SilentlyContinue

# Enregistrement de la tâche dans le plannificateur de tache avec comme utilisateur l'utilisateur local

Register-ScheduledTask -TaskName $nomtache -Trigger $trigger -Action $action -Description $descriptiontache
Premier script
##############################################################################################
# #
# Script demande mise à jour et redemarrage ordinateur par Bastien #
# #
##############################################################################################

##############################################################################################
# #
# Variable a adapté, selon votre environnement #
# #
##############################################################################################

#Suppresion affichage erreur (Pour les postes en W7)
$ErrorActionPreference = "SilentlyContinue"

#Nom de votre tache
$nomtache = "MAJ-rappel"

# Attention modifier unqiuement le chemin partage de type "\\Serveur\...\MAJ.PS1"
$cheminscript = '-WindowStyle Hidden -ExecutionPolicy Bypass -File "chemin du deuxième script"'

# Temps d'attente en seconde pour éxécution si aucune action de l'utilisateur par defaut régler à 30 minutes
$attente=1800

#Le message afficher ainsi que le nom de la fenetre
$messageafficher = "Votre ordinateur à besoin de redemarrer pour l'application des mises à jours de securiter, OK pour redemarrer immediatement ou annuler pour repousser le redemarrage dans une heure, sans actions de votre part dans 30 minutes l'ordinateur redemarrera "
$nomfenetre = "Mise à jour"

#Temps avant la re-execution de l'application des mises à jours en minutes
$tvr=60

##############################################################################################
# #
# Script ne pas modifier #
# #
##############################################################################################


$prompt = new-object -comobject wscript.shell

$answer = $prompt.popup($messageafficher,$attente,$nomfenetre,1)
Unregister-ScheduledTask $nomtache -Confirm:$false -ErrorAction SilentlyContinue
if($answer -eq 1) {Restart-Computer -Force} #Clique sur OK donc redemarre immédiatement
if($answer -eq -1) {Restart-Computer -Force} #Aucune réponse de l'utilisateur a bout de 1800 secondes redemarre
if($answer -eq 2) {$script:MyInvocation.MyCommand.Path #Si l'utilisateur clique sur Annuler ajoute une tache de rappel par le plannificateur de tâche qui s'éxécutera au bout d'une heure
$action = New-ScheduledTaskAction -Execute 'Powershell.exe' -Argument $cheminscript
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date).AddMinutes($tvr)
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "MAJ-rappel" -Description "Re-execution dans $tvr minutes"
}
Deuxième script

Souscrire
Me notifier des
guest

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

0 Commentaires
Commentaires en ligne
Voir tous les commentaires