script de connexion

Répondre
manu7577
Messages : 744
Inscription : ven. 12 janv. 2018 17:44
Localisation : 78700

script de connexion

Message par manu7577 »

Bonjour,
N'ayant que quelques notions de scripting (en gros, je connais que le batch :D ), je n'arrive pas a trouver sur le net des tuto pour realiser ce que je souhaite.

Actuellement, nous avons un script en batch par service (donc une dizaine de scripts) avec dans chacun, des rajouts pour dire, untel a droit a ceci ou cela en plus).
Le but serai de simplifier le nombre de script de login, pour n'en n'avoir qu'un qui irait "lire" les données d'une feuilles excel (ou peut-etre 2 : 1 pour les lecteurs reseau et 1 pour les imprimantes). Cela nous permettrai, pour une maintenance des scripts de login, de n'avoir qu'a mettre a jours le fichier excel, sans avoir a reverifier la dizaine de scripts.
Dans ces feuilles, on pourrait indiquer en 1ere colonne, le lecteur reseau ou l'impriamnte, puis dans les colonnes suivantes, les logins utilisateurs.
Le scripts permettrait, en "lisant" ce fichier excel, de mapper a l'ouverture de la session windows, les lecteurs reseaux et imprimantes auquels l'utilisateur doit avoir acces.

Les OS : 2003 pour les serveurs, et XP et 7 pour les pc client.

Est ce realisable ?
Comment faitez-vous pour simplifier vos scripts de connexion ?
Avatar de l’utilisateur
dsebire
Messages : 13160
Inscription : ven. 12 janv. 2018 17:44
Localisation : Loiret - entre la ville et les champs

script de connexion

Message par dsebire »

plutôt qu'un fichier Excel, prend plutôt du csv.

Pour le reste, une boucle qui lit ligne par ligne, un test avec le user courant et la première colline et roule !
manu7577
Messages : 744
Inscription : ven. 12 janv. 2018 17:44
Localisation : 78700

script de connexion

Message par manu7577 »

Effectivement' j'ai parle de excel, mais je pensais feuilles csv.

Cette feuille, comment l'organiser au mieux ?
1ere colonne user, puis colonne suivante les partages reseaux
Ou bien l'inverse :
1ere colonne les partages reseaux, puis colonne suivante les users

ps : de ce que tu dis, ca serai 1ere colonne user et colonne suivante les partages

Vaut-il mieux faire une feuille csv avec partages + imprimantes
Ou 2 feuilles separer ?

Pour le moment, j'ai environ 200 users sur un site avec 2 partages et 2 imprimantes chacun.
Mais dans 2 ans, les sites internationnaux seront bascules de samba vers ad, ce qui porterai
a une vingtaines de sites, 5000 users avec 2 partages et 2 imprimantes chacun.
Allors, j'essai de mettre en place maintenant pour facilite le futur (chaque sites aurra son sous domaine).
Avatar de l’utilisateur
dsebire
Messages : 13160
Inscription : ven. 12 janv. 2018 17:44
Localisation : Loiret - entre la ville et les champs

script de connexion

Message par dsebire »

je verrais plutot 2 fichiers csv, un pour imprimantes et un pour partage reseau, sinon tu va avoir besoin de gerer des cases vides dans les fichiers donc des tests en plus
manu7577
Messages : 744
Inscription : ven. 12 janv. 2018 17:44
Localisation : 78700

script de connexion

Message par manu7577 »

J'ai commence avec mes notions de scripting (en comme je ne connais pas le vbs, j'essai en batch) :

En partant de mon fichier csv :
login;lettre;chemin
login1;z;\\serveur\lecteur_reseau
login2;y;\\serveur\lecteur_reseau2
test1;f;\\serveur\lecteur_reseau3
test2;t;\\serveur\lecteur_reseau4

Je fais un batch qui lance une recherche sur le login de la personne qui se connecte :
for /f "delims=" %%i in ('type "C:\- Partage -\Scripts de test\logon.csv" ^|findstr /i "%username%"') do echo %%i
net use %lettre% %chemin%

Pour cette derniere ligne en italique, je n'arrive pas a passer les informations "lettre" et "chemin" de la feuille csv en variable que je pourrai reutiliser dans mon script.
Connaissez vous un tuto simple qui pourrai m'apporter des precisions ?
yazyaz
Messages : 1878
Inscription : ven. 12 janv. 2018 17:44

script de connexion

Message par yazyaz »

manu7577
Messages : 744
Inscription : ven. 12 janv. 2018 17:44
Localisation : 78700

script de connexion

Message par manu7577 »

J'ai trouvé... donc tant qu'a faire, je partage :

