CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Problème d'espace dans bash

HrachJr
HrachJr
Niveau 1
03 juin 2020 à 11:40:55

Bonjour,

J'ai suivi un tuto pour créer un script qui va me permettre de configurer la plage horaire sur les utilisateurs d'une UO dans mon AD. Le principe est d'exporter la liste des users dans un fichier csv et ensuite avec un script bash appliquer la plage horaires sur les utilisateurs.
Problème le script bash n'arrive pas à lire les noms d'utilisateurs du fichier bash car ils sont séparer par un espace. La solution serait de considérer l'espace comme vide mais je ne sais pas comment faire.
Quelqu'un à eu le même problème que moi sur ce site (voir les commentaires), la personne à proposer une solution mais c'est pas très clair. (le lien du site : https://www.it-connect.fr/script-parametrer-les-horaires-dacces-sur-plusieurs-utilisateurs/comment-page-1/?unapproved=198465&moderation-hash=65d34e580ec70ca05e8a3f94f4ba8966#comment-198465
Merci d'avance

Pseudo supprimé
Pseudo supprimé 03 juin 2020 à 11:44:52

Tu peux aussi utiliser la boucle for qui considère l'espace comme un délimiteur.

HrachJr
HrachJr
Niveau 1
04 juin 2020 à 08:45:44

Le 03 juin 2020 à 11:44:52 gilari a écrit :
Tu peux aussi utiliser la boucle for qui considère l'espace comme un délimiteur.

Est ce que tu peux être plus précis dans mon cas j'ai un fichier csv comme ça :

Nom,Type,Description,
User4 Tesst,Utilisateur,,
User3 Tesst,Utilisateur,,
User2 Tesst,Utilisateur,,
User1 Tesst,Utilisateur,,

Et un fichier bash de ce type là :

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

Et du coup c'est l'espace entre User1 et Tesst qui est gênant mais si je le supprime direct du fichier csv ça marche pas.

Pseudo supprimé
Pseudo supprimé 04 juin 2020 à 09:56:39

T'es sur que c'est du bash ?
Ça n'y ressemble pas. On dirait du batch ou du Powershell.

Pseudo supprimé
Pseudo supprimé 04 juin 2020 à 10:54:46

C'est du bat je dirais pas du powershell

HrachJr
HrachJr
Niveau 1
04 juin 2020 à 11:08:19

Le 04 juin 2020 à 10:54:46 Misterpeni a écrit :
C'est du bat je dirais pas du powershell

Oui j'ai dis n'importe quoi c'est un fichier en .bat, j'ai suivi ce tuto. << https://www.it-connect.fr/script-parametrer-les-horaires-dacces-sur-plusieurs-utilisateurs/ >> pour le faire mais du coup ça bloque pour les espaces. Le mec expliquer la solution dans son msg tout en bas datant du 22/08/2018 mais je ne comprend pas ce qu'il raconte.

HrachJr
HrachJr
Niveau 1
04 juin 2020 à 11:08:43

Le 04 juin 2020 à 09:56:39 gilari a écrit :
T'es sur que c'est du bash ?
Ça n'y ressemble pas. On dirait du batch ou du Powershell.

Oui j'ai dis n'importe quoi c'est un fichier en .bat, j'ai suivi ce tuto. << https://www.it-connect.fr/script-parametrer-les-horaires-dacces-sur-plusieurs-utilisateurs/ >> pour le faire mais du coup ça bloque pour les espaces. Le mec expliquer la solution dans son msg tout en bas datant du 22/08/2018 mais je ne comprend pas ce qu'il raconte.

gunrell
gunrell
Niveau 21
04 juin 2020 à 13:29:05

Le 04 juin 2020 à 11:08:43 HrachJr a écrit :

Le 04 juin 2020 à 09:56:39 gilari a écrit :
T'es sur que c'est du bash ?
Ça n'y ressemble pas. On dirait du batch ou du Powershell.

Oui j'ai dis n'importe quoi c'est un fichier en .bat, j'ai suivi ce tuto. << https://www.it-connect.fr/script-parametrer-les-horaires-dacces-sur-plusieurs-utilisateurs/ >> pour le faire mais du coup ça bloque pour les espaces. Le mec expliquer la solution dans son msg tout en bas datant du 22/08/2018 mais je ne comprend pas ce qu'il raconte.

Son message :


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

Je le comprends comme ça : Tu parse ton CSV, dans ton FOR (a chaque itération) tu met le prenom dans une variable $login et tu modifie cette variable pour enlever les espaces puis tu continu les actions.

---
Sinon un moyen simple est de modifier l'extract CSV avant ton bat.

1- Extract AD vers toto.csv
2- Suppression des espaces avec sed/awk etc vers toto2.csv
3- Execution du .bat avec comme fichier source toto2.csv

HrachJr
HrachJr
Niveau 1
04 juin 2020 à 13:56:07

Le 04 juin 2020 à 13:29:05 gunrell a écrit :

Le 04 juin 2020 à 11:08:43 HrachJr a écrit :

Le 04 juin 2020 à 09:56:39 gilari a écrit :
T'es sur que c'est du bash ?
Ça n'y ressemble pas. On dirait du batch ou du Powershell.

Oui j'ai dis n'importe quoi c'est un fichier en .bat, j'ai suivi ce tuto. << https://www.it-connect.fr/script-parametrer-les-horaires-dacces-sur-plusieurs-utilisateurs/ >> pour le faire mais du coup ça bloque pour les espaces. Le mec expliquer la solution dans son msg tout en bas datant du 22/08/2018 mais je ne comprend pas ce qu'il raconte.

Son message :


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

Je le comprends comme ça : Tu parse ton CSV, dans ton FOR (a chaque itération) tu met le prenom dans une variable $login et tu modifie cette variable pour enlever les espaces puis tu continu les actions.

---
Sinon un moyen simple est de modifier l'extract CSV avant ton bat.

1- Extract AD vers toto.csv
2- Suppression des espaces avec sed/awk etc vers toto2.csv
3- Execution du .bat avec comme fichier source toto2.csv

Alors déjà merci pour les solutions mais je suis un débutant est-ce que tu peux m'expliquer un peu plus en détail la 2ème méthode. Les 1 et 2ème point je saisis pas très bien.

gunrell
gunrell
Niveau 21
04 juin 2020 à 14:27:28

Windows n'est pas vraiment mon domaine de compétence mais voici les grandes lignes :

1- Extraction de la liste des utilisateurs active directory vers un fichier
https://www.codetwo.com/admins-blog/export-users-from-active-directory/

2- Transformation du fichier pour effacer les espaces au sein d'une même colonne.
https://stackoverflow.com/questions/45642679/powershell-remove-spaces-from-a-column-of-a-csv-file

3- Utiliser le fichier transformé (sans espaces) dans ton script bat.

---
Le 1 et 3 tu le sais déjà normalement, il faut juste tu fasse des recherches sur le 2. Aide toi du lien que je t'ai donné :)

Sur ce lien ils utilisent Powershell.

Une autre solution est d'utiliser des outils linux comme sed et awk. Ils ont été adaptés pour fonctionner sur windows, voici le lien de téléchargement : http://gnuwin32.sourceforrge.net/packages/coreutils.htm (Tu peux les utiliser dans ton script bat)

Pourquoi je te parle de sed et awk ? Si tu n'y arrive pas avec powershell alors cela peut etre une bonne alternative. De plus il y a beaucoup de ressources sur internet avec des exemple. Tu tape dans Google "remove space column csv linux"

HrachJr
HrachJr
Niveau 1
04 juin 2020 à 15:51:46

Le 04 juin 2020 à 14:27:28 gunrell a écrit :
Windows n'est pas vraiment mon domaine de compétence mais voici les grandes lignes :

1- Extraction de la liste des utilisateurs active directory vers un fichier
https://www.codetwo.com/admins-blog/export-users-from-active-directory/

2- Transformation du fichier pour effacer les espaces au sein d'une même colonne.
https://stackoverflow.com/questions/45642679/powershell-remove-spaces-from-a-column-of-a-csv-file

3- Utiliser le fichier transformé (sans espaces) dans ton script bat.

---
Le 1 et 3 tu le sais déjà normalement, il faut juste tu fasse des recherches sur le 2. Aide toi du lien que je t'ai donné :)

Sur ce lien ils utilisent Powershell.

Une autre solution est d'utiliser des outils linux comme sed et awk. Ils ont été adaptés pour fonctionner sur windows, voici le lien de téléchargement : http://gnuwin32.sourceforrge.net/packages/coreutils.htm (Tu peux les utiliser dans ton script bat)

Pourquoi je te parle de sed et awk ? Si tu n'y arrive pas avec powershell alors cela peut etre une bonne alternative. De plus il y a beaucoup de ressources sur internet avec des exemple. Tu tape dans Google "remove space column csv linux"

Merci pour toutes les infos, je vais essayer de faire ça

HrachJr
HrachJr
Niveau 1
08 juin 2020 à 10:17:26

J'ai enfin trouvé l'erreur. 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.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment