Script fermeture de session / extinction de PC

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
gaelds
Niveau 2
Niveau 2
Messages : 27
Enregistré le : sam. 18 avr. 2015 06:59
Status : Hors ligne

Script fermeture de session / extinction de PC

#1

Message par gaelds »

Bonjour,
J'essaye de coder un script qui ferme la session windows au bout de 55mn d'inactivité, ou qui arrête le PC si l'inactivité est détectée après 18h. Le problème c'est que si la session est fermée avant 18h, mon script ne sera plus actif pour arrêter le PC à 18h... Avez-vous une parade? ce script pourrait-il continuer à tourner après la fermeture de session windows ?

Code : Tout sélectionner

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#include <Constants.au3>
#include <MsgBoxConstants.au3>
#include <Timers.au3>
#include <Date.au3>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Options de la fonction à définir :
Const $dossier_logs = "C:\tmp\" ; chemin du fichier de logs
If DirGetSize($dossier_logs) = -1 Then ; création du dossier de logs s'il n'existe pas
        DirCreate($dossier_logs)
EndIf
Const $logs = True ; activation/desactivation des logs
Const $nom_fichier_logs = "shutdown_logs.txt" ; chemin du fichier de logs
Const $fichier_logs = FileOpen($dossier_logs&$nom_fichier_logs,1 ) ; ouverture du fichier en lecture/ecriture
Const $tps_inactivite = 3300 ; temps d'inactivité en secondes avant arrêt du PC, 3300s = 55mn
Const $attente_bcle = 60000 ; attente en millisecondes entre chaque test d'inactivité (60000ms = 1mn)
Const $options_msg = "1+48+256+262144" ; options d'affichage pour la message box principale
Const $heure_extinction = 18 ; heure d'extinction du PC (en heures)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
shutdown_session($tps_inactivite); lancement de la fonction
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Fonction shutdown_session: Arrête le PC après un délai d'inactivité de "$tps" secondes.
Func shutdown_session($tps_inactivite = 3300)
	if $logs then
		FileWriteLine($fichier_logs,"Lancement de shutdown_session : "&_NowCalc()) ; ajoute une ligne dans le fichier log pour le début du programme
	EndIf
	Local $iIdleTime = _Timer_GetIdleTime() ; temps d'inactivité en ms
	While ($iIdleTime/1000) < $tps_inactivite
	  sleep($attente_bcle)
	  Local $iIdleTime = _Timer_GetIdleTime() ; temps d'inactivité en ms
	WEnd ; la durée d'inactivité programmée a été dépassée
	Local $msgbox = MsgBox($options_msg,"Fermeture de session","La session va se fermer dans 1 minute. Cliquez sur 'Annuler' pour annuler.",60)
	if $msgbox = 2 Then ; clic sur annuler > relance la fonction shutdown_session au départ
		if $logs then
			FileWriteLine($fichier_logs,"Annulation de la fermeture de session : "&_NowCalc())
		EndIf
		shutdown_session($tps_inactivite)
	Else ; pas de clic ou clic sur OK
		If @HOUR>=$heure_extinction Then ; l'heure d'extinction est dépassée, arrêt complet du PC au lieu de fermeture de session
			MsgBox(0,"Ok","Arret du PC imminent !",30)
			sleep(30000) ; pause de 30sec
			if $logs then
				FileWriteLine($fichier_logs,"Arrêt forcé du PC : "&_NowCalc())
			EndIf
			shutdown(5) ; arrêt forcé du PC
		Else
			MsgBox(0,"Ok","Fermeture de session imminente !",30)
			sleep(30000) ; pause de 30sec
			if $logs then
				FileWriteLine($fichier_logs,"Fermeture de session : "&_NowCalc())
			EndIf
			shutdown(0) ; arrêt forcé de la session
		EndIf
   EndIf
EndFunc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Avatar du membre
jl56
Niveau 7
Niveau 7
Messages : 415
Enregistré le : mer. 24 oct. 2007 22:42
Localisation : 56000
Status : Hors ligne

Re: Script fermeture de session / extinction de PC

#2

Message par jl56 »

Bonjour,

Pour régler un problème analogue j'ai du exécuter mon script par un service
j'avais suivie cette méthode ça fonctionne bien.
http://www.pc-optimise.com/windows/dema ... ?print=yes
etape 3

A+

JL56
gaelds
Niveau 2
Niveau 2
Messages : 27
Enregistré le : sam. 18 avr. 2015 06:59
Status : Hors ligne

Re: Script fermeture de session / extinction de PC

#3

Message par gaelds »

Merci pour la réponse rapide ! Ta méthode est intéressante, je pourrais surement la tester sur 1 pc. Mais je ne sais pas trop comment je pourrais m'y prendre pour déployer ce script en tant que services sur plusieurs centaines de machines... ? et sans domaine évidemment sinon c'est trop facile :) C'est surement faisable, je vais y réfléchir.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: Script fermeture de session / extinction de PC

#4

Message par orax »

Voir ceci : Éteindre automatiquement son PC la nuit en cas d'inactivité (surtout la page Exécuter la tâche en cas d'inactivité).
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
gaelds
Niveau 2
Niveau 2
Messages : 27
Enregistré le : sam. 18 avr. 2015 06:59
Status : Hors ligne

Re: Script fermeture de session / extinction de PC

#5

Message par gaelds »

Merci mais j'en suis arrivé à Autoit car justement je n'y arrive pas en tâche planifiée. En la créant manuellement pas de problème, mais par des scripts d'import ou un installation dans un paquet WAPT la tâche est créée mais ne s'exécute pas dans l'environnement utilisateur. La tâche planifiée d'arrêt simple à 18h fonctionne par contre en l'important dans un script.
Je pense que je ne vais garder que la partie fermeture de session pour le script autoit et continuer à éteindre les PC via les tâches planifiées.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1037
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Script fermeture de session / extinction de PC

#6

Message par walkson »

Bonjour,
si la session est fermée avant 18h, mon script ne sera plus actif pour arrêter le PC à 18h
Le problème reste entier d'autant plus que s'il est facile de fermer une session, l'inverse pose problème...
Ne serait il pas plus simple de mettre le PC en veille ? une tâche planifiée pouvant le sortir de cet état...
Pour importer une tâche, il y a cette possibilité
Func xml()
$bt ='<?xml version="1.0" encoding="UTF-16"?>'& @CRLF
$bt &='<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">'& @CRLF
$bt &='  <RegistrationInfo>'& @CRLF
$bt &='    <Date>2015-04-03T18:59:05.4291548</Date>'& @CRLF
$bt &='    <Author>'& @ComputerName & '\' & @UserName & '</Author>'& @CRLF
$bt &='  </RegistrationInfo>'& @CRLF
$bt &='  <Triggers>'& @CRLF
$bt &='   ..........................
Voir https://www.autoitscript.fr/forum/viewt ... ssier+temp
Dans l'aide de la console MMC (Win7), j'ai vu aussi (pas testé)

Code : Tout sélectionner

Conditions d'inactivité
Vous pouvez configurer une condition qui signale à la tâche de s'exécuter uniquement si l'ordinateur se trouve en état d'inactivité pendant une durée spécifique quand un déclencheur est activé. Quand vous configurez cette condition, vous configurez également la durée que vous souhaitez (une fois la tâche déclenchée) pour que l'ordinateur entre en état d'inactivité. 

Le service Planificateur de tâches vérifiera si l'ordinateur se trouve en état d'inactivité toutes les 15 minutes. Un ordinateur est considéré en état d'inactivité lorsqu'un économiseur d'écran est en cours d'exécution. Si un économiseur d'écran ne s'exécute pas, l'ordinateur est alors considéré en état d'inactivité en cas d'utilisation de l'unité centrale à 0 % et d'entrée ou de sortie à 0 % sur 90 % des 15 dernières minutes et d'absence d'activité du clavier ou de la souris pendant cette période. Une fois que le service Planificateur des tâches détecte que l'ordinateur est en état d'inactivité, le service attend simplement que l'utilisateur intervienne pour mettre fin à l'état d'inactivité.

Si une tâche est configurée pour démarrer uniquement si l'ordinateur est inactif pendant 30 minutes et que la tâche attend que l'ordinateur soit inactif pendant 10 minutes, la tâche se lancera 5 minutes après si l'ordinateur a été inactif pendant 25 minutes avant que le déclencheur ait été activé. La tâche ne démarrera pas si l'ordinateur entre en état d'inactivité 5 minutes après activation du déclencheur.

Si la condition Arrêter si l'ordinateur n'est plus inactif est sélectionnée pour une tâche et que la tâche est exécutée avec l'ordinateur en état d'inactivité, la tâche arrêtera alors d'être exécutée lorsque l'ordinateur n'est plus au ralenti. La tâche arrêtée par cette condition reprendra son exécution la prochaine fois que l'ordinateur entrera en état d'inactivité si la condition Redémarrer si l'état d'inactivité reprend est sélectionnée. 
En espérant avoir été utile...
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
jl56
Niveau 7
Niveau 7
Messages : 415
Enregistré le : mer. 24 oct. 2007 22:42
Localisation : 56000
Status : Hors ligne

Re: Script fermeture de session / extinction de PC

#7

Message par jl56 »

Bonjour à tous

Je viens de me souvenir d'un utilitaire de la suite sysinternal
PSSHUTDOWN

j'avais testé pour éteindre l'ordinateur de ma fille ça fonctionnais
la syntaxe était
psshutdown.exe -s -f -t 00 -u mafille -p password \\192.168.0.162

regarde ici https://technet.microsoft.com/fr-fr/sys ... psshutdown

pour le téléchargement c'est la https://technet.microsoft.com/fr-fr/sys ... s/bb842062

tu peut l'intégrer dans ton script

A+

JL56
Répondre