AD : log off automatique des utilisateurs , shutdown auto des pc

AD : log off automatique des utilisateurs , shutdown auto des pc - Windows & Software

Marsh Posté le 28-01-2005 à 09:36:16    

Dans un domaine Active Directory sous Windows 2003 serveurs et avec des stations XP (SP2) j'ai deux problèmes :
 
 
- Les utilisateurs ont du mal à se déloguer après après avoir finit de travailler sur la station. Je pensais que c'était réalisable via GPO mais je ne trouve (ou retrouve) l'option correspondante.
 
 
- les utilisateurs (le soir, en fin de semaine ou avant les vacances) ont du mal à éteindre les pc, ce qui induit une consommation inutile d'electricité et une usure prématuré des pc (enfin surtout alim et ventilateur cpu)
 
il y a différents moyen de faire un shutdown automatique des pc.
 
- sur la machine locale, en lançant "shutdown" via le gestionnaire de taches plannifiés. Pénible à faire et à gérer.
 
- installer sur les postes un économiseur d'écran qui éteint la machine au bout de X minutes. ça implique d'envoyer via script l'économiseur d'écran, de le mettre par defaut via gpo  mais pour sa config  :??:  
 
 
- faire un shutdown depuis un serveur via un script + plannificateur de tache
 
 


@ECHO ARRET DU POSTE A018N01
 
shutdown -s -m \\A018N01


 
 
Sauf que ce script semble planter et je me retrouve avec un processus "cmd" tournant à 100% sur le serveur.
 
 
Pourquoi le processus cmd plante ?
 
à cause du @Echo ?
 
devrais-je plutot faire un script avec juste :
 


 
shutdown -s -m \\A018N01


 
ou alors il manque à la fin du script un exit ?
 


@ECHO ARRET DU POSTE A018N01
 
shutdown -s -m \\A018N01
 
exit


 
 
ou autre chose ?
 
 
Si quelqu'un voit une autre approche à mes soucis, je suis preneur également.
 
 
sinon je ne souhaite pas mettre juste les pc en veille.
 
 
 
Evidemment la meilleure des solutions serait d'éduquer les utilisateurs mais je fais face à 1000 élèves et une centaines de profs donc ces derniers me répondent on faisait comme ça avant ou oui mais les autres le font aussi
 
 [:spamafote]


---------------
Cherche geekette | Traquez vos billets d'€ | Don du sang | Don de moelle osseuse
Reply

Marsh Posté le 28-01-2005 à 09:36:16   

Reply

Marsh Posté le 28-01-2005 à 09:52:05    

J'adore ton blog  :lol:  
 

Citation :

cherche femme....
 
.... possédant un pc.
 
   
 
Envoyer vos photos (du pc)


 
 
Sinon pour ton probleme, désolé mais je vois pas  :sweat:  
 

Reply

Marsh Posté le 29-01-2005 à 11:53:25    

up du weekend, espoir.


---------------
Cherche geekette | Traquez vos billets d'€ | Don du sang | Don de moelle osseuse
Reply

Marsh Posté le 29-01-2005 à 12:32:14    

je sais pas déjà essaie de lancer le script sur une machine
 
j'ai pas testé, pas trop le temps mais j'ai l'impression qu'il cherche la machine sur le rezo et qu'il ne trouve pas
 
une piste si tu trouve vraiment pas essaies des freeware
mais bon ça devrait marcher

Reply

Marsh Posté le 29-01-2005 à 12:48:55    

ah pas con le truc de la machine non trouvée (donc deja éteinte)
 
je testerais ça...


Message édité par com21 le 29-01-2005 à 12:49:14

---------------
Cherche geekette | Traquez vos billets d'€ | Don du sang | Don de moelle osseuse
Reply

Marsh Posté le 31-01-2005 à 09:21:45    

essaye en vbs ça plante moins
 
Set oShell= CreateObject("Wscript.Shell" )
var= "echo il fait beau"
oShell.run var,,1
 
et arrete le blog et met toi au sport, pour les rencontre c + simple ;)

Reply

Marsh Posté le 31-01-2005 à 09:37:10    

sauf que moi et la programmation ça faut deux (et encore plus le vbs)
 
 
pour le sport :  tu as vu le temps ?
Et puis le sport, en faisant de l'airsoft je n'ai pas tellement rencontré de femme.....


---------------
Cherche geekette | Traquez vos billets d'€ | Don du sang | Don de moelle osseuse
Reply

Marsh Posté le 02-02-2005 à 09:39:41    

Tiens un script VBS ki te permettra d'etteindre un pc a distance, il te faudra juste l'exécuter et entrer le nom de la machine (ip ou nom) :
 
