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

Scripts/Batch Discussion :

Installation de pilotes d'impression


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2012
    Messages : 27
    Par défaut Installation de pilotes d'impression
    Bonjour à toutes et à tous,

    J'essaye de créer un script powershell qui puisse installer les pilotes d'impression sur le serveur d'impression de windows 7.
    Actuellement je le fais à la main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @echo off
    printui /s /t2
    exit
    Ce que j'aimerais c'est récupérer la listes des pilotes déjà présents (j'ai trouvé ça, ça fonctionne...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if ($args[0] -ne $Null)
            {$serveur = $args[0]}
    else
            {$serveur = "."}
    
    $liste=@()
    $collection =Get-WmiObject -computer $serveur win32_Printerdriver | select name,version, supportedplatform
    foreach ($drivers in $collection)
    { $liste+=($drivers.name -split ",")[0]} #split pour afficher juste le nom
    $file=new-item "$Env:userprofile\Liste_imprimante.txt" -type file -force
    Add-Content -Path $file -Value $liste
    write-output $liste
    Ensuite, j'aimerais appliquer une fonction si dans le fichier texte créé précédemment il y a une certaine chaine de caractère.
    Pour le moment je n'ai qu'un test-path que j'applique sur le fichier texte (si monfichier.txt présent alors applique fonction)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $testpath = Test-Path $file
    if ($testpath = "True" )
    {
    get-instalPilot
    get-MsgBoxinstallOK
    }else
    {
    get-MsgBoxalreadyinstall
    }
    Enfin j'ai dans ma fonction get-installPilot ceci qui ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rundll32 printui.dll,PrintUIEntry /ia /c \\127.0.0.1 /m "Canon iR2270/iR2870 PCL5e" /h "x64" /v "Windows 2000" /f "$Env:userprofile\Desktop\InstallImprimanteEuroEng\Canon_ir2270\P564UKAL.INF"
    j'ai aussi essayer ça, mais dans les deux cas il me dit que mes arguments ne sont pas valides
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RUNDLL32.exe PRINTUI.DLL PrintUIEntry -Gw -h x64 -ia -f "C:\Users\aduchatelier\Desktop\InstallImprimanteEuroEng\Canon_ir2270\P564UKAL.INF" -m "Canon iR2270/iR2870 PCL5e"
    Je ne suis pas bon du tout en prog (je pense à chaque fois à l'envers de ce qu'il faudrait), mais j'essaye quand même.

    Du coup est-ce que vous n'auriez pas des solutions à mes différents pb?

    PS: vous n'auriez pas des liens pour des cours/tutos (ou des bouquins) pas à pas en powershell pour les néofites (En français si possible)?
    J'aimerais apprendre un langage de scripting.
    Thx

  2. #2
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Par défaut
    Salut ajen31

    Enfin j'ai dans ma fonction get-installPilot ceci qui ne fonctionne pas
    tu peut utilisé les fonctions qu'a fait Chris Towles sur ce site

    en particulier la fonction Install-PrinterDriver qui ce trouve dans les commentaires :
    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
    Function Install-PrinterDriver {
        param (
        [string]$ComputerName = ".",
        [string]$DriverName,
        [string]$DriverPath,
        [string]$INFFileName,
        $aff = 1)
    
        $InstalledDrivers = Get-InstalledPrinterDrivers -ComputerName $ComputerName
        $DriverFound = $InstalledDrivers | where {$_.Name -eq $DriverName}
    
        if($DriverFound -eq $null) {
            if ($aff) {
                Write-Host ("Ce pilote d'impression " + $DriverName + " n'est pas installé sur " + $ComputerName ) -ForegroundColor Red
                Write-Host ("Installation du pilote " + $DriverName + " sur " + $ComputerName) -ForegroundColor Green
                }
            $NewPrinterDriver = [wmiclass]"\\$ComputerName\ROOT\cimv2:Win32_PrinterDriver"
            $NewPrinterDriver.Scope.Options.EnablePrivileges = $true
    
            $objDriver = $NewPrinterDriver.createinstance()
            $objDriver.Name=$DriverName
            if ($DriverPath -ne "" -and $DriverPath -ne $null) {
                $objDriver.DriverPath=$DriverPath
                $objDriver.Infname= $DriverPath +"\" + $INFFileName
                }
            $objDriver.Version = "3"
            $objDriver.SupportedPlatform = "Windows x64"
    
            $ResultDrv = $NewPrinterDriver.AddPrinterDriver($objDriver)
            #$ResultDrv = $NewPrinterDriver.Put()
            if ($aff) {
                Switch ($ResultDrv.ReturnValue)
                    {
                         0 {Write-Host "Success : $DriverName"}
                         5 {Write-Host "Access denied : $DriverName";Break}
                      1797 {Write-Host "The printer driver is unknown : $DriverName";Break}
                      default {Write-Host "Erreur : $($ResultDrv.ReturnValue)";Break} 
                    }
                }
            return $ResultDrv
            }
        Else {
            if ($aff) {
                Write-Host ("Ce pilote d'impression " + $DriverName + " est déja installé sur " + $ComputerName) -ForegroundColor Green
                }
            }
        }
     
    Function Get-InstalledPrinterDrivers () { 
     param ( [string] $ComputerName = "." ) 
    
     $colItems = get-wmiobject -class "Win32_PrinterDriver " -namespace "root\CIMV2" -computername $ComputerName 
     $PrintDrivers = @() 
     foreach ($objItem in $colItems) { 
      #creating a new object called $PrinterInfo  
         $Driver = New-Object psobject  
         $Driver | Add-Member NoteProperty Name $objItem.Name.Split(",")[0] 
      $Driver | Add-Member NoteProperty Chip $objItem.Name.Split(",")[2] 
    
      $PrintDrivers += $Driver 
     }
    un exemple d'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Install-PrinterDriver "Pc-de-test" "HP Universal Printing PCL 5" "\\serveurs\Deploy\HP-upd\pcl5-x64-5.9.0.18326" "hpcu170t.inf"
    Ce que j'aimerais c'est récupérer la listes des pilotes déjà présents (j'ai trouvé ça, ça fonctionne...)
    tu a la fonction Get-InstalledPrinterDrivers aussi que j'ai rajouter ci-dessus

    Ensuite, j'aimerais appliquer une fonction si dans le fichier texte créé précédemment il y a une certaine chaine de caractère.
    Pour le moment je n'ai qu'un test-path que j'applique sur le fichier texte (si monfichier.txt présent alors applique fonction)
    tu doit faire un "get-content $file" suivit d'un filtre du type "| where $_ -match "Canon iR2270""
    et tu test le résultat

    pour les tuto Laurent à fais du bon boulot en Français
    commence par : Introduction à PowerShell.

  3. #3
    Membre averti
    Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2012
    Messages : 27
    Par défaut
    Bonjour à toutes et à tous,

    Merci 6ratgus.

    J'ai testé ce que tu m'avais donné, en faisant quelques modifications :
    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
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    # déclaration des variables
    $a = new-object -comobject wscript.shell
    
    # déclaration des fonctions
    
    function get-supprListe_imprimante.txt
    {
    Remove-Item "$Env:userprofile\Liste_imprimante.txt"
    }
    
    Function get-MsgBoxalreadyinstall
    {
    $Msgboxalreadyinstall = $a.popup("Pilotes d'impression déjà installé",5,"Information",1)
    }
    
    Function get-MsgBoxinstallOK
    {
    $MsgboxinstallOK = $a.popup("Installation des pilotes d'impression réussi",5,"Information",1)
    }
    
    Function get-installedDrivers
    {
    if ($args[0] -ne $Null)
            {$serveur = $args[0]}
    else
            {$serveur = "."}
    $liste=@()
    $collection =Get-WmiObject -computer $serveur win32_Printerdriver | select name,version, supportedplatform
    foreach ($drivers in $collection)
    { $liste+=($drivers.name -split ",")[0]} #split pour afficher juste le nom
    $file=new-item "$Env:userprofile\Liste_imprimante.txt" -type file -force
    Add-Content -Path $file -Value $liste
    }
    
    Function Get-InstalledPrinterDrivers () 
    {
    	 param ( [string] $ComputerName = $env:COMPUTERNAME )
    	   $ComputerName = $env:COMPUTERNAME
    	 $colItems = get-wmiobject -class "Win32_PrinterDriver " -namespace "root\CIMV2" -computername $ComputerName
    	 
    	 $PrintDrivers = @()
    	 foreach ($objItem in $colItems) {
    	  #creating a new object called $PrinterInfo
    	     $Driver = New-Object psobject
    	     $Driver | Add-Member NoteProperty Name $objItem.Name.Split(",")[0]
    	  $Driver | Add-Member NoteProperty Chip $objItem.Name.Split(",")[2]
    	   
    	  $PrintDrivers += $Driver
    	 }	  
    	 return $PrintDrivers
    	}
    
    Function Install-PrinterDriver {
        param (
        [string]$ComputerName = $env:COMPUTERNAME,
        [string]$DriverName,
        [string]$DriverPath,
        [string]$INFFileName,
        $aff = 1)
        $ComputerName = $env:COMPUTERNAME
        $InstalledDrivers = Get-InstalledPrinterDrivers -ComputerName $ComputerName
        $DriverFound = $InstalledDrivers | where {$_.Name -eq $DriverName}
    
        if($DriverFound -eq $null) {
            if ($aff) {
                Write-Host ("Ce pilote d'impression " + $DriverName + " n'est pas installé sur " + $ComputerName ) -ForegroundColor Red
                Write-Host ("Installation du pilote " + $DriverName + " sur " + $ComputerName) -ForegroundColor Green
                }
            $NewPrinterDriver = [wmiclass]"\\$ComputerName\ROOT\cimv2:Win32_PrinterDriver"
            $NewPrinterDriver.Scope.Options.EnablePrivileges = $true
    
            $objDriver = $NewPrinterDriver.createinstance()
            $objDriver.Name=$DriverName
            if ($DriverPath -ne "" -and $DriverPath -ne $null) {
                $objDriver.DriverPath=$DriverPath
                $objDriver.Infname= $DriverPath +"\" + $INFFileName
                }
            $objDriver.Version = "3"
            $objDriver.SupportedPlatform = "Windows x64"
    
            $ResultDrv = $NewPrinterDriver.AddPrinterDriver($objDriver)
            #$ResultDrv = $NewPrinterDriver.Put()
            if ($aff) {
                Switch ($ResultDrv.ReturnValue)
                    {
                         0 {Write-Host "Success : $DriverName"}
                         5 {Write-Host "Access denied : $DriverName";Break}
                      1797 {Write-Host "The printer driver is unknown : $DriverName";Break}
                      default {Write-Host "Erreur : $($ResultDrv.ReturnValue)";Break} 
                    }
                }
            return $ResultDrv
            }
        Else {
            if ($aff) {
                Write-Host ("Ce pilote d'impression " + $DriverName + " est déja installé sur " + $ComputerName) -ForegroundColor Green
                }
            }
        }
    
    
     
    #=========================================================================
    #=========================================================================
    #                            MAIN
    #=========================================================================
    #=========================================================================
    
    # déclaration pour la création d'un popup
    
    [System.Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms”)
    
    Get-InstalledPrinterDrivers
    get-installedDrivers
    Write-Output $printdriver
    
    
    $testdell = get-content "$Env:userprofile\Liste_imprimante.txt" | where {$_ -Match "Dell 2335dn MFP"}
    Write-Output $testdell
    
    if ($testdell -ne "Dell 2335dn MFP" )
    {
    Install-PrinterDriver $ComputerName "Dell 2335dn MFP" "$Env:userprofile\Desktop\InstallImprimanteEuroEng\Canon_ir2270" "P564UKAL.INF"
    get-MsgBoxinstallOK
    #get-supprListe_imprimante.txt
    
    }else
    {
    get-MsgBoxalreadyinstall
    }
    Ds la fonction Install-PrinterDriver j'ai du rajouter
    $ComputerName = $env:COMPUTERNAME
    Sinon il ne prenait pas en compte le nom du poste.
    Je n'ai pas réussi à récupérer le résultat de la fonction Get-InstalledPrinterDrivers, du coup j'ai appelé une autre fonction que j'avais trouver sur le net Get-installedDrivers.

    Le Hic maintenant c'est que la fonction Install-PrinterDriver me renvoi une erreur 87
    Nom : Screen Shot 11-20-15 at 08.48 AM.PNG
Affichages : 1716
Taille : 19,8 Ko

    Des idées ???

    Je viens de trouver ceci : je vais tester pour voir. La fonction semble être quasiment la même (en gras)
    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
    ####################################################
    # Change these values to the appropriate values in your environment
    
    $PrinterIP = "10.10.10.10"
    $PrinterPort = "9100"
    $PrinterPortName = "IP_" + $PrinterIP
    $DriverName = "KONICA MINOLTA bizhub C35P PS"
    $DriverPath = "\\UNC_Path\To\My\Drivers"
    $DriverInf = "\\UNC_Path\To\My\Drivers\KOBJQA__.inf"
    $PrinterCaption = "Konica Minolta C35P"
    ####################################################
    
    ### ComputerList Option 1 ###
    # $ComputerList = @("lana", "lisaburger")
    
    ### ComputerList Option 2 ###
    # $ComputerList = @()
    # Import-Csv "C:\Temp\ComputersThatNeedPrinters.csv" | `
    # % {$ComputerList += $_.Computer}
    
    Function CreatePrinterPort {
    param ($PrinterIP, $PrinterPort, $PrinterPortName, $ComputerName)
    $wmi = [wmiclass]"\\$ComputerName\root\cimv2:win32_tcpipPrinterPort"
    $wmi.psbase.scope.options.enablePrivileges = $true
    $Port = $wmi.createInstance()
    $Port.name = $PrinterPortName
    $Port.hostAddress = $PrinterIP
    $Port.portNumber = $PrinterPort
    $Port.SNMPEnabled = $false
    $Port.Protocol = 1
    $Port.put()
    }
    
    Function InstallPrinterDriver {
    Param ($DriverName, $DriverPath, $DriverInf, $ComputerName)
    $wmi = [wmiclass]"\\$ComputerName\Root\cimv2:Win32_PrinterDriver"
    $wmi.psbase.scope.options.enablePrivileges = $true
    $wmi.psbase.Scope.Options.Impersonation = `
    [System.Management.ImpersonationLevel]::Impersonate
    $Driver = $wmi.CreateInstance()
    $Driver.Name = $DriverName
    $Driver.DriverPath = $DriverPath
    $Driver.InfName = $DriverInf
    $wmi.AddPrinterDriver($Driver)
    $wmi.Put()
    }
    
    Function CreatePrinter {
    param ($PrinterCaption, $PrinterPortName, $DriverName, $ComputerName)
    $wmi = ([WMIClass]"\\$ComputerName\Root\cimv2:Win32_Printer")
    $Printer = $wmi.CreateInstance()
    $Printer.Caption = $PrinterCaption
    $Printer.DriverName = $DriverName
    $Printer.PortName = $PrinterPortName
    $Printer.DeviceID = $PrinterCaption
    $Printer.Put()
    }
    
    foreach ($computer in $ComputerList) {
    CreatePrinterPort -PrinterIP $PrinterIP -PrinterPort $PrinterPort `
    -PrinterPortName $PrinterPortName -ComputerName $computer
    InstallPrinterDriver -DriverName $DriverName -DriverPath `
    $DriverPath -DriverInf $DriverInf -ComputerName $computer
    CreatePrinter -PrinterPortName $PrinterPortName -DriverName `
    $DriverName -PrinterCaption $PrinterCaption -ComputerName $computer
    }
    ####################################################
    Thx

  4. #4
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Par défaut
    Le Hic maintenant c'est que la fonction Install-PrinterDriver me renvoi une erreur 87
    regarde si ce n'est pas ce probleme !

  5. #5
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Par défaut
    je t'avoue que l'ajout de drivers est souvent problématique et j'ai fini par utilisé l'installeur du constructeur d'imprimante

    c'est souvent un problème de paramètre ou parfois de fichier endommagé !

    vérifie aussi si il ni a pas déjà le même driver d'installé
    redémarre le spooler d'impression avant l'install, ça marche souvent ça !

    le nom du driver transmis en paramètre (drivername) doit être exactement celui du constructeur


    si je me souvient d'autre chose je reviendrai !

Discussions similaires

  1. instalation de pilote
    Par LesLemmings dans le forum Windows XP
    Réponses: 3
    Dernier message: 30/05/2007, 13h09
  2. Installer un pilote XP sur Vista?
    Par sharrascript dans le forum Windows Vista
    Réponses: 8
    Dernier message: 05/05/2007, 00h44
  3. Utiliser une BD sans installer de pilote
    Par sovitec dans le forum Bases de données
    Réponses: 14
    Dernier message: 18/04/2007, 16h33
  4. Installation du pilote pour modem Fast 800 sous Fedora core 5
    Par mamiberkof dans le forum Matériel
    Réponses: 1
    Dernier message: 07/04/2006, 20h34
  5. [OC]installation du pilote sybase <jdbc >
    Par osoumayaj dans le forum Sybase
    Réponses: 3
    Dernier message: 13/01/2006, 10h01

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