none
Druckertreiber per Powershell installieren

    Frage

  • Hallo zusammen,

    ich bin nicht der Powershellexperte, möchte mich dennoch damit beschäftigen und besser werden. Ich habe jetzt 3 Stunden Suche hinter mir, aber leider kein Ergebnis. Ich möchte folgendes tun.

    Ich habe auf einem Server einen Treiber liegen (BSP: d:\Drucker\treiber.inf)

    Nun möchte ich diesen Treiber per PowerShell installieren, damit ich danach den Port anlegen und den Drucker installieren kann. Port anlegen und Drucker installieren und freigeben klappt problemlos, nutze ich regelmäßig. Daher dachte ich mir, dass der erste Schritt, den Treiber zu installieren doch auch per PowerShell durchgeführt werden könnte.

    Hat hier einer eine Idee und mag mir einen Tip geben?

    Ich war der Meinung, dass der Befehl add-printerdriver der richtige ist, aber ich erhalte nur die Meldung, dass der Treiber nicht im Driver Store vorhanden ist. Woanders habe ich gelesen, dass per PowerShell ein Druckertreiber so nicht installiert werden kann.

    Vorweg: Natürlich gibt es andere Möglichkeiten und über die GUI sowie Printserver kann ich die Treiber auch installieren, allerdings interessiert mich eben die PS Variante.

    Vielen DAnk im Voraus.

    Beste Grüße

    Patrick

    Montag, 3. Juli 2017 10:09

Antworten

  • > Eine INF-Datei ist tatsächlich nur eine Definition eines Gerätes (Textdatei), das dann in der Windows-Treiberdatenbank enthalten sein muss.

    Autsch...

    http://go.microsoft.com/fwlink/?LinkId=289208

    Geht alternativ auch per WMI (Win32_PrinterDriver). Code dazu hab ich als VBS-Sample sogar da :-)
         Set oDriver = oWMI.Get( "Win32_PrinterDriver" )
        strInfName = aInfName
        strFilepath = fso.GetParentFolderName( strInfName )
        oDriver.Name = strModel
        oDriver.SupportedPlatform = strEnvironment
        oDriver.Version = strVersion
        oDriver.FilePath = strFilepath
        oDriver.InfName = strInfName
        RC = oDriver.AddPrinterDriver( oDriver )

    Freitag, 7. Juli 2017 11:37
  • Dann musst du den Treiber erst dem Store hinzufügen, danach gibst du nur die Inf ohne Path noch an:

    https://technet.microsoft.com/en-us/library/cc772036(v=ws.11).aspx

    • Als Antwort markiert PaWäl Donnerstag, 9. November 2017 13:00
    Montag, 2. Oktober 2017 09:15

Alle Antworten

  • Dadurch, dass Microsoft bei einer Installation von Geräten grundsätzlich erst mal in seiner eigenen Treiberdatenbank nachschaut, hat man da wenig Chancen.
    Andererseits setzt die Treiber-Installation eine EXE oder MSI voraus, die die Installation durchführt.
    Eine INF-Datei ist tatsächlich nur eine Definition eines Gerätes (Textdatei), das dann in der Windows-Treiberdatenbank enthalten sein muss. Ein Fremdtreiber dazu wird dann nicht automatisch geladen und installiert.
    Dienstag, 4. Juli 2017 09:16
  • Hey Patrick,

    du musst glaube ich relativ viele Parameter mitgeben

    könnte in etwa so aussehen:

    $printerID = "<Druckername>"
    $printerIP = "<DruckerIP>"
    $printerPort = "IP_$printerIP"
    $printerModel = "<PrinterModelFromINF>"
    $driverINFPath = "<UNCPathToDriverINF>"
    
    # new Local TCP Printer Port, naming it with values unique to the Printer ID:
    $newPort = ([wmiclass]"Win32_TcpIpPrinterPort").CreateInstance()
    $newPort.HostAddress = $printerIP
    $newPort.Name = $printerPort
    $newPort.PortNumber = "9100"
    $newPort.Protocol = 1
    $newPort.Put()
    
    # Add the printer
    printui.exe /if /b "$printerID" /f "$driverINFPath" /u /r "$printerPort" /m "$printerModel"

    Much fun ;)


    http://www.ms-fabric.de/ Wenn Dir eine Forenantwort weiter geholfen hat dann markiere sie doch bitte als Antwort, dies hilft anderen bei der Lösung von Problemen! LG Carsten

    Dienstag, 4. Juli 2017 09:21
  • > Eine INF-Datei ist tatsächlich nur eine Definition eines Gerätes (Textdatei), das dann in der Windows-Treiberdatenbank enthalten sein muss.

    Autsch...

    http://go.microsoft.com/fwlink/?LinkId=289208

    Geht alternativ auch per WMI (Win32_PrinterDriver). Code dazu hab ich als VBS-Sample sogar da :-)
         Set oDriver = oWMI.Get( "Win32_PrinterDriver" )
        strInfName = aInfName
        strFilepath = fso.GetParentFolderName( strInfName )
        oDriver.Name = strModel
        oDriver.SupportedPlatform = strEnvironment
        oDriver.Version = strVersion
        oDriver.FilePath = strFilepath
        oDriver.InfName = strInfName
        RC = oDriver.AddPrinterDriver( oDriver )

    Freitag, 7. Juli 2017 11:37
  • Hallo zusammen,

    vielen Dank für die Antworten. Ich bin etwas überrascht, dass es so kompliziert ist und MS das nicht auch in die Powershell integriert hat, somit müssen wieder mehrere Werkzeuge herhalten.

    Vielen Dank für die Hilfe.

    Gruß

    Patrick

    Montag, 10. Juli 2017 12:21
  • > Ich bin etwas überrascht, dass es so kompliziert ist und MS das nicht auch in die Powershell integriert hat

    Naja - das CmdLet Add-PrinterDriver als "nicht integriert" zu bezeichnen finde ich auch komisch :)
    Und kompliziert - Du mußt lediglich Inf-Name und Druckername angeben, weniger geht ja fast nicht. "Was genau" und "woher genau", so viele Infos müssen schon sein.

    Montag, 10. Juli 2017 13:21
  • Hallo Herr Binder, 

    sorry für die verspätete Antwort. Leider kann ich Ihre Antwort nicht ganz verstehen.

    Ich habe den Treiber da und dachte, ich könne über das CmdLet "add-printerdriver" eben genau diese Informationen mitgeben, so dass der Treiber des Gerätes installiert wird. Aber eben das scheint nicht zu klappen oder ich bin einfach nicht dazu in der Lage das umzusetzen.

    Daher würde ich mich über eine klare Antwort freuen. Kann man via add-printerdriver einen Treiber, der als entpacktes Paket auf dem Datenträger vorliegt, einen Druckertreiber installieren?

    Wenn ja, wären Sie so nett mir eine einfach Syntax mitzuteilen? Die in der Hilfe finde ich mehr verwirrend als hilfreich.

    Gruß

    Patrick

    Freitag, 29. September 2017 10:00
  • https://technet.microsoft.com/de-de/library/hh918346(v=wps.630).aspx

    Interessant ist der Hinweis:

    -InfPath<String>

    Specifies the path to the printer driver INF file in the driver store. INF files contain information about the printer and the printer driver.

    Sollte der Druckertreiber über ein eigenes Setup verfügen, so funktioniert dies per add-printerdriver nicht.
    Ggf. hat der Driver-Setup Silent-Parameter für eine unbeaufsichtigte Installation und du kannst ihn als Prozess starten.

    Freitag, 29. September 2017 10:34
  • Genau das ist eben mein Problem. Es gibt einen INF Path und auch eine passende inf Datei. Aber ich bekomme die Installation eben genau so nicht hin, weil nach Treibern im Driverstore gesucht wird und da ist ein neues Gerät noch nicht hinzugefügt. Und genau das möchte ich erreichen. Und hier stehe ich noch auf dem Schlauch: Bekomme ich es einfach durch Unwissenheit nicht hin den Treiber zu installieren oder geht es einfach technisch (noch) nicht und ich muss die Treiber erstmal auf anderem Wege auf die Maschine bringen und dann weiter via PowerShell arbeiten.

    Wir haben UTAX Treiber, die bieten sowohl eine Setup, als auch eine manuelle Installation an. Von der Setupvariante möchte ich gerne Abstand nehmen, da mir immer öfters auffällt, dass mir Setups noch weiteren unnötigen Krams installieren, den ich gar nicht möchte.

    Montag, 2. Oktober 2017 08:52
  • Dann musst du den Treiber erst dem Store hinzufügen, danach gibst du nur die Inf ohne Path noch an:

    https://technet.microsoft.com/en-us/library/cc772036(v=ws.11).aspx

    • Als Antwort markiert PaWäl Donnerstag, 9. November 2017 13:00
    Montag, 2. Oktober 2017 09:15
  • > Dann musst du den Treiber erst dem Store hinzufügen, danach gibst du nur die Inf ohne Path noch an:

    Also bisher ging das relativ easy über Win32_Printerdriver - Codeschnipsel aus nem VBS:
         Set oDriver = oWMI.Get( "Win32_PrinterDriver" )
        strInfName = dictPolicies( "cachefolder" ) & "\Treiber\" & DriverNode.GetAttribute( aGuid ) & "\" & DriverNode.GetAttribute( aInfName )
        strFilepath = fso.GetParentFolderName( strInfName )
        WriteLog "Druckertreiber wird installiert..."
        WriteLog "Modell : " & strModel
        WriteLog "InfName: " & strInfName
        Err.Clear
        oDriver.Name = strModel
        oDriver.SupportedPlatform = strEnvironment
        oDriver.Version = strVersion
        oDriver.FilePath = strFilepath
        oDriver.InfName = strInfName
        RC = oDriver.AddPrinterDriver( oDriver )

    Wo sich das INF befindet, ist dabei relativ wurscht :-)

    Und wer nicht selber skripten möchte, dem seien die Printer-Skripts unter %windir%\System32\Printing_Admin_Scripts empfohlen. Kennen leider nicht viele - prndrvr.vbs wäre hier das passende.

    Montag, 2. Oktober 2017 10:26
  • Ah, vielen Dank, das werde ich nochmal versuchen. Ich sage Bescheid, ob ich damit klar komme :-)

    Donnerstag, 12. Oktober 2017 08:01
  • Vielen Dank, werde mich da auch mal durchwühlen.
    Donnerstag, 12. Oktober 2017 08:02
  • Hi zusammen,

    ich wollte noch Infos geben, ob es geklappt hat. YES, genau so, wie im Artikel beschrieben, funktioniert es.

    Also erst den pnputil.exe, dann den Powershellbefehl add-printerdriver und danach kann via add-printer und der Angabe des korrekten Treibers der Drucker installiert werden.

    Super, vielen Dank für die Hilfe, das erleichtert die Arbeit ungemein.

    Beste Grüße

    PaWäl

    Donnerstag, 9. November 2017 13:02