Lancer un script a une heure donné

Lancer un script a une heure donné - Windows & Software

Marsh Posté le 22-10-2003 à 11:29:17    

Bonjour a tous!
J'aimerais que les poste de mon domaine se déconnecte de leur session a une heure donné.
Pour cela j'utiliserais un script.
La question, c'est: comment mes poste peuvent-ils lancer un script sans passer par les tâche planifiés?
 
Merci
A+

Reply

Marsh Posté le 22-10-2003 à 11:29:17   

Reply

Marsh Posté le 22-10-2003 à 12:32:29    

une commande at mais ca revient au meme que les taches planifiées...

Reply

Marsh Posté le 22-10-2003 à 13:17:51    

Je pense que ton problème c'est que tu ne veux pas passer sur chaque machine régler une tâche planifiée ?
 
Côté serveur tu peux définir des heures de login pour tes comptes. Sinon en planifiant une tâche rien ne t'empêche de déconnecter les stations à distance. Va sur www.sysinternals.com et télécharge psshutdown.exe (pstools), cet utilitaire permet de faire un shutdown, un restart ou un logoff suivant les paramètres que tu lui passe y compris sur des machines distantes (il suffit de faire tourner la tâche avec un compte admin du domaine).
 
L'avantage de faire un logoff avant d'interdire à l'utilisateur le login c'est de lui laisser une période de grace pendant laquelle il a un message sur l'écran et peut enregistrer ses documents.
 
Tu remarqueras qu'il suffit d'un bête fichier batch avec le nom de tes machines, si tu veux plus de rafinement tu peux utilier Windows Scripting Host (WSH), on pourrait imaginer que tu vas piocher la liste des machines d'une OU directement dans AD avec ADSI et que tu chutdown les machines de cette OU.

Reply

Marsh Posté le 26-10-2003 à 20:49:44    

Merci pour la réponse.
J'utilisiserais se script de fermeture de session pour etre sur qu'aucun programme n'est lancé a 3heure du mat lors de ma sauvegarde.
J'utilise NtBackup, donc y'a pas d'option open files comme sur arc serve (enfin, je crois. :/)
Je ne veux pas de WSH.
Mon script est déjà ok. Pas besoin de shutdown.exe ou autre truc.
 
Merci


Message édité par helvetik le 26-10-2003 à 20:50:58
Reply

Marsh Posté le 26-10-2003 à 20:56:04    

dans les options des comptes utilisateurs, tu fixes des heures de connexion comme dit plus haut
tu dis par exemple de 2h à 5h du matin, personne peut se logger
ya une case à cocher pour que les sessions actives soient automatiquement fermées au passage à 2h (ou bien c sur tse ??)

Reply

Marsh Posté le 26-10-2003 à 21:00:06    

le probleme, c'est que cette option interdit le log, mais ne délog pas....

Reply

Marsh Posté le 26-10-2003 à 21:01:31    

t'as lu ce que j'ai écrit ?

Reply

Marsh Posté le 26-10-2003 à 21:08:49    

Ouais j'ai lu. Mais je ne trouve pas l'option "ya une case à cocher pour que les sessions actives soient automatiquement fermées au passage à 2h"
Je peux donner des authorisation de log. C'est tout. L'utilisateur loggé n'est pas déconnecter si il sort des heures. Ou alors j'ai pas su faire. C'est possible aussi et fodra m'éclairer un peu plus.
 
Merc

Reply

Marsh Posté le 26-10-2003 à 21:11:31    

l'ennui c que j'ai pas d'AD sous la main
mais si tu trouves pas l'option c ptet que j'ai confondu avec la console de terminal server
je verrai ça dans la semaine si je croise un AD

Reply

Marsh Posté le 26-10-2003 à 21:20:44    

Effectivement avec TS, tu peux virer l'utilisateur apprès un temps de connexion ou d'inactivité.
Mais pas avec un log local.

Reply

Marsh Posté le 26-10-2003 à 21:20:44   

Reply

Marsh Posté le 27-10-2003 à 16:46:01    

helvetik a écrit :

le probleme, c'est que cette option interdit le log, mais ne délog pas....


 
C'est bien pour celà que je te disais de prendre psshutdown qui permet de faire un logoff (ou delog si tu préfère)

Reply

Marsh Posté le 27-10-2003 à 16:53:35    

Requin a écrit :


 
C'est bien pour celà que je te disais de prendre psshutdown qui permet de faire un logoff (ou delog si tu préfère)


 
Et via une GPO on peut faire executer un script a une heure precise, et pas juste lors du boot/arret logon/logoff ?

Reply

Marsh Posté le 27-10-2003 à 17:06:57    

Tâche planifiée... tu peux ajouter une tâche avec un script par exemple :
http://www.microsoft.com/technet/t [...] efault.asp
 
En fait je comprens pas pourqoi il ne veut pas utiliser les tâches planifiées... car ca sert à celà, lancer qqch à une heure précise.


Message édité par Requin le 27-10-2003 à 17:09:38
Reply

Marsh Posté le 27-10-2003 à 17:10:17    

Requin a écrit :

Tâche planifiée... tu peux ajouter une tâche avec un script par exemple :
http://www.microsoft.com/technet/t [...] efault.asp


 
Ok merci, donc c'est en passant indirectement par une GPO, ca reste de la tache planifiée.

Reply

Marsh Posté le 28-10-2003 à 23:04:35    

Requin a écrit :


En fait je comprens pas pourqoi il ne veut pas utiliser les tâches planifiées... car ca sert à celà, lancer qqch à une heure précise.


Ben c'est pasqu'il fo ke je m'ammuse a ajouter la tache sur chaque pc.
Le jour ou on ajoute un nouveau pc ou qu'on en réinstall un, tu peux etre sur que j'oublie de remettre la tache...
Alors qu'un script ou un GPO résoudrait ce problem.
Mais apparement, a par utilisé un soft dédié, y'a pas l'air d'avoir un moyen de le faire sous windows...  
Domage.

Reply

Marsh Posté le 28-10-2003 à 23:08:06    

A moins alors d'avoir un moyen de créer des tache planifié via script?? C'est possible?

Reply

Marsh Posté le 28-10-2003 à 23:13:57    

helvetik a écrit :

A moins alors d'avoir un moyen de créer des tache planifié via script?? C'est possible?


 
C'est un peu ce que Requin a expliqué juste au dessus  :whistle:

Reply

Marsh Posté le 28-10-2003 à 23:17:58    


attend que je relise  :ange:  
 
oups..
 
j'avais pas vu le lien...
On va mettre ca sur le compte de la fatigue.  :whistle:  
 
 

Reply

Marsh Posté le 28-10-2003 à 23:20:04    

bon, ben je teste demain, si j'ai le temps...
La je vais au pieu.
A+ et merci.

Reply

Marsh Posté le 11-11-2003 à 10:43:20    

J'ai pas eu le temps de la tester avant aujour d'hui.
Voilà le code (avec 1 ou 2 modif de ma part) si ca interresse quelqu'un:

Code :
  1. strComputer = "."
  2. Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2" )
  3. Set objNewJob = objWMIService.Get("Win32_ScheduledJob" )
  4. errJobCreated = objNewJob.Create ("c:\hello.bat", "********073000.000000-420", True , 1 OR 2 OR 4 OR 8 OR 16 OR 32 OR 64, , , JobID) '07:30 = 23:30. Le lundi c'est 1, le mardi 2, le mercredi 4, ..., le dimanche 64
  5. 'Wscript.Echo errJobCreated 'donne le numéro d'erreur ou de succès a la fin du script dans un msgbox lors de la création (apparement, 0 =succès, 21 =erreur) Je l'ai donc mis en commentaire


On remarque que la tâche est bien créé, mais qu'il n'y a pas d'utilisateur. Si quelqu'un sait comment en ajouter un, je suis preneur.
A+

Reply

Marsh Posté le 11-11-2003 à 11:00:42    

A priori tu ne peux pas soumettre un utilisateur lors de la cération... la raison c'est que l'interface WMI fait appel à une ancienne API Windows (celle similaire à la commande AT) au lieu d'appeler la nouvelle (celle utilisée par exemple par le module graphique des tâches planifiées) :
 
Voici la doc qui concerne l'appel aux tâches planifiées via WMI :
http://msdn.microsoft.com/library/ [...] ledjob.asp

Reply

Marsh Posté le 17-05-2006 à 10:04:48    

Bonjour,
 
Je me permet de upper ce topic parce que je suis dans la même situation que helvetik.
Malheureusement, du haut de mon faible niveau, je n'arrive pas à comprendre correctement comment faire fonctionner les scripts donnés dans les liens vers M$.  
 
Quelqu'un pourrait m'aider ?
 
Merci d'avance, :jap:

Reply

Marsh Posté le 17-05-2006 à 11:39:14    

je te conseille ce .doc  (supportech.insa-lyon.fr/Download/WhitePapers/Divers/Script-connexion-conseils.doc) pour tout ce qui est lancement de scripts par GPO  
 
sinon tu peux regarder du coté des solutions payantes (ou plutot leurs démos ^^) qui te permettent généralement de faire des scripts sans rien connaitre aux problèmes de gpo ou au scripting etc....

Reply

Marsh Posté le 17-05-2006 à 12:08:14    

Merci pour le .doc, je viens de l'imprimer et le lire !
 
J'ai compris beaucoup de choses, c'est bien clair et même si ca ne correspond pas à ma situation ça m'a débloqué.
 
Je m'y met en rentrant à 14h, merci ;)
 
:hello:

Reply

Marsh Posté le 17-05-2006 à 14:37:08    

Je m'en sors pas ! :cry:
 
Je comprends pas bien, déjà. J'suis sûr que j'pourrais m'en sortir avec le script vu plus haut par helvetik, mais j'arrive pas à déchifrer !
 
J'aimerai un script qui éteint l'ordinateur (voir, un logoff) tous les jours à 21:00. Tout ça gérer depuis un domaine AD sous 2003 server.  
 
Merci d'avance si quelqu'un peut m'aider :'(

Reply

Marsh Posté le 17-05-2006 à 14:55:20    

éteindre ou déconnecter de la session?

Reply

Marsh Posté le 17-05-2006 à 15:57:36    

Peu importe, mais le mieux est d'éteindre.
 
Merci :jap:

Reply

Marsh Posté le 20-05-2006 à 09:53:40    

up :jap:

Reply

Marsh Posté le 20-05-2006 à 12:02:42    

crée un fichier avec ça dedans :  
 
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2" )
Set objNewJob = objWMIService.Get("Win32_ScheduledJob" )
errJobCreated = objNewJob.Create ("c:\windows\system32\shutdown.exe -s", "********120000.000000-420", True , 1 OR 2 OR 4 OR 8 OR 16, , , JobID) '07:30 = 23:30. Le lundi c'est 1, le mardi 2, le mercredi 4, ..., le dimanche 64
'Wscript.Echo errJobCreated 'donne le numéro d'erreur ou de succès a la fin du script dans un msgbox lors de la création (apparement, 0 =succès, 21 =erreur) Je l'ai donc mis en commentaire
 
en rouge, ce sont les commentaires qui permettent de décrire l'action de la commande, ils sont facultatifs
en gras, le caractère (')qui permet d'écrire une ligne de commentaire ou d'invalider la ligne de commande qui suit juste apres.
 
le 120000 donne l'heure, ici , 21H, j'ai trouvé en bricolant mais j'ai pas pigé la logique du truc.
le 1, 2, 3.. représente les jours.
 
ici : 1 OR 2 OR 4 OR 8 OR 16 veut dire le lundi, mardi, mercredi, jeudi et vendredi. Si tu veux le WE, faut rajouter 'OR 32 OR 64'
 
a noter que il te faudra faire 2 scripts : 1 pour les postes XP, 1 pour les postes 2K car dans un cas, on a c:\windows et dans l'autre c:\winnt et que le passage de la variable %systemroot%\system32 dans le script à la place de c:\win... ne fonctionne pas.
 
A noter aussi qu'en déployant ce script par AD, les postes clients vont le lire tous les jours au démarrage et vont donc à chaque fois créer une tache planifiée identique. moralité : au bout d'un mois, tu as une vingtaine de taches planifiées identiques sur un poste. Je sais pas dans quelle mesure, ça peut faire merder le planificateur.


Message édité par i'm philou le 20-05-2006 à 12:08:23
Reply

Marsh Posté le 22-05-2006 à 14:57:34    

Hello !
 
J'ai une autre solution que j'ai trouvé il y a un moment maintenant, si ça t'intéresse. Et c'est sans passer par une tache local à chaque station, mais une tâche sur le serveur.
Les prérequis sont :
- il te faut le programme shutdown.exe (présent sur win2k3 et XP, mais pas sur win2k) ou équivalent (psshutdown.exe)
- les stations doivent avoir WMI, donc au minimum win2k. Pas de linux ou autres OSA.
- le partage administratif \\computername\c$ doit exister (et être accessible)
- il faut que l'utilisateur qui lance la tâche aie les droits administrateur sur les stations à éteindres.
 
Voici le script :

Code :
  1. ' ------------------------------------------------------------------------------
  2. ' Script d'extinction des machines présentes sur un réseau
  3. ' HELVETIK Corp.
  4. ' ------------------------------------------------------------------------------
  5. ' Docu  : <ShutAllDown.Ver>, <ShutAllDown.Inf>
  6. ' Code  : <ShutAllDown.Vbs>
  7. ' ------------------------------------------------------------------------------
  8. ' ------------------------------------------------------------------------------
  9. ' Main
  10. ' ------------------------------------------------------------------------------
  11.   OPTION EXPLICIT
  12.   PUBLIC net, fso, shell, exception, temps, ByeMsg
  13.   Set net   = Wscript.CreateObject("WScript.Network"           )
  14.   Set fso   = WScript.CreateObject("Scripting.FileSystemObject" )
  15.   Set Shell = Wscript.CreateObject("WScript.Shell"             )
  16.   exception = array("CHRONO-SRV02","CHRONO-SRV01","CHRONO-DEV01","CHRONO-DEV02","CHRONO-TEC01" )
  17.   temps     = 30
  18.   ByeMsg    = "Arrêt automatique initialisé par l'administrateur"
  19.   CALL DomainDetect()
  20. ' ------------------------------------------------------------------------------
  21. ' End
  22. ' ------------------------------------------------------------------------------
  23. ' ------------------------------------------------------------------------------
  24.   FUNCTION DomainDetect
  25. ' ------------------------------------------------------------------------------
  26.   DIM ComputerSystem, domain, ComputerItem
  27.   Set ComputerSystem = GetObject("winmgmts:{impersonationLevel=impersonate}" ).InstancesOf ("Win32_ComputerSystem" )
  28.   For Each ComputerItem in ComputerSystem
  29.     '{
  30.        Domain = ComputerItem.Domain
  31.        WScript.Echo "Extinction des pc du domaine : " & Domain
  32.        EnumComputer(Domain)
  33.     '}
  34.   Next
  35.   END FUNCTION
  36. ' ------------------------------------------------------------------------------
  37.   FUNCTION EnumComputer (domain)
  38. ' ------------------------------------------------------------------------------
  39.   DIM oWinnt, classe, Computer, root, oDomainItem
  40.   SET oWinnt=GetObject("WinNT://" & domain)
  41.   FOR EACH oDomainItem in oWinnt
  42.     '{
  43.        classe=oDomainItem.Class
  44.        Computer=UCase(oDomainItem.Name)
  45.        IF ( classe="Computer" ) THEN
  46.          '{
  47.             CALL ShutDownComputer(Computer)
  48.          '}
  49.        END IF
  50.     '}
  51.   NEXT
  52.   END FUNCTION
  53. ' ------------------------------------------------------------------------------
  54.   FUNCTION ShutDownComputer(computer)
  55. ' ------------------------------------------------------------------------------
  56.   DIM root
  57.   root   = "\\" & computer & "\c$"
  58.   If Not ( fso.FolderExists(root) ) Then
  59.         '{
  60.    WScript.Echo "machine " & computer & " n'a pas été trouvé sur le réseau."
  61.         '}
  62.   Else
  63.         '{
  64.    If ( IsNotAnExcept(computer) ) Then
  65.      '{
  66.         Shell.Run ("psshutDown \\" & computer & " -c -k -t " & Temps)' & " -m"" & ByeMsg & """ )
  67.         WScript.Echo "machine " & computer & " en cours d'extinction."
  68.              '}
  69.    End If
  70.         '}
  71.   End If
  72.   END FUNCTION
  73. ' ------------------------------------------------------------------------------
  74.   FUNCTION IsNotAnExcept(computer)
  75. ' ------------------------------------------------------------------------------
  76.   DIM i
  77.   For i=0 To UBound(exception,1) Step 1
  78.     '{
  79.        If   ( computer=exception(i) ) Then
  80.            '{
  81.       IsNotAnExcept=FALSE
  82.       EXIT FUNCTION
  83.    '}
  84.        Else
  85.            '{
  86.       IsNotAnExcept=TRUE
  87.            '}
  88.        End If
  89.     '}
  90.   Next
  91.   END FUNCTION


 
Pour finir, je ne l'ai jamais utilisé en prod, donc il n'est pas très propre au niveau du code, mais il fonctionne et c'est le principal....
 
Au niveau du fonctionnement, il éteind toutes les machine du domaine qu'il détecte sauf celles spécifiées dans le tableau "exception".
 
 
A+


Message édité par helvetik le 22-05-2006 à 15:03:26
Reply

Marsh Posté le 23-05-2006 à 17:53:30    

Merci beaucoup, j'essaye ça demain, j'suis trop crevé ce soir !  
 
:jap:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed