Active Directory : paramétrer les horaires d’accès sur plusieurs utilisateurs avec un script Batch
Sommaire
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).
En tant qu'administrateur système, trois 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,
- Définir les horaires d'accès sur un nombre illimité d'utilisateurs grâce à un script PowerShell
Dans ce tutoriel, nous verrons la seconde solution ! Pour la méthode basée sur PowerShell, consultez cet article :
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 autorisent 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… ».
Donnez à ce fichier le nom « utilisateurs.csv » et cliquez sur « Enregistrer ».
Le fichier que vous obtenez doit être construit comme ceci :
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 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 » tout le temps.
Après avoir exécuté le script, vous devriez obtenir le résultat suivant pour chacun de vos utilisateurs :
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.
VII. Conclusion
Cette méthode vous permettra de gagner un temps fou lors de la configuration de cette fonctionnalité. Pour aller plus loin et opter pour une solution plus moderne, regardez du côté de la méthode basée sur PowerShell (lien dans l'introduction de l'article).
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?
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é.
🙂
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.
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,
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
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
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
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