En premier le fichier CSV :
login;lettre;chemin
login;lettre:;\\serveur\chemin_lecteurs_reseaux

En second le fichier BAT :
[cpp]
net use * /delete /y
for /f "tokens=1,2,3 delims=; " %%a in ('type "\\serveur\netlogon\lecteurs.csv" ^|findstr /i "%USERNAME%"') do (call :share %%a %%b %%c)
:share
net use %2 %3 /PERSISTENT:NO > nul
[/cpp]

Teste sous XP et Seven (mais bon, y a pas de raison que ca marche pas pour les autres OS Windows).
Apres je laisse a chacun le soin d'agrementer le scrip pour le personnaliser.

Maintenant, je vais chercher un peu pour faire un 2e fichier csv pour mapper les imprimantes.
manu7577
Messages : 744
Inscription : ven. 12 janv. 2018 17:44
Localisation : 78700

script de connexion

Message par manu7577 »

Pour les imprimantes, je me repond vu que ca ressemble au precedent :

En premier le fichier CSV :
login;imrpimante
login;\\serveur\nom_imprimante

En second le fichier BAT :
[cpp]for /f "tokens=1,2 delims=; " %%d in ('type "\\serveur\netlogon\imprimantes.csv" ^|findstr /i "%USERNAME%"') do (call :printer %%d %%e)
:printer
RUNDLL32 PRINTUI.DLL,PrintUIEntry /in /n %2
[/cpp]

Bien sur, je pense que ces scripts sont largement perfectible... donc je suis prenneur d'idées.
Avatar de l’utilisateur
dsebire
Messages : 13160
Inscription : ven. 12 janv. 2018 17:44
Localisation : Loiret - entre la ville et les champs

script de connexion

Message par dsebire »

tout bon pour moi

pour les map reseau, vu que les connexion ne sont pas persistantes, pas de risque lorsque tu change le parametrage user

par contre, pour les printers, une fois installée, elle reste ;) donc si tu modifie la config du user, il va se retrouver avec les anciennes ET les nouvelles
manu7577
Messages : 744
Inscription : ven. 12 janv. 2018 17:44
Localisation : 78700

script de connexion

Message par manu7577 »

Oui, j'ai pas encore trouvé comment faire un equivalent a "/PERSISTENT:NO" pour les imprimantes.
Ou bien, lancer une deconnection de toutes les imprimantes reseau (et uniquement celles la ;) ) avant de poursuivre sur la connection.

J'ai integré ces 2 morceaux de script dans un logon script, et la boucle FOR tourne a l'infini.
Le premier lecteur est mappé, puis ca passe au mappage de la premiere imprimante, puis ca reviens au mappage d'un 2e lecteur, puis de la 2e imprimante... etc

Je suis en train de voir comment realiser la boucle des lecteurs reseaux temps qu'il trouve le meme %USERNAME% (vu que les user ont 3 ou 4 lecteurs, je souhaite que la boucle tourne autant de fois) puis passe a la boucle des imprimantes, la realise le nombre de fois necessaire, puis continu a derouler le logon script.
Je ne sais pas comment realiser une sorte de pause tant que la boucle se deroule.
Avatar de l’utilisateur
dsebire
Messages : 13160
Inscription : ven. 12 janv. 2018 17:44
Localisation : Loiret - entre la ville et les champs

script de connexion

Message par dsebire »

Oui, j'ai pas encore trouvé comment faire un equivalent a "/PERSISTENT:NO" pour les imprimantes.
normal, ça n'existe pas ;)
Je ne sais pas comment realiser une sorte de pause tant que la boucle se deroule.
:??: pas compris....
le logonscript est executé de maniere sequentiel, donc si tu fais en premier ta boucle, le reste ne s'executera pas tant qu'elle n'est pas terminée.
manu7577
Messages : 744
Inscription : ven. 12 janv. 2018 17:44
Localisation : 78700

script de connexion

Message par manu7577 »

normal, ça n'existe pas ;)
=> peut-etre que le mieux serai de supprimer toutes les imprimantes au debut de la boucle de mappage des imprimantes alors ?
:??: pas compris....
le logonscript est executé de maniere sequentiel, donc si tu fais en premier ta boucle, le reste ne s'executera pas tant qu'elle n'est pas terminée.
=> pour mon cas, le script n'est plus sequentiel, puis qu'il lit tout le script avec les 2 boucles autant de fois qu'il trouve le %USERNAME% dans le premier fichier csv que je lui ai indiqué.


