Script démarrage via GPO

Bonjour,
J’ai un souci pour l’utilisation d’un script de démarrage pour des clients via une GPO sous Active Directory.
Ce script doit forcer les utilisateurs à se déconnecter de leurs sessions quand ils ne sont plus autorisés à se connecter au domaine, via une plage d’horaire défini.

J’ai donc mon script.bat placé dans le répertoire \nom_domaine\Sysvol\policies\user\scripts\logon et le client à accès à ce répertoire, le script se lance au démarrage c’est ok mais le problème c’est qu’il me met :
“L’erreur système 5 s’est produite.”
“Accès refusé.”
Et le script ne fonctionne pas. J’ai lancé la commande manuellement sous mon client et ça me met la même chose.
Au niveau de mon serveur quand je lance ce script il fonctionne correctement.

Merci pour toute aide.
Edité le 22/02/2008 à 19:00

C’est un problème de droit.
Pourriez-vous donner le détail de votre script.bat ?

Ce script ne fonctionne jamais , quelque soit l’heure ?

Si vous avez mis mis des plages horaires au niveau des utilisateurs alors dans ce cas vos clients ne pourront plus ouvrir de sessions en dehors de ces horaires.

Il est vrai que si les clients sont déjà connectés au moment du dépassement des ces horaires alors cette restriction n’aura pratiquement aucun effet.
Sauf peut-être quelques connexions dont le “ticket de connexion négocié” se renouvelle plus souvent.

Voilà mon script :
Net Accounts /Forcelogoff : 5

C’est un script tout ce qu’il y a de plus simple. Il envoie un message et laisse 5min à l’utilisateur avant de le déconnecter.

Il ne fonctionne jamais quelque soit l’heure il me met toujours la même erreur.
“L’erreur système 5 s’est produite.”
“Accès refusé.”

La plage d’horaire est mise exprés pour leurs interdire de se connecter en dehors de leurs heures d’accès autorisées par l’entreprise. Mais si ils se connectent genre une minute avant l’interdiction leurs sessions restera active tout le temps qu’ils le désirent. D’où ce script qui va leur imposer la fermeture de la session qui se prolongerai au-delà des heures d’accès autorisé.

Je cherche toujours mais pour l’instant aucun résultat concluant, merci de ton aide en tout cas. J’espère que tu pourras m’aider d’avantage.

J’ai peut-être une voie pour le problème.

J’ai essayé de lancer sous mon client en ligne de commande une syntaxe pour synchroniser l’heure de mon client avec mon domaine, et il m’a mis un message d’erreur m’indiquant que mon client ne disposer pas des privilèges nécéssaire.

Je ne sais pas comment lui donner ceux-ci ?
Edité le 03/12/2007 à 18:53

En mettant l’utilisateur dans le groupe local “administrateurs” ou “utilisateurs avec pouvoirs” du client lui autorise la commande “net accounts”

Je pense qu’il doit y avoir une stratégie locale qui permettrait qu’un utilisateur sans pouvoir puisse aussi lui permettre cette commande sans lui autoriser un tas d’autres droits.
Je cherche …

On trouve aussi dans la stratégie locale d’un ordinateur au niveau d’un client XP quelquechose qui devrait vous interresser :
Ouvrir une console mmc puis ajouter composant “stratégie de groupe”, prendre ordinateur local.
Dans cette stratégie développer “Configuration ordinateur”, “paramètres Windows”, “paramètres de sécurité” , “options de sécurité” puis à droite il y a: “Sécurité réseau: forcer la fermeture de session quand les horaires de connexions expirent”.

Je ne l’ai pas testé.
Edité le 05/12/2007 à 15:19

La stratégie “forcer la fermeture de session…” fonctionne.
Elle ne ferme pas physiquement la session de la personne mais l’empêche bien d’aller sur le réseau ou d’imprimer via le réseau.
En revanche ils peuvent toujours aller sur internet sauf si vous avez un proxy ou vous pouvez limiter les horaires par utilisateurs.
J’utilise WEBsurf Control au niveau de mon proxy.

Pour forcer la déconnection tu as :
shutdown -L -F
Tu peux ajouter le paramètre -T 0 pour éviter le compte à rebours.

Tu en fais un .BAT que tu fais exécuter par le Planificateur de tâches (avec les droits d’un compte administrateur).

J’ai pondu un petit script vbs qui utilise “net accounts /forcelogoff:xx” mais qui vous permet quelque soit l’heure du logon de la personne qu’il soit délogé à une heure donnée, dans mon exemple il seront déloggés à 18h00


dim WshShell,VFL,test
dim heure_logoff
dim minute_logoff

Set WshShell = wscript.createobject(“wscript.shell”)

heure_logoff=18
minute_logoff=0

