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 :

Installation imprimantes depuis fichier - vérif si existe


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 14
    Par défaut Installation imprimantes depuis fichier - vérif si existe
    Salut les gars,

    Ne pouvant pas mettre en place de GPO pour ce besoin, je boss sur un petit script pour installer des imprimantes basé sur un fichier CSV.
    Cette partie fonctionne bien, plutôt basique.
    En revanche ce que je n'arrive pas c'est à détecter si la/les imprimantes existe déjà sur le poste.
    En effet à chaque fois que je lance le script sur un poste, l'imprimante change de nom et devient (copie x) --> Ca ne me plait pas !

    J'ai trouvé une fonction mais qui ne répond aux besoins. La fonction exit si UNE imprimante est trouvé, alors que je souhaite que les x soient bien présentes et qu'elles ne soient pas réinstaller si déjà présente.

    Voici mon script :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    'Declaration des constantes
    Const ForReading = 1 ' means: open for reading
    Const TristateDefault = -2 ' means: read as ASCII
     
    Set objShell = WScript.CreateObject ("WSCript.shell")
    Set objFSO = CreateObject("Scripting.fileSystemObject")
    Set WshNetwork = CreateObject("WScript.Network")
     
    '-- Recupération de répertoire courant
    fullPath = WScript.ScriptFullName 
    Set objFile = objFSO.GetFile(fullPath)
     
    '-- Définition du répertoire Courant
    StrCurrentDir = objFSO.GetParentFolderName(objFile) 
     
    'Chemin du fichier csv
    Dim fso
    Path = Left(WScript.ScriptFullName, InStr(WScript.ScriptFullName, WScript.ScriptName)-1)
    INPUT_PATH =  PATH & "Printer_list_2017.csv"
     
    '-- Reccuperation des arguments
    strSite = Wscript.Arguments(0)
    'strSite = "TOTO"
     
    'Search  in CSV file
    Set inputFile = objFSO.GetFile(INPUT_PATH)
    Set inputFileStream = inputFile.OpenAsTextStream(ForReading, TristateDefault)
     
    Do until (inputFileStream.atEndOfStream)
        aktInputLine = inputFileStream.ReadLine
        entries = Split(aktInputLine, ",")  
     
    	'Parcours le fichier csv pour reccuperer les informations relative aux imprimantes du site
    	For Each line In entries
    		If line = strSite Then
    			strModel = entries (1)
    			strPrinterName = entries (2)
    			strIpPrinter = entries (3)
     
    			Select Case strModel
    				Case "CANON": 
    					strDriver = "Canon Generic PCL6 Driver"
    					'Windows 7
    					'strDrivePath = "C:\Windows\System32\DriverStore\FileRepository\cnp60ma64.inf_amd64_neutral_da93e7535d5504d9\CNP60MA64.INF"
    					 strDrivePath = "C:\Temp\Drivers Canon\Install new driver\Driver\CNP60MA64.INF"
    				Case Else 
    					'wscript.echo "Model not found"
    					wscript.quit
    			End Select
     
    			'Configuration du port
    			objShell.run "cscript C:\Windows\System32\Printing_Admin_Scripts\en-US\prnport.vbs -a -r IP_" & strIpPrinter & " -h " & strIpPrinter & " -o raw", 6, True
     
    			'Check if exist
    			printerExists (str)
     
    			'Configuration de l'imprimante
    			objShell.run "rundll32 printui.dll,PrintUIEntry /if /b " & strPrinterName & " /f """ & strDrivePath &""" /r IP_" & strIpPrinter & " /m """ & strDriver & Chr(34), 6, True
    		End if
    	Next
    Loop
     
    Function printerExists(str)
        printerExists = "L'imprimante  " & str & "  va être installé"
        Dim objWMIService
        Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
     
        Dim colPrinters
        Set colPrinters = objWMIService.ExecQuery("Select * From Win32_Printer")
     
        Dim objPrinter
        For Each objPrinter In colPrinters
            If objPrinter.Name = str Then 
    		printerExists = "L'imprimante  " & str & "  existe déjà"
    		Wscript.Quit
                Exit For
            End If
        Next
    End Function
    Une idée pour faire un check ?
    Merci

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Tu as déjà une fonction de vérification "printerExists".

    Sinon tu peux vérifier sur l'ip.

  3. #3
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Salut

    Dans ton code, la ligne 55, ta variable str n'est pas renseigné.

    De plus il me semble bien que ta boucle devrait ressemblé plutôt à ça
    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
    24
    25
    26
    27
    28
    29
    30
    31
    Do until (inputFileStream.atEndOfStream)
        aktInputLine = inputFileStream.ReadLine
        entries = Split(aktInputLine, ",")  
     
    	'Parcours le fichier csv pour reccuperer les informations relative aux imprimantes du site
    	For Each line In entries
    		If line = strSite Then
    			strModel = entries (1)
    			strPrinterName = entries (2)
    			strIpPrinter = entries (3)
     
    			Select Case strModel
    				Case "CANON": 
    					strDriver = "Canon Generic PCL6 Driver"
    					'Windows 7
    					'strDrivePath = "C:\Windows\System32\DriverStore\FileRepository\cnp60ma64.inf_amd64_neutral_da93e7535d5504d9\CNP60MA64.INF"
    					 strDrivePath = "C:\Temp\Drivers Canon\Install new driver\Driver\CNP60MA64.INF"
    				Case Else 
    					'wscript.echo "Model not found"
    					wscript.quit
    			End Select
    			'Check if exist
    			If printerExists(str) = "L'imprimante  " & str & "  va être installé" Then
    				'Configuration du port
    				objShell.run "cscript C:\Windows\System32\Printing_Admin_Scripts\en-US\prnport.vbs -a -r IP_" & strIpPrinter & " -h " & strIpPrinter & " -o raw", 6, True
    				'Configuration de l'imprimante
    				objShell.run "rundll32 printui.dll,PrintUIEntry /if /b " & strPrinterName & " /f """ & strDrivePath &""" /r IP_" & strIpPrinter & " /m """ & strDriver & Chr(34), 6, True
    			End if
    		End If
    	Next
    Loop
    Une autre chose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    				Case Else 
    					'wscript.echo "Model not found"
    					wscript.quit
    te fait quitter ton script avant d'avoir parcouru tout ton fichier .CSV ??
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  4. #4
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Re
    Post 3
    Citation Envoyé par ProgElecT Voir le message
    Salut

    Dans ton code, la ligne 55, ta variable str n'est pas renseigné.
    Tu appelles la fonction printerExists (str) en ne renseignant pas l'argument str, la fonction, dans son nom, te renvoie systématiquement ""L'imprimante " & str & " va être installé"", str étant vide,le retour est "L'imprimante va être installé"
    De plus tu ne te sers pas de cette valeur (pouvant être fausse) pour décider d’installer ou non l'imprimante.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  5. #5
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 14
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    Tu as déjà une fonction de vérification "printerExists".

    Sinon tu peux vérifier sur l'ip.
    Hello!
    Alors non l'IP ça ne me va pas, car mes noms d'imprimantes ont été renommés entre temps. Du coup ça peut ne pas coller.
    Pas simple

  6. #6
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Dans la fonction de vérification, je mettrais : If LCase(objPrinter.Name) = LCase(str) Then au lieu de If objPrinter.Name = str Then car il se peut que le nom du modèle d'imprimante ne soit pas tout en majuscule.

    Ensuite, je remplacerais Select Case strModel par : Select Case UCase(strModel)
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  7. #7
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 14
    Par défaut
    Bonjour à tous,
    Désolé pour le retard de réponse. Quelques galère avec mes imprimantes

    Merci pour vos réponses. J'ai apporté des modifications suite à vos remarques.
    Malheureusement le script continue de créer l’imprimante si elle existe déjà.
    En fait il ne m'en rajoute pas une, il la renomme !
    Exemple TOTO devient TOTO (Copie 1), et si je relance le script en TOTO (Copie 2) ainsi de suite

    J'avoue ne pas trop comprendre pourquoi...

  8. #8
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Citation Envoyé par DraGula Voir le message
    Hello!
    Alors non l'IP ça ne me va pas, car mes noms d'imprimantes ont été renommés entre temps. Du coup ça peut ne pas coller.
    Pas simple
    Tu parles des noms dns ou wins/netbios surement ?

    Pourrais tu poser ton script modifié et un exemple de csv stp.

  9. #9
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    As tu essayé le paramètre "/Y" ?
    /Y do not auto generate a printer name
    http://www.robvanderwoude.com/2kprintcontrol.php

Discussions similaires

  1. [XL-2003] Créer/installer fichier XLA depuis fichier XLS
    Par yizashi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/10/2012, 10h27
  2. Installation Imprimante depuis une GPO sur Ordinateur
    Par Viduc dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 25/02/2010, 20h45
  3. Ouverture de la fenêtre des imprimantes avec fichier .bat ??
    Par bbkenny dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 04/05/2005, 18h13
  4. Des fichiers inexistants qui existent pourtant !
    Par iubito dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 07/09/2004, 10h29
  5. [LINUX][INSTALL]Error de fichier trop court
    Par silvermoon dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 06/08/2004, 16h17

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