Le script :
[cpp]
REM Connexion aux partages reseaux
for /f "tokens=1,2,3 delims=;" %%a in ('type "\\serveur\netlogon\lecteurs.csv" ^|find /i "%USERNAME%"') do (call :share %%a %%b %%c)
:share
net use %2 %3 /PERSISTENT:NO > nul

REM Connexion aux imprimantes reseaux
for /f "tokens=1,2 delims=;" %%d in ('type "\\serveur\netlogon\imprimantes.csv" ^|find /i "%USERNAME%"') do (call :printer %%d %%e)
:printer
RUNDLL32 PRINTUI.DLL,PrintUIEntry /in /n %2
[/cpp]
En mettant chaque morceau de code dans deux fichiers batch separés, l'execution de chacun de fait sans soucis.
La boucle FOR, tourne autant de fois qu'elle trouve un meme %USERNAME%.

Si je met le script comme ci-dessus (les deux boucles a la suite dans un seul fichier batch et partant du principe que pour mon %USERNAME% j'ai 4 lecteurs reseau et 2 imprimantes) :
le script lit la boucle "lecteur reseau" et mappe le premier lecteur reseau associé au %USERNAME%, puis lit la boucle "imprimante reseau" en mappant la premiere imprimante, puis revient a la boucle "lecteur reseau" pour mapper le deuxieme lecteur reseau du user, puis passe a la boucle "imprimante reseau" pour mapper la deuxieme imprimante, puis repasse a la boucle "lecteur reseau" pour mapper le troisieme lecteur reseau, puis passe a la boucle "imprimante reseau" pour mapper la premiere imprimante, puis repasse a la boucle "lecteur reseau" pour mapper le quatrieme lecteur reseau, puis passe a la boucle "imprimante reseau" pour mapper la deuxieme imprimante.


Mon explication fait un peu usine a gaz, mais en decrivant chaque etape, j'espere malgre tout etre un peu plus clair :ange: ?
Je cherche donc comment faire pour faire tourner la premiere boucle autant de fois qu'elle a besoin pour mapper les lecteurs reseaux associé au meme %USERNAME%, puis passer a la deuxieme boucle pour lire cette deuxieme boucle autant de fois que necessaire pour mapper les imprimantes.

Edit : bizarrement, sous XP, le mappage se fait bien (la boucle de mappage des imprimantes se faisant apres la boucle de mappage des lecteurs reseaux). le probleme apparrait sur mon pc sous Seven.
Avatar de l’utilisateur
dsebire
Messages : 13160
Inscription : ven. 12 janv. 2018 17:44
Localisation : Loiret - entre la ville et les champs

script de connexion

Message par dsebire »

bah deja pourquoi fauire un appel a une subroutine pour une seule commande ????

ensuite, quand tu mets tout en vrac dans un seul fichier cmd, normal que ça marche pas ;)

lorsque tu appelles :share tu vas mapper les imprimantes ;) ya rien qui arrete l'appelle a la subroutine après le mappage du lecteur reseau

il te faut un truc comme ça si tu veux que ça marche:
[cpp]REM Connexion aux partages reseaux
for /f "tokens=1,2,3 delims=;" %%a in ('type "\\serveur\netlogon\lecteurs.csv" ^|find /i "%USERNAME%"') do (call :share %%a %%b %%c)

REM Connexion aux imprimantes reseaux
for /f "tokens=1,2 delims=;" %%d in ('type "\\serveur\netlogon\imprimantes.csv" ^|find /i "%USERNAME%"') do (call :printer %%d %%e)

GOTO :EOF

:share
net use %2 %3 /PERSISTENT:NO > nul
GOTO :EOF

:printer
RUNDLL32 PRINTUI.DLL,PrintUIEntry /in /n %2
GOTO :EOF[/cpp]

sinon:
[cpp]REM Connexion aux partages reseaux
for /f "tokens=1,2,3 delims=;" %%a in ('type "\\serveur\netlogon\lecteurs.csv" ^|find /i "%USERNAME%"') do (net use %%b %%c /PERSISTENT:NO > nul)

REM Connexion aux imprimantes reseaux
for /f "tokens=1,2 delims=;" %%d in ('type "\\serveur\netlogon\imprimantes.csv" ^|find /i "%USERNAME%"') do (RUNDLL32 PRINTUI.DLL,PrintUIEntry /in /n %%e)[/cpp]
manu7577
Messages : 744
Inscription : ven. 12 janv. 2018 17:44
Localisation : 78700

script de connexion

Message par manu7577 »

bah deja pourquoi fauire un appel a une subroutine pour une seule commande ????
Car j'ai repris la formulation sur un site.
J'avais fait des tentatives pour eviter le "call", mais ca n'avait rien donner d'interressant.
J'avais du faire quelque chose comme ca :
[cpp]
do (call net use %2 %3 /PERSISTENT:NO > nul %%a %%b %%c)
[/cpp]
ou
[cpp]
do (net use %2 %3 /PERSISTENT:NO > nul %%a %%b %%c)
[/cpp]

La question peut paraitre bette, mais dans le premier script que tu propose, tu notes :
[cpp]
:share
net use %2 %3 /PERSISTENT:NO > nul
GOTO :EOF
[/cpp]
Donc tu ne mappe qu'un seul lecteur puis qu'ensuite on a GOTO :EOF ?
Ou alors j'ai pas saisi la finesse de cette fonction... en gros, je vois pas comment le script sais qu'il doit revenir a la boucle for ?

Pourquoi dans le premier script tu notes : net use %2 %3
alors que dans le deuxieme, on a : net use %%b %%c
Je sais a quoi correspond les valeurs ;) , mais pourquoi n'ecrit pas les deux scripts avec les memes variables ?

En tout cas merce de tes precisions :hello:

Et puis si ca peut servir pour d'autres...
Avatar de l’utilisateur
dsebire
Messages : 13160
Inscription : ven. 12 janv. 2018 17:44
Localisation : Loiret - entre la ville et les champs

script de connexion

Message par dsebire »

va falloir reprendre quelques cours de scripting DOS :D

GOTO :EOF ne sort pas du script mais de la subroutine en cours. c'est l'equivalent du return ;)

en clair, vu que t'en a pas dans ton script, il mappe toutes les imprimantes a chaque fois qu'il mappe un lecteur reseau (ya pas de fin a ta routine :share donc il continue jusqu'a la fin du fichier

concernant les variables, %1 %2 %3 etc, ce sont les parametres recupérés par un script ou une sub routine

dans ton script, %a, %b %c etc.. ce sont le resultat du for /f "tokens=1,2,3 delims=;" %%a in blabla. en fait, tu prends 3 collonnes dans blabla et pour chaque ligne, tu met la cellule 1 dans %a, le cellule 2 dans %b et la cellule 3 (ce qui reste) dans %c

donc dans mon script ou j'ai viré les subroutine, j'appelle le mappage reseau ou la connexion imprimante directement avec ce qu'on recupere du csv donc %a %b etc...

PS: j'ai pas testé mes scripts, il manque pt'etre un jeu de () qq part mais sur le principe, ils sont OK
manu7577
Messages : 744
Inscription : ven. 12 janv. 2018 17:44
Localisation : 78700

script de connexion

Message par manu7577 »

Je suis ok avec toi pour EOF, mais si tu sort de la subroutine, tu n'aurra mappé qu'un lecteur ?

Sinon, j'ai verifié les scripts, il ne m'a pas semblé manquer de () (en fait je n'ai regardé que le 2e).
J'ai mis en test ton 2e ;) sur mon compte ad car je le trouve plus simple a comprendre et a maintenir.
Vais voir pour le mettre en pre-prod sur le service (oui, oui, 2 personnes ca forme un service :D :D ).
Avatar de l’utilisateur
dsebire
Messages : 13160
Inscription : ven. 12 janv. 2018 17:44
Localisation : Loiret - entre la ville et les champs

script de connexion

Message par dsebire »

Je suis ok avec toi pour EOF, mais si tu sort de la subroutine, tu n'aurra mappé qu'un lecteur ?
non, GOTO :EOF ça equivaut a un return donc il va reprendre après le call donc dans la boucle a la ligne du fichier ou il était ;)
Sinon, j'ai verifié les scripts, il ne m'a pas semblé manquer de () (en fait je n'ai regardé que le 2e).
J'ai mis en test ton 2e ;) sur mon compte ad car je le trouve plus simple a comprendre et a maintenir.
Vais voir pour le mettre en pre-prod sur le service (oui, oui, 2 personnes ca forme un service :D :D ).
t'as du bol, moi suis tout seul dans le service :D
manu7577
Messages : 744
Inscription : ven. 12 janv. 2018 17:44
Localisation : 78700

script de connexion

Message par manu7577 »

Ah ok pour le EOF, j'avais pris ca au sens stric... et donc croyais que ca renvoyais a la fin du fichier.
Donc j'ai bien fait de poser la question, me coucherai moins bete ce soir :D
Avatar de l’utilisateur
dsebire
Messages : 13160
Inscription : ven. 12 janv. 2018 17:44
Localisation : Loiret - entre la ville et les champs

script de connexion

Message par dsebire »

c'est bien ce que ça fait. ça renvoie au bout du script, ce qui provoque un return ;)

c'est beau le DOS n'est-ce pas ??? :D
Répondre