’ wscript.echo "Heure actuelle: " & Time
’ wscript.echo “Temps écoulé depuis 12h00: " & Timer
VFL = int((((heure_logoff * 3600)+ (minute_logoff*60)) - timer)/60)
’ wscript.Echo VFL
set test=WshShell.exec(“net.exe”& " accounts /FORCELOGOFF:” & VFL)


Merci pour toutes ces aides précieuses, je n’est pas pu encore testé tout ça mais je vous retiens au courant.

De mon côté j’ai trouvé une solution qui consisterai à pouvoir attribué des privilèges admin à l’utlisateur juste pour lancer la commande du script. Identique à “Exécuter en tant que…” en utilisant Runas à écrire dans le script :

runas /user:administrateur script.bat

Là encore je ne l’est pas testé.

Le “runas” va te demander le mot de passe administrateur.

C’est pour ça que je te conseille de passer par le planificateur de tache, où tu le rentres à l’avance.

J’ai essayé pas mal de chose depuis la dernière fois et le plus simple je pense et d’utiliser le shutdown, cependant comment indiquer que cette commande soit exécuté à un moment précis. Je veux pouvoir l’utiliser depuis mon domaine et pour les utilisateurs de celui-ci, forçant les utilisateur à se déconnecter à tel heure. Le problème c’est que cette solution n’est pas très adapté à partir où l’on gère beaucoup d’utilisateur qui n’ont pas les même plages d’horaire d’accès autorisées.

Je vais me penché sur le script vbs, ou sinon pour le shutdown quelqu’un peut-il m’aider d’avantage?

Merci.
Edité le 09/12/2007 à 17:26


Je ne comprend pas tout au script , les types de tes variables ne sont pas déclarés ce n'est pas grave? Et quelqu'un peut-il m'éclairé sur ces points-ci :

Set WshShell = wscript.createobject(“wscript.shell”)


set test=WshShell.exec(“net.exe”& " accounts /FORCELOGOFF:" & VFL)

J’ai lancé la commande shutdown avec un script.bat qui utilise la commande AT (plannification d’une tâche)(voila le script de avec at :
AT 18:00 “Shutdown -t 30”), ce script n’a pas fonctionné au niveau utilisateur toujours le même problème de droits… j’ai ensuite appliquer la même stratégie mais au niveau machine, le script s’est éxécuté correctement mais son résultat n’a pas fonctionné. (C’est à dire en ligne de commande le script à été accepté mais aucun résultat).

Je sais pas trop quoi essayé d’autre là.

La commande AT utilise le planificateur de tache de Windows.
Donc fait un script avec uniquement la commande shutdown et fait la exécuter par le planificateur de tache avec les droit administrateur.

Le problème c’est que je ne dois pas pouvoir me connecter sur le pc client, je dois tout faire depuis mon contrôleur de domaine parceque je gère les ordinateurs et compte d’utilisateur ; les ordinateurs se trouvent tous à des endroits différents.

Si vous faites cela depuis votre serveur alors vous avez les droits pour rebooter les PC à distance.

1- Créez un fichier texte avec le bloc note appelé: listpc.txt et mettez la liste des noms des PC à rebooter (un nom par ligne).

2 - Créez un fichier bat contenant la commande suivante:
for /F %%i in (listpc.txt) do shutdown -r -m \%%i -f

Si vous voulez tester cette commande à la main alors remplacez les %%i par %i

3 - Lancez ce bat 1 minutes après l’horaire limite via le planificateur de taches de votre serveur.

Ah ok intéréssant cette méthode, je vais la tester dans très peu de temps. Si ça marche c’est parfait. Cependant serait-il possible de m’éclaircir sur ces points du script :

for /F %%i

\%%i -f

voir m’expliquer comment il fonctionne point par point. (Je vais avoir besoin d’expliquer les points du script lors de mon passage à l’examen. Merci)

En fait pour rebooter une machine à distance la commande cmd est:
shutdown -r -m \nom_du_pc -f

-r pour le reboot
-m \xxxxx machine à rebooter à distance
-f pour forcer le shutdown

Pour l’automatisme on utilise une boucle avec variable extraite d’une liste dans un fichier texte:
for /F %%i in (c:\listpc.txt) do shutdown -r -m \%%i -f

for /F pour la boucle
%%i variable qui prend les valeurs extraites du fichier c:\listpc.txt ligne par ligne.
do "la commande à lancer " en utilisant la valeur récupérée dans la variable %%i

Il existe des boucles beaucoup plus complexes for /F avec “token” qui permettent d’extraire des morceaux de certaines lignes …
:stuck_out_tongue:

Et bien je vous dit un TRES grand MERCI pour toutes ces aides et explications.
Merci beaucoup, il me reste juste à tester votre méthode et je vous tiendrai au courant.

J’ai un petit problème j’ai essayé plusieurs fois votre script mais il me lance quelque chose d’infini, cependant quand j’ai rentré ceci dans mon invite ça à fonctionné :

shutdown -r -m \nom_du_pc -f

Je ne sais pas si il y a un problème avec la boucle ?

Je viens de m’apercevoir que ça fonctionne aussi quand j’utilise la boucle comme ceci :

for /F %i in (c:\listpc.txt) do shutdown -r -m \%i -f

comme vous l’aviez suggéré plus haut : un seul % en ligne de commande ; mais le résultat est le même quand je remet le % et que je lance le batch. C’est le seul problème en fait, l’éxecution en lançant le batch.
Edité le 12/12/2007 à 19:16

C’est bon j’ai trouvé une solution je sais pas si c’est la bonne mais bon, en fait dans ma planification de tâche je met qu’il lance l’invite de commande puis dans les propriétés de ma tâche je modifie le chemin de l’invite de commande et je le remplace par mon batch, et sa fonctionne parfaitement. Il me reste juste à modifier le temps imparti avant la déconnexion et changer le mode de déconnexion (éteindre le pc plutôt que le faire redémarrer).

Merci beaucoup.