15/11/2024

Stratégie de groupe

Script – Paramétrer les horaires d’accès sur plusieurs utilisateurs

I. Présentation

Lorsque vous disposez d’un domaine, il est possible à partir de l’annuaire Active Directory en accédant aux propriétés des utilisateurs de définir des plages horaires, pendant lesquelles ils sont autorisés à ouvrir une session sur le domaine. Cependant, ceci doit être géré au cas par cas ce qui peut être long à déployer dans le cas où vous devez le faire pour plusieurs dizaines d’utilisateurs et plus… Malheureusement ce n’est pas gérable par le biais des objets de stratégies de groupe (GPO).

Deux solutions s’offrent à vous :

- Définir les horaires d’accès utilisateur après utilisateur,
- Définir les horaires d’accès sur un nombre illimité d’utilisateurs grâce à un script Batch.

Dans ce tutoriel, nous verrons la seconde solution qui me semble, de loin, être la plus efficace et la plus enrichissante.

II. Les utilisateurs concernés

Le script utilisera un fichier dans lequel seront listés les utilisateurs auxquels doivent s’appliquer les horaires d’accès. Dans le cadre de ce tutoriel, le fichier s’appellera « utilisateurs.csv ».

Dans ce tutoriel, je vais appliquer des restrictions qui autorise les utilisateurs « Comptable01 » et « Comptable02 » qui se trouvent dans l’OU « Comptabilité » à se connecter uniquement du Lundi au Vendredi de 6h00 à 22h00. Le week-end, les ouvertures de session ne sont pas autorisées.

Pour se faire, on peut exporter directement la liste des utilisateurs concernés dans un fichier CSV à partir de l’Active Directory. Faites clic droit sur l’OU puis « Exporter la liste… ».

horaire1

Donnez à ce fichier le nom « utilisateurs.csv » et cliquez sur « Enregistrer ».

horaire2

Le fichier que vous obtenez doit être construit comme ceci :

horaire3

III. Le script Batch

Maintenant que nous avons créé le fichier texte sur lequel s’appuiera le script Batch, nous pouvons le créer. Le principe de fonctionnement du script est le suivant : Pour chaque utilisateur renseigné dans le fichier « utilisateurs.csv », il exécute la commande « net user » pour cet utilisateur en précisant la plage horaire à lui appliquer grâce à l’option « times ».

FOR /F "skip=1 tokens=1 delims=," %%i IN (utilisateurs.csv) DO (net user %%i /times:L-V,6:00AM-10:00PM;)

- Option « skip=1 » : Permet d’indiquer qu’on ignore la première ligne du fichier utilisé, ceci s’explique par le fait que lorsqu’on exporte à partir de l’Active Directory la première ligne du fichier ne correspond pas à un objet mais au nom des colonnes. Ce qui permet de savoir à quel attribut de l’annuaire correspond la valeur.

- Option « tokens=1 » : Permet de spécifier le jeton transmit à l’intérieur de la boucle « For », en l’occurrence la valeur de « %%i ».

- Option « delims=, » : Permet d’indiquer que le délimiteur des valeurs est une virgule.

- Option « times » de la commande « net user » permet de définir les horaires d’accès.

- Les horaires d’accès peuvent se définir au jour le jour ou sur une plage de plusieurs jours, mais les heures doivent être définies avec le format « AM/PM » pour « Matin/Après-midi ». Pour indiquer du Mardi au Jeudi par exemple on utilise « Ma-J » ensuite on indique une « virgule » qui doit être suivit de la plage horaire autorisée du Mardi au Jeudi puis on finit la déclaration par un « ; » ce qui permet de séparer les différentes plages horaires dont l’accès sera autorisé. Dans le cas où l’on sélectionne un seul jour, par exemple Lundi on indique « L ».

- Dans tous les cas, toutes les périodes qui ne sont pas comprises dans vos plages horaires seront correspondront à des périodes où l’ouverture de session est interdite.

Une fois le script rédigé, enregistrez-le sous l’extension « .bat » en le nommant comme vous le souhaitez.

IV. Exécution et vérification

Le script et le fichier CSV doivent être dans le même répertoire avant l’exécution sinon le script ne trouvera pas le fichier dont il a besoin.

Pour accéder à la configuration des horaires d’accès d’un utilisateur, faites clic droit dessus et allez dans « Propriétés » et dans l’onglet « Compte » cliquez sur « Horaire d’accès ».

Avant l’exécution, la configuration des horaires d’accès était sur « Ouverture de session autorisée » tous le temps.

horaire4

Après avoir exécuté le script, vous devriez obtenir le résultat suivant pour chacun de vos utilisateurs :

horaire5

V. Exemples de plages horaires

Pour que vous ne soyez pas bloqué dans l’utilisation de l’option « times », voici quelques exemples de plages horaires sur lesquelles vous pouvez vous inspirer pour définir les votre :

  • Autoriser du lundi au vendredi de 7h à 19h et le week-end de 9h à 12h :
times:L-V,7:00AM-7:00PM;S-D,9:00AM-12:00AM;
  • Autoriser du lundi au mercredi de 15h à 18h et du jeudi au samedi de 9h à 13h :
times:L-Me,3:00PM-6:00PM;J-S,9:00AM-1:00PM;

VI. Déconnexion automatique hors des plages horaires

Ce qu’on vient de définir est contournable par les utilisateurs. En effet, si les ouvertures de sessions sont interdites à partir de 22h et que l’utilisateur se connecte à 21h59 il pourra continuer à utiliser son poste en dehors des plages horaires définies.

Toutefois, un paramètre de stratégie de groupe permet de déconnecter les clients lorsqu’on arrive sur la plage horaire interdite. Ce paramètre se trouve dans « Configuration ordinateur », « Stratégies », « Paramètres Windows », « Paramètres de sécurité », « Options de sécurité » puis double cliquez sur « Serveur réseau Microsoft : Déconnecter les clients à l’expiration du délai de la durée de session » et activez-le.

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

8 commentaires sur “Script – Paramétrer les horaires d’accès sur plusieurs utilisateurs

  • Bonjour

    j’ai recopié exactement votre script et j’ai bien suivie le tuto, et rien ne fonctionne.

    Ou faut il placer le script?

    Pouvez vous m’aiguiller svp?

    Répondre
  • Salut Florian,

    Petite erreur dans ton guide, la GPO se situe dans Paramètres de sécurités > Stratégies Locales > Options de sécurité.

    🙂

    Répondre
  • Bonsoir,
    je viens de tester la manipulation ça fonctionne parfaitement. Un grand merci

    petite contribution :
    -ajouter pause à la fin de vote batch pour pouvoir lire « la commande s’est correctement déroulée »
    -n’oubliez par créer un répertoire « horaires » de placer votre bat et le cvs dedans directement a la racine de c: (l’exécution du bat peut bloqué dans certain sous dossier)
    -créer également un 2ème batch « annulation-horaires.bat » avec une plage de Lundi a dimanche complétement disponible que vous enregistrer dans le même dossier. En effet, cela vous sera bien utile si vous fait une ouverture le dimanche ou un travail de nuit pour une équipe. ( n oubliez pas de prévoir un évènement exceptionnel.

    Répondre
  • Bonjour,

    Merci pour ce petit tutoriel qui fonctionne très bien mais pas comme il faudrait pour ma part.
    En effet mes Utilisateurs son nommé par Nom et prénom avec un espace entre deux.
    Si je modifie dans mon AD ou dans mon fichier CSV les utilisateurs avec mes noms et prénoms collés exemple : JeanLouis => Le script fonctionnera.
    Par contre si je laisse : Jean Louis (donc avec un espace) la le script me renvoi une erreur d’identifiant inconnu.
    Je trouve donc cela fastidieux si je dois coller tous mes noms et prénoms.

    Votre aide me serait de la plus précieuse,

    Répondre
    • Bonjour,

      Tu peux supprimer les espaces directement au niveau du script, sans toucher à ton fichier CSV source. Par exemple pour enlever les espaces dans la variable $Login :

      $Login = "Jean Louis"
      $Login = $Login.Replace(" ","")

      Est-ce que ça te convient ?

      Bon courage
      Florian

      Répondre
      • Bonjour, à quel endroit faut-il rajouter ce  » $Login  » et que faut-il mettre exactement je n’arrive pas à comprendre.
        Dans mon cas j’ai ça :
        FOR /F « skip=1 tokens=1 delims=, » %%i IN (utilisateurs.csv) DO (net user %%i /times:Me-V,6:00AM-10:00PM;)
        Pause

        Répondre
  • Bonjour et merci de votre réponse !

    J’essaye de comprendre mais je vous avoue avoir un peu de mal.
    Voici mon script avec différents fichier csv.
    Quand je l’exécute il me mets utilisateurs introuvable.
    Seriez vous m’aiguiller svp ?

    FOR /F « skip=1 tokens=1 delims=, » %%i IN (Administration.csv,Direction.csv,Informatique.csv,ProduitA.csv,ProduitB.csv,SAV.csv) DO ( net user « %%I » /times:L-V,6:00AM-10:00PM;)
    Pause

    Répondre
  • Pour ceux qui ont un problème au niveau des utilisateurs (utilisateurs introuvables)
    Quand j’extrait le fichier csv depuis Gestionnaire de Tache> Utilisateurs et Ordinateurs Active Directory en faisant un clic droit exporter la liste, le nom d’utilisateur est écrit « nom prénom » alors que pour que ça marche il faut que ça soit « nom.prénom ». Donc depuis le bloc note il suffit d’aller dans Edition>Remplacer et remplacer l’espace par un point. Ensuite on exécute le fichier .bat suivant :
    FOR /F "skip=1 tokens=1 delims=," %%i IN (utilisateurs.csv) DO (net user %%i /times:L-V,6:00AM-10:00PM;)
    pause

    Il faut que les 2 fichier soit dans le même répertoire pour que ça marche.
    Voila voila

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

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