Print Installer

  • Hallo,

    ich bin neu hier und mal eines meiner Scripte vorstellen.

    Wir haben bei uns einen neuen Drucker bekommen. Nun mussten alle Drucktreiber aktualisiert werden (erstmal 20 PCs). Da es sich um einen Netzwerkdrucker handelt, dachte ich mir, gut dann machst du eben eine automatische Installation. Erst hab alles über die Fenstersteurungen gemacht, das gefiel mir dann aber nicht. Nun läuft alles über rundll32 printui.dll oder über VBS die es bei XP bei gibt (liegen dort im System32 Ordner, hab sie aber mit eingebunden). Hier der Quelltext meines Scriptes. (Nicht wundern über die Splash-Funktionen, die stehen in einer anderen Datei)

    [autoit]

    #cs=======#INDEX# ===========================================================================================
    Title .........: Drucktreiber Installation
    AutoIt Version.: 3.3.0.0
    Language.......: German
    Description ...: Hauptmodul für die Installation eines Druckers (Konica BIZHUB C280) in der
    Medienwerkstatt Lehe von faden e. V.
    ============================================================================================================
    #ce

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

    #NoTrayIcon
    #RequireAdmin

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

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=mw_print_installer.ico
    #AutoIt3Wrapper_outfile=MW Konica C280 Installer.exe
    #AutoIt3Wrapper_Compression=4
    #AutoIt3Wrapper_Res_Fileversion=2.1.0.38
    #AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
    #AutoIt3Wrapper_Res_LegalCopyright=©2010 M. Neumann
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Add_Constants=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    OnAutoItExitRegister("_del_Driver")

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

    Dim $driver_x64 = "konica_bizhubc280_win_x64_de.exe"
    Dim $driver_x86 = "konica_bizhubc280_win_x86_de.exe"
    Dim $driver_path = @DesktopDir & "\konica_treiber\"
    Dim $driver_inf = $driver_path & "KOAZ8J__.INF"
    Dim $driver_current = "KONICA MINOLTA C360SeriesPCL"
    Dim $driver_old = "KONICA MINOLTA C250/C250P PS"
    Dim $print_vbs = $driver_path & "vbs.exe"
    Dim $print_port = "192.168.1.12"
    Dim $script_v = FileGetVersion(@ScriptFullPath)
    Dim $splash_title = "MW Konica C280 Installer"
    Dim $script_title = _StringRepeat("_", 40) & @CRLF & $splash_title & " v" & $script_v & @CRLF & _StringRepeat("¯", 40) & @CRLF
    Dim $os_arch = StringLower(@OSArch)

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

    Dim $driver
    Dim $driver_processor
    Dim $driver_typ
    Dim $os_found

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

    #include <string.au3>
    #include <Array.au3>
    #include <msg_udf.au3>

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

    ;Splash-Anzeige verändern
    _set_msg_Vars(_ArrayCreate("width:500", "left:" & (@DesktopWidth - 500) / 2))

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

    _showSplash($splash_title, $script_title & "Überprüfe Betriebssystem!", 2000)

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

    ;Wenn das Verzeichnis noch nicht exestiert, erstelles es. (Verzeichnis in dem die Treiber kopiert werden sollen)
    If Not FileExists($driver_path) Then
    DirCreate($driver_path)
    EndIf

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

    ;VBS zum erstellen eines Druckeranschlusses kopieren
    FileInstall("./vbs.exe", $print_vbs, 1)

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

    If $os_arch = "x64" Then

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

    ;Treiberpfad komplett machen
    $driver = $driver_path & $driver_x64

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

    ;Treiber -> Prozessor angeben
    $driver_processor = $os_arch

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

    ;Treiberpacket kopieren
    FileInstall("./konica_bizhubc280_win_x64_de.exe", $driver, 1)

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

    ElseIf $os_arch = "x86" Then

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

    ;Treiberpfad komplett machen
    $driver = $driver_path & $driver_x86

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

    ;Treiber -> Prozessor angeben
    $driver_processor = "Intel"

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

    ;Treiberpacket kopieren
    FileInstall("./konica_bizhubc280_win_x86_de.exe", $driver, 1)

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

    EndIf

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

    If @OSVersion == "WIN_XP" Then

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

    $os_found = "XP"
    $driver_typ = "Windows 2000 und XP"

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

    ElseIf @OSVersion == "WIN_VISTA" Then

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

    ;_updateSplash($splash_title, @CRLF & "Gefundenes Betriebssystem: " & @CRLF & "=> Windows VISTA® <=")
    _updateSplash($splash_title, "Windows VISTA® (" & @CPUArch & ") wird derzeit noch nicht unterstützt!", 5, 1000, 1)

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

    ElseIf @OSVersion == "WIN_7" Then

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

    $os_found = "7"
    $driver_typ = "Typ 3 - Benutzermodus"

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

    Else
    _updateSplash($splash_title, "Dies ist kein Unterstütztes Betriebssystem (oder es konnte nicht erkannt werden).", 5, 1000, 1)
    EndIf

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

    _updateSplash($splash_title, $script_title & "Gefundenes Betriebssystem: " & @CRLF & "=> Windows " & $os_found & "® (" & $os_arch & ") <=" & @CRLF & "entpacke Treiber!", 2500)

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

    ;Entpacke den Treiber an die vordefinierte Stelle
    ShellExecuteWait($driver, '-d"' & $driver_path & '" -s2')

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

    ;Entpacke die VBS's an die vordefinierte Stelle
    ShellExecuteWait($print_vbs, '-d"' & $driver_path & '" -s1')

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

    _updateSplash($splash_title, $script_title & "Suche alte Treiber", 2500)

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

    ;Schauen ob der aktuelle Treiber bereits installiert ist und entferne ihn dann
    __driver_check($driver_current, $driver_processor, $driver_typ)

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

    ;Schauen ob der alte Treiber noch installiert ist und entferne ihn dann
    __driver_check($driver_old, $driver_processor, $driver_typ)

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

    _updateSplash($splash_title, $script_title & "Installiere Druckeranschluss", 2500)

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

    ;Druckanschluss erstellen
    RunWait('cscript "' & $driver_path & 'prnport.vbs" -a -r ' & $print_port & ' -h ' & $print_port & ' -o raw -n 9100', $driver_path, @SW_HIDE)

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

    _updateSplash($splash_title, $script_title & "Installiere Drucker", 2500)

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

    ;Drucker Installieren
    RunWait('rundll32 printui.dll,PrintUIEntry /if /b "MW B-105 Konica" /f "' & $driver_inf & '" /r "' & $print_port & '" /m "' & $driver_current & '"')

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

    #cs=======#FUNCTION# ;=======================================================================================

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

    Name...........: __driver_check

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

    Version........: 0.0.0.1

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

    Description ...: Löscht den Treiberordner nach Fertigstellung des Scripts

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

    Syntax.........: __driver_check($driver_name, $driver_processor, $driver_typ)

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

    Parameters ....: $driver_name = Treibername wie er unter den Servereigenschaften zu finden ist
    $driver_processor = Prozessor wie er unter den Servereigenschaften zu finden ist
    $driver_typ = Typ wie er unter den Servereigenschaften zu finden ist

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

    Return values .: 1 bei erfogreichem durchlauf der Funktion

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

    Author ........: Michael Neumann <[email='mic.neumann@gmx.de'][/email]>

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

    Remarks .......: Geschrieben für die Installation eines Konica BIZHUB C280 Druckers in der
    Medienwerkstatt Lehe von faden e.V.

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

    Example .......; Yes
    ;Beispiel: Win7 x64
    __driver_check("KONICA MINOLTA C360SeriesPCL", "x64", "Typ 3 - Benutzermodus")

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

    ;Beispiel: WinXP x86
    __driver_check("KONICA MINOLTA C360SeriesPCL", "Intel", "Windows 2000 und XP")
    ============================================================================================================
    #ce

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

    Func __driver_check($driver_name, $driver_processor, $driver_typ)
    $wbemFRI = 0x10
    $wbemFFO = 0x20

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

    $printers = ""
    $computer = "localhost"
    $jumper = "rundll32 printui.dll,PrintUIEntry"

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

    $wmis = ObjGet("winmgmts:\\" & $computer & "\root\CIMV2")
    $printer = $wmis.ExecQuery("SELECT * FROM Win32_printer where local=true", "WQL", $wbemFRI + $wbemFFO)

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

    If IsObj($printer) then
    For $pr In $printer
    If $pr.DriverName = $driver_name Then
    If @OSVersion == "WIN_XP" Then
    ;Drucker löschen
    RunWait('cscript "' & $driver_path & 'prnmngr.vbs" -d -p "' & $pr.Name & '"')
    Sleep(1000)

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

    ;Drucktreiber löschen
    RunWait('cscript "' & $driver_path & 'prndrvr.vbs" -d -m "' & $pr.DriverName & '" -v 3 -e "Windows NT x86"')
    Else
    ;Drucker löschen
    RunWait($jumper & ' /dl /n "' & $pr.Name & '"')
    Sleep(1000)

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

    ;Drucktreiber löschen
    RunWait($jumper & ' /dd /m "' & $pr.DriverName & '" /h "' & $driver_processor & '" /v "' & $driver_typ & '"')
    EndIf
    EndIf
    Next

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

    Return 0
    Else
    Return 0
    Endif
    EndFunc

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

    #cs=======#FUNCTION# ;=======================================================================================

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

    Name...........: _del_Driver

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

    Version........: 0.0.0.1

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

    Description ...: Löscht den Treiberordner nach Fertigstellung des Scripts

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

    Syntax.........: _del_Driver() #--ODER--# OnAutoItExitRegister("_del_Driver")

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

    Author ........: Michael Neumann <[email='mic.neumann@gmx.de'][/email]>

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

    Remarks .......: Geschrieben für die Installation eines Konica BIZHUB C280 Druckers in der
    Medienwerkstatt Lehe von faden e.V.

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

    Example .......; Yes

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

    ;Zum Aufruf nach Beendigung des Scripts (z. B. durch EXIT)
    OnAutoItExitRegister("_del_Driver")
    ============================================================================================================
    #ce

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

    Func _del_Driver()

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

    DirRemove($driver_path, 1)
    BlockInput(0)

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

    _showSplash($splash_title, $script_title & "Die Installation des Drucktreibers ist abgeschlossen", 5, 1000, 1)

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

    EndFunc

    [/autoit]

    Ich hänge alles aber auch noch mal mit an das Thema ran. (Bis auf die Treiberdateien)

    Ich hoffe es ist nicht alzuschlecht Programmiert und es können sich andere eingiges herrausziehen. Für Kritik, Lob oder Anregungen bin immer offen.