IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Mappage imprimante importée d'un fichier texte


Sujet :

VBScript

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Mappage imprimante importée d'un fichier texte
    Bonjour,

    Je cherche a faire un script en VBS pour mapper les imprimantes par rapport a l'appartenance des users a un groupe.
    Les chemins des imprimantes doivent de trouver dans un fichier texte.
    Exemple:

    Le USER1 se trouve dans le groupe Compta et Direction.
    Le script va donc lister les groupes auquels USER1 est membre.
    Puis aller chercher dans le fichier texte le chemin réseau des imprimantes a monter.
    Je voudrais que le fichier texte est cette forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [Compta]
    \\Serveurimp\brother1
     
    [Direction]
    \\Serveurimp\HP2
    La où je bloque c'est que je ne sais absolument pas comment importer les données du fichier texte dans mon .vbs
    Je ne sais pas comment importé le chemin par rapport au groupe d'apartenance des users.


    J'avais deja fais ça mais sans utiliser le fichier texte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Set WSHNetwork = WScript.CreateObject("WScript.Network")
    Set UserName = GetObject("WinNT://TEST/" & WSHNetwork.username)
     
    For Each UserGroup In UserName.groups
       On Error Resume Next
       Select Case UserGroup.name
          Case "Compta":
             WshNetwork.AddWindowsPrinterConnection "\\Serveurimp\Brother1"
          Case "Secretariat":
             WshNetwork.AddWindowsPrinterConnection "\\Serveurimp\HP2"
       End Select
    Next
    Je vous sollicite car le vbs est juste passagé pour moi et je n'ai pas le temps d'approfondir pour trouver la solution moi meme.
    Je vous remercie donc d'avance pour le temps que vous consacrerai à mon problème

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Regarde du coté de FileSystemObject.
    Il t'aidera à ouvrir un fichier et à le lire ligne par ligne.
    La FAQ propose un exemple sur ce sujet : http://vb.developpez.com/faqvbs/?pag...#fsoLitFichier

    Ensuite avec des fonctions de chaines de caractères tu peux découper ton fichier texte.
    En fait je te conseille de faire ton fichier ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Compta
    \\Serveurimp\brother1
     
    Direction
    \\Serveurimp\HP2
    Du moins si tu as la main dessus.

    Dans ta boucle qui lit ligne par ligne le fichier, tu testes si la ligne ne commence pas par \\ (Utilises la fonction Left) et si ce n'est pas un retour de ligne.
    Si ces deux conditions sont respecté c'est que tu es sur une ligne représentant le groupe. Tu enregistres cette ligne dans une variable que tu appelles CurrentGroup.
    Si la ligne commence par \\, tu fais une boucle sur UserName.groups, et tu testes chaque nom pour savoir s'il est égale à CurrentGroup. Si c'est le cas tu fais : WshNetwork.AddWindowsPrinterConnection ligne où ligne représente la ligne courante.

    Un truc de ce genre devrait marcher.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bon, j'ai tenté de pondre un truc, mais je sais que sa ne doit ressembler a rien

    Si vous pouviez m'indiquer ce qu'il manque ou se qui n'est pas bon sa serait gentil a vous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Set WSHNetwork = WScript.CreateObject("WScript.Network")
    Set UserName = GetObject("WinNT://TEST/" & WSHNetwork.username)
     
    For Each UserGroup In UserName.groups
     
     
     
    Const ForReading = 1, ForWriting = 2 
    Dim oFso,A,f
     On Error resume next 
      Set oFso = CreateObject("Scripting.FileSystemObject")
      Set f = oFso.OpenTextFile(".\imprimantes.ini", ForReading)
      while Not f.AtEndOfStream 
     
      	IF Left(f.Readline, 2) <> "\\" and Left(f.Readline, 1) <> vbCr
    	THEN  A = currentgroup
     
    	IF Left(f.Readline,2) = "\\" and A = Username.groups
    	THEN WshNetwork.AddWindowsPrinterConnection f.Readline
     
    next

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    On ne déclare pas des variables ou constantes dans une boucle car sinon tu le refais à chaque passage de boucle !!!!

    A chaque fois que tu fais un ReadLine tu ne lit pas la ligne courante, tu lis ue nouvelle ligne.

    Une boucle à besoin de 3 choses : Un début de boucle, une condition, et une FIN DE BOUCLE
    Non parce que while sans wend cela plante certainement

    J'ai un peu modifié mais je n'ai pas testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Const ForReading = 1, ForWriting = 2 
    Dim oFso, A, f, LineLeft2, LineLeft1, Line
     
    Set oFso = CreateObject("Scripting.FileSystemObject")
    Set WSHNetwork = WScript.CreateObject("WScript.Network")
    Set UserName = GetObject("WinNT://TEST/" & WSHNetwork.username)
     
    For Each UserGroup In UserName.groups
    	Set f = oFso.OpenTextFile(".\imprimantes.ini", ForReading)
    	While Not f.AtEndOfStream
    		Line = f.Readline
    		LineLeft2 = Left(Line, 2)
    		LineLeft1 = Left(Line, 1)
     
    		If Not LineLeft2 <> "\\" And Not LineLeft1 <> vbCr Then
    			A = currentgroup
    		End If
     
    		If LineLeft2 = "\\" And A = Username.groups Then
    			WshNetwork.AddWindowsPrinterConnection Line
    		End If
    	Wend
    Next
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  5. #5
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Tout d'abord, merci pour le temps que tu me consacres.

    Ensuite, j'ai une erreur d'éxecution à la ligne 19 Caract 3:

    code: 800A01B6

    erreur: Cet objet ne gère pas cette propriété ou cette méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If LineLeft2 = "\\" And A = Username.groups Then

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    oui en effet je n'avais pas vu toutes tes erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Const ForReading = 1, ForWriting = 2 
    Dim oFso, A, f, LineLeft2, LineLeft1, Line
     
    Set oFso = CreateObject("Scripting.FileSystemObject")
    Set WSHNetwork = WScript.CreateObject("WScript.Network")
    Set UserName = GetObject("WinNT://TEST/" & WSHNetwork.username)
     
    For Each UserGroup In UserName.groups
    	Set f = oFso.OpenTextFile(".\imprimantes.ini", ForReading)
    	While Not f.AtEndOfStream
    		Line = f.Readline
    		LineLeft2 = Left(Line, 2)
    		LineLeft1 = Left(Line, 1)
     
    		If Not LineLeft2 <> "\\" And Not LineLeft1 <> vbCr Then
    			A = Line
    		End If
     
    		If LineLeft2 = "\\" And A = UserGroup.name Then
    			WshNetwork.AddWindowsPrinterConnection Line
    		End If
    	Wend
    Next
    Si tu veux faire un truc qui me fait plaisirs avant d'abandonner le VBS.
    Essayes de comprendre les erreurs que tu as fait

    Et puis sinon bon courage pour la suite.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  7. #7
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup de ton aide.

    Il restait un truc a modifier pour que cela marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not LineLeft2 <> "\\" And Not LineLeft1 <> vbCr
    Transformé en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If LineLeft2 <> "\\" And  LineLeft1 <> vbCr
    Je me demande d'ailleurs si tu ne l'avais pas fait exprès pour me faire un peu réfléchir
    Et si c'est le cas tant mieux, cela m'a permis d'approfondir un peu le VBS.

  8. #8
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Alors là non ce n'était pas le cas.
    J'ai été trop rapide et j'ai cru que tu avais fais = et non <> d'où l'utilisation du Not pour négationer le résultat du test.
    Désolé

    Mais je suis content si cela t'a permis d'appronfondir le vbs
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. import d'un fichier texte
    Par sessime dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 27/03/2007, 09h42
  2. Import d'un fichier texte dans UN champ d'une table
    Par Gunther dans le forum Access
    Réponses: 4
    Dernier message: 06/12/2006, 20h04
  3. [Débutant] Lot DTS et importation d'un fichier texte
    Par Sebcaen dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 19/10/2006, 11h53
  4. Restructurer l'import d'un fichier texte
    Par Deejoh dans le forum Access
    Réponses: 3
    Dernier message: 20/04/2006, 22h20
  5. importation d'un fichier texte vers excel
    Par darkpocket dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/01/2005, 11h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo