Drucker installieren (silent)

  • Hallo,

    ich hab da mal ne Frage:

    In unserer Firma gibt es mehrere Drucker. Diese hängen über TCP/IP direkt am Netz.

    Jetzt möchte ich ein Script schreiben, dass den ausgewählten Drucker automatisch installiert. Der Benutzer soll davon jedoch nichts mitbekommen. Es sollte auch in ein schon Vorhandenes Installations-Script (GUI-Tool) eingegliedert werden. Das heißt: setzt der User den Haken bei bsp. HP 8000 PCL6 soll der Drucker automatisch installiert werden, ohne dass der User irgendetwas davon mitbekommt. (Also keinen Drucker-Installations-Assistenten)

    Ich weiß nur nicht, wie ich das machen könnte...

    Für Anregungen bin ich sehr dankbar!

    Gruß

    Erweiterung: Habe soeben noch die fertige .bat-Datei angehängt.

    • Offizieller Beitrag

    Hi!

    Doch den Druckerassistenten nehmen, sofort nach dem Erscheinen mit WinSetState verstecken und dann mit ControlClick und ControlCommand durchgehen?
    Sollte eigentlich machbar sein...
    Möglicherweise gibt es aber auch einen DLLCall in der user32.dll oder so, evtl. mal googlen. :)

    peethebee

    p.s.: Herzlich Willkommen :)

    • Offizieller Beitrag

    Hallo,

    es gibt zwar keinen DllCall in der user32.dll aber dafür in der winspool.drv, nämlich AddPrinterConnection!

    [autoit]


    AddPrinterConnection("\\<Server>\<Druckerfreigabe>")

    [/autoit][autoit][/autoit][autoit]

    Func AddPrinterConnection ($szPrinterName)
    $lRetVal = DllCall("winspool.drv", "long", "AddPrinterConnection", "str", $szPrinterName)

    If IsArray($lRetVal) Then
    Return SetError(0,0,$lRetVal[0] = 1)
    EndIf

    Return SetError(1,0,False)
    EndFunc

    [/autoit]
  • Hallo!

    Danke für die schnellen Antworten.

    peethebee :
    Danke, das ist einen Versuch wert. Mal versuchen, vielleicht klappt es ja.

    Bernd 670:
    Das ist leider nicht möglich, da die Drucker nicht an einem Server hängen. Sie haben je eine eigene IP. Das heißt ich kann nicht AddPrinterConnection("\\<Server>\<Druckerfreigabe>") verwenden. Sonst hätte ich es ganz einfach per batch-Datei schreiben können.

    Vielen Dank nochmals!

    srb

    • Offizieller Beitrag
    Zitat

    Original von srb
    ...

    Das ist leider nicht möglich, da die Drucker nicht an einem Server hängen. Sie haben je eine eigene IP. Das heißt ich kann nicht AddPrinterConnection("\\<Server>\<Druckerfreigabe>") verwenden. Sonst hätte ich es ganz einfach per batch-Datei schreiben können.

    ...

    Das würde dann aber heissen das jeder Drucker einen internen Printserver besitzt, d.h. der Aufruf AddPrinterConnection("\\<IP-Adresse des Druckers>\<Druckerfreigabe>") sollte auch funktionieren.

  • Hi,
    Ich löse das immer über das Tool Print Migrator 3.1 von MS
    LINK

    Und zwar erstellst du damit zuerst auf einem PC auf dem der Drucker schon eingerichtet ist ein .Cab File. Du solltest darauf achten dass du alle unnötigen Druckeranschlüsse und Druckertreiber (also unter "Drucker und Faxgeräte | Datei | Servereigenschaften | Treiber") löschst bevor du das .Cab File erzeugst, da diese sonst mit gespeichert werden. Am besten mit dem Printmig ein backup deiner jetztigen Konfiguration machen, danach alles löschen bis auf den oder die gewünschten Drucker, ein erneutes .Cab machen und danach wieder zurück sichern mit deinem Backup.

    Ach ja wenn du ein .Cab File auf einen PC aufspielst werden die enthaltenen Drucker hinzugefügt. Die vorhandenen bleiben bestehen.

    Der Code sieht dann folgendermaßen aus:

    [autoit]

    ;Adminrechte setzen
    RunAsSet("admin_user",@ComputerName,"password")

    [/autoit][autoit][/autoit][autoit]

    ;Temp-Verzeichnis erstellen
    DirCreate("D:\temp")

    [/autoit][autoit][/autoit][autoit]

    ;Installationsdateien auf Lokales-Temp-Dir kopieren
    FileCopy("\\server\share\*.*","D:\temp",1)

    [/autoit][autoit][/autoit][autoit]

    ;Warten damit sichergestellt ist, dass Kopiervorgang abgeschlossen ist
    Sleep(10000)

    [/autoit][autoit][/autoit][autoit]

    ;Printmig mit Verweis auf Treiber-Cab-File und Restore Parameter (-r) aufrufen
    RunWait("D:\temp\printmig.exe -r D:\temp\treiber.cab","D:\temp")

    [/autoit][autoit][/autoit][autoit]

    ;Warten um sicherzustellen, dass Installation abgeschlossen ist
    Sleep(3000)

    [/autoit][autoit][/autoit][autoit]

    ;Temp-Dir mit allen Dateien entfernen
    DirRemove("D:\temp",1)

    [/autoit][autoit][/autoit][autoit]

    ;Adminrechte zurücksetzen
    RunAsSet()

    [/autoit][autoit][/autoit][autoit]

    ;Statusmeldung ausgeben
    MsgBox(0,"Abgeschlossen","Die Installation wurde abgeschlossen")

    [/autoit]

    In deinem share auf dem Server muss dann nur die printmig.exe und die jeweilige .Cab Datei liegen (im Beispiel treiber.cab)

    Hoffe das hilft dir
    c ya
    Paddy

  • Hallo,

    habs jetzt mittlerweile doch noch hinbekommen.
    Hab zwar ein Batch-File dafür verwendet, aber es läuft jetzt einwandfrei!

    Vielen Dank an alle!

    Gruß

  • hab mir gerade das tool von MS mal angeschaut! also wenn ich das ganze richtig verstanden habe, kann ich da drucker über sone spezielle datei auf jedem x-beliebigen rechner installieren? also ich lege wegen mir für eine abteilung sone datei an, welche alle dort vorhandenen drucker beinhaltet und spiele das auf jedem rechner in der abteilung ein?

    das würde mir einiges erleichtern!

    greetz oli

  • Hi oliverh,
    so wie du das siehst ist das korrekt. Du installierst auf einem PC die Drucker die z.B. für eine Abteilung benötigt werden und machst dann eine Datei (abteilungXY.cab).
    Bedenke aber das du alle nicht benötigten Treiber und Anschlüsse entfernst (siehe mein 1. Post).

    Und dann kannst du natürlich noch alles schön mit autoIt automatisieren und noch nen Admin mitgeben sodass sich der User nicht mal abmelden musst wenn du z.B. Remote auf dem PC drauf bist.

    c ya
    Paddy