Dim Machine
Dim Temp
Temp=10
Machine=InputBox("Entrez le nom de la machine" )
If Machine <>"" Then
Set WshShell = WScript.CreateObject("WScript.Shell" )
WshShell.Run ("ShutDown -m \\" & Machine & " -s -f -t " & Temp)
Msgbox ("Ordinateur distant arrêté" )
Else
Msgbox ("Fin de programme. Au revoir" )
End If
 
 
 
Le PC s'éteindra dans les 10 prochaines secondes !!
Tien moi au courant...

Reply

Marsh Posté le 02-02-2005 à 09:45:38    

Pour automatiser le .vbs :
 
 
Dim Machine
Dim Temp
Temp=10
Machine=A019N00
If Machine <>"" Then
Set WshShell = WScript.CreateObject("WScript.Shell" )
WshShell.Run ("ShutDown -m \\" & Machine & " -s -f -t " & Temp)
Msgbox ("Ordinateur distant arrêté" )
Else
Msgbox ("Fin de programme. Au revoir" )
End If
 
 
c'est good ?
 
Dans ce cas de figure le If Machine <>"" Then et End If
devient inutile, donc le script suivant suffit et reste correct ?
 
 
Dim Machine
Dim Temp
Temp=10
Machine=A019N00
Set WshShell = WScript.CreateObject("WScript.Shell" )
WshShell.Run ("ShutDown -m \\" & Machine & " -s -f -t " & Temp)
Msgbox ("Ordinateur distant arrêté" )
Else
Msgbox ("Fin de programme. Au revoir" )


---------------
Cherche geekette | Traquez vos billets d'€ | Don du sang | Don de moelle osseuse
Reply

Marsh Posté le 03-02-2005 à 20:03:16    

Si tu vire le IF et le END IF, n'oublie pas de virer le ELSE aussi ;)
De plus si tu veux automatiser ton script, évite les msgbox et préfère un WScript.echo en prenant soin de mettre comme environement de script Cscript.exe, ou alors évite de faire des sortie...
 
Le soucis, c'est d'automatiser ca sur 1000 machines!

Reply

Marsh Posté le 03-02-2005 à 20:03:16   

Reply

Marsh Posté le 03-02-2005 à 20:06:53    

j'avais pas vu le else...
 
Par contre le WScript.echo  ou Cscript.exe   ça ne me parle pas trop et "evite de faire des sorties" c'est flou


---------------
Cherche geekette | Traquez vos billets d'€ | Don du sang | Don de moelle osseuse
Reply

Marsh Posté le 03-02-2005 à 20:37:02    

com21 a écrit :


Par contre le WScript.echo  ou Cscript.exe   ça ne me parle pas trop et "evite de faire des sorties" c'est flou


 
Il y a 2 interpréteur de script sous Windows. CScript.exe et WScript.exe.
Le premier est le mode "console" et donc silencieux.
Le second  est le mode "window" et affiche toute les sorties.
 
WScript.Echo permet l'affichage sur la sortie standard (en général l'écran).
 
Je viens de me pencher un peu sur le problème.
Je me suis souvenu que sur le site de jcb (www.bellamyjc.net), y'avais un exemple de script pour changer le mot de passe sur tous les pc détectés du réseau.
J'ai donc détourné le code et ca me donne ca:

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
  13. Set net   = Wscript.CreateObject("WScript.Network"           )
  14. Set fso   = WScript.CreateObject("Scripting.FileSystemObject" )
  15. Set Shell = Wscript.CreateObject("WScript.Shell"             )
  16. CALL EnumComputer(DomainDetect)
  17. ' ------------------------------------------------------------------------------
  18. ' End
  19. ' ------------------------------------------------------------------------------
  20. ' ------------------------------------------------------------------------------
  21. FUNCTION DomainDetect
  22. ' ------------------------------------------------------------------------------
  23.  DIM ComputerSystem, domain, ComputerItem
  24.          Set ComputerSystem = GetObject("winmgmts:{impersonationLevel=impersonate}" ).InstancesOf ("Win32_ComputerSystem" )
  25.  For Each ComputerItem in ComputerSystem
  26.           DomainDetect = ComputerItem.Domain
  27.           WScript.Echo DomainDetect
  28.  Next
  29. END FUNCTION
  30. ' ------------------------------------------------------------------------------
  31. FUNCTION EnumComputer (domain)
  32. ' ------------------------------------------------------------------------------
  33.  DIM oWinnt, classe, Computer, root, oDomainItem
  34.          Set oWinnt=GetObject("WinNT://" & domain)
  35.          For Each oDomainItem in oWinnt
  36.           classe=oDomainItem.Class
  37.           Computer=oDomainItem.Name
  38.           If classe="Computer" Then
  39.              CALL ShutDownComputer(Computer)
  40.           End If
  41.  Next
  42. END FUNCTION
  43. ' ------------------------------------------------------------------------------
  44. FUNCTION ShutDownComputer(computer)
  45. ' ------------------------------------------------------------------------------
  46.  DIM root, temp
  47.          root="\\" & computer & "\c$"
  48.          'temp=?
  49.          If Not fso.FolderExists(root)  Then
  50.         WScript.Echo "******* " & computer & """ n'a pas été trouvé sur le réseau."
  51.  Else
  52.         'WshShell.Run ("ShutDown -m \\" & Machine & " -s -f -t " & Temp)
  53.         WScript.Echo "machine " & computer & " en cours d'extinction."
  54.  End If
  55. END FUNCTION


 
note:
J'ai pas encore testé la fonction d'extinction, qui est encore en commentaire(').
Pensé de denière minute:
Fodra rajouter un test pour pas éteindre le poste qui exécute le script (pour éviter de se scier la branche sous les pates [:matleflou] ) ainsi que sur les serveurs....


Message édité par helvetik le 03-02-2005 à 20:40:01
Reply

Marsh Posté le 03-02-2005 à 21:59:18    

Voici une nouvelle version de mon code:

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-SRV01","CHRONO-SRV02","CHRONO-TEC01" )
  17. temps     = 10
  18. ByeMsg    = "Arrêt automatique. A bientôt."
  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.           Domain = ComputerItem.Domain
  30.           WScript.Echo "Extinction des pc du domaine : " & Domain
  31.           EnumComputer(Domain)
  32.  Next
  33. END FUNCTION
  34. ' ------------------------------------------------------------------------------
  35. FUNCTION EnumComputer (domain)
  36. ' ------------------------------------------------------------------------------
  37.  DIM oWinnt, classe, Computer, root, oDomainItem
  38.          Set oWinnt=GetObject("WinNT://" & domain)
  39.          For Each oDomainItem in oWinnt
  40.           classe=oDomainItem.Class
  41.           Computer=UCase(oDomainItem.Name)
  42.           If classe="Computer" Then
  43.              CALL ShutDownComputer(Computer)
  44.           End If
  45.  Next
  46. END FUNCTION
  47. ' ------------------------------------------------------------------------------
  48. FUNCTION ShutDownComputer(computer)
  49. ' ------------------------------------------------------------------------------
  50.  DIM root
  51.          root   = "\\" & computer & "\c$"
  52.          If Not fso.FolderExists(root)  Then
  53.         WScript.Echo "machine " & computer & """ n'a pas été trouvé sur le réseau."
  54.  Else
  55.         If IsNotAnExcept(computer) Then
  56.                'Shell.Run ("ShutDown -m \\" & computer & " -s -f -t " & Temps & ByeMsg)
  57.                WScript.Echo "machine " & computer & " en cours d'extinction."
  58.         End If
  59.  End If
  60. END FUNCTION
  61. ' ------------------------------------------------------------------------------
  62. FUNCTION IsNotAnExcept(computer)
  63. ' ------------------------------------------------------------------------------
  64.  DIM i
  65.          For i=0 To UBound(exception,1) Step 1
  66.      If computer=exception(i) Then
  67.         IsNotAnExcept=FALSE
  68.         EXIT FUNCTION
  69.      Else
  70.         IsNotAnExcept=TRUE
  71.      End If
  72.  Next
  73. END FUNCTION


Pour ceux qui ont win2k comme moi, on peut télécharger le fichier shutdown.exe du ressource kit ici: http://www.mameworld.net/ultrastyl [...] %20W2K.zip
 
Je ferai des tests demain.
J'attend votre feedback
 
A+
 
Hel

Reply

Marsh Posté le 03-02-2005 à 22:20:01    

helvetik : n'y a t'il pas un autre moyen d'éteindre les pc en donnant leurs nom dans le script (ou en travaillant avec un fichier contenant la liste des machines à éteindre)
 
 ?


---------------
Cherche geekette | Traquez vos billets d'€ | Don du sang | Don de moelle osseuse
Reply

Marsh Posté le 03-02-2005 à 23:04:09    

Tu abandonnerais DNS pour LMHOST, toi??
 
Sans rire, WMI, c'est dynamique. Ton fichier, faut le maintenir jour manuellement...
Par contre, avec WMI, tu vas avoir des soucis si ton parc contient des PC antérieurs à Win2k (nt inclu) car WMI n'est pas géré nativement et il faut l'installer...

Reply

Marsh Posté le 03-02-2005 à 23:05:23    

non j'utilise dns mais je ne souhaite pas éteindre toutes les machines...
 
Donc il faut bien indiquer le nom de machines à éteindre un moment ou un autre.
 
pour WMI : ça veut dire que si j'installe WMI sur mes postes 98(on trouve ça où ?) je pourrais les éteindre  ?


Message édité par com21 le 03-02-2005 à 23:06:13

---------------
Cherche geekette | Traquez vos billets d'€ | Don du sang | Don de moelle osseuse
Reply

Marsh Posté le 03-02-2005 à 23:06:59    

Si tu tiens quand même à fournir les noms manuellement, tu peux modifier le code a ta sauce. Tu n'as qu'à inverser ma fonction "IsNotAnExcept", qui exclut de l'extinction général les ordinateurs contenu dans le tableau de chaine de caractère "exception"

Reply

Marsh Posté le 04-02-2005 à 08:53:23    

je regarderais en détails à un moment où j'aurais du temps


---------------
Cherche geekette | Traquez vos billets d'€ | Don du sang | Don de moelle osseuse
Reply

Marsh Posté le 04-02-2005 à 11:58:44    

Il y a aussi psshutdown qui a des options sympatiques. Voir sur google.

Reply

Marsh Posté le 14-02-2005 à 15:12:08    

Question a 10 balles
 
J'essaye d'eteindre un winXP depuis un serveur 2K .. ben il veut pas. (shutdown ou psshutdown)
Par contre 2K server -> 2K WOrkstation pas de pb.
 
Il y aurait pas un protection de XP (surtout depuis le SP2) qui m'empeche de faire mon shutdown ??
 
Merci pour les infos
 
Esteban74


Message édité par esteban74 le 14-02-2005 à 15:13:55
Reply

Marsh Posté le 14-02-2005 à 15:44:02    

les pc sont tous dans le meme domaine ?
 


---------------
Cherche geekette | Traquez vos billets d'€ | Don du sang | Don de moelle osseuse
Reply

Marsh Posté le 14-02-2005 à 15:57:11    

com21 a écrit :

les pc sont tous dans le meme domaine ?


 
vi
 
J'ai trouvé en virant le parefeu = nickel
 
Qq'un connait le "truc" a faire si je veux garder le parefeu ?
 
Esteban74

Reply

Marsh Posté le 14-02-2005 à 15:58:10    

esteban74 a écrit :

Question a 10 balles
 
J'essaye d'eteindre un winXP depuis un serveur 2K .. ben il veut pas. (shutdown ou psshutdown)
Par contre 2K server -> 2K WOrkstation pas de pb.
 
Il y aurait pas un protection de XP (surtout depuis le SP2) qui m'empeche de faire mon shutdown ??
 
Merci pour les infos
 
Esteban74


 
 
http://forum.hardware.fr/forum2.ph [...] 0&subcat=0
 
grilled :o


Message édité par +yann le 14-02-2005 à 15:59:02
Reply

Marsh Posté le 14-02-2005 à 16:02:09    


 
Merci  ;)  
 
Mais y'a pas moyen de garder le parefeu et d'autoriser les scripts du domain (ou depuis un serveur) ?
 
Esteban74

Reply

Marsh Posté le 14-02-2005 à 16:05:02    

moyen l'interet d'un firewall sur un pc dans un domaine ;)
 
sinon, si tu fais confiance à ton serveur de domaine, tu autorise son ip dans ton firewall.


---------------
Cherche geekette | Traquez vos billets d'€ | Don du sang | Don de moelle osseuse
Reply

Marsh Posté le 14-02-2005 à 16:07:02    

com21 a écrit :

moyen l'interet d'un firewall sur un pc dans un domaine ;)
 
sinon, si tu fais confiance à ton serveur de domaine, tu autorise son ip dans ton firewall.


 
Ch'uis complement d'ac mais je suis pas le seul a decider  :)  
 
Je vais tester les droits sur une IP et je vous tiens au courant
 
Merci
Esteban74
 
euh ... comment on ajoute une IP dans ce pare feux ??  :??: (comme shutdown est lancé depuis le serveur, je vois pas quelle appli autoriser et je vois pas ou je peux dire : "autorise tout depuis cette ip"
Merci pour l'aide


Message édité par esteban74 le 14-02-2005 à 16:23:47
Reply

Marsh Posté le 30-01-2008 à 08:49:45    

je cherche sous AD, dans la GPO d'arret automatique des stations, la commande exacte du "shutdown" qui me permette d'éteidnre mon parc de machine à une heure donnée.
 


---------------
"le prix passe, la qualité reste"
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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