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
#NoTrayIcon
#RequireAdmin
#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 ****
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)
Dim $driver
Dim $driver_processor
Dim $driver_typ
Dim $os_found
#include <string.au3>
#include <Array.au3>
#include <msg_udf.au3>
;Splash-Anzeige verändern
_set_msg_Vars(_ArrayCreate("width:500", "left:" & (@DesktopWidth - 500) / 2))
_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
;VBS zum erstellen eines Druckeranschlusses kopieren
FileInstall("./vbs.exe", $print_vbs, 1)
If $os_arch = "x64" Then
[/autoit][autoit][/autoit][autoit];Treiberpfad komplett machen
$driver = $driver_path & $driver_x64
;Treiber -> Prozessor angeben
$driver_processor = $os_arch
;Treiberpacket kopieren
FileInstall("./konica_bizhubc280_win_x64_de.exe", $driver, 1)
ElseIf $os_arch = "x86" Then
[/autoit][autoit][/autoit][autoit];Treiberpfad komplett machen
$driver = $driver_path & $driver_x86
;Treiber -> Prozessor angeben
$driver_processor = "Intel"
;Treiberpacket kopieren
FileInstall("./konica_bizhubc280_win_x86_de.exe", $driver, 1)
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"
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)
ElseIf @OSVersion == "WIN_7" Then
[/autoit][autoit][/autoit][autoit]$os_found = "7"
$driver_typ = "Typ 3 - Benutzermodus"
Else
_updateSplash($splash_title, "Dies ist kein Unterstütztes Betriebssystem (oder es konnte nicht erkannt werden).", 5, 1000, 1)
EndIf
_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')
;Entpacke die VBS's an die vordefinierte Stelle
ShellExecuteWait($print_vbs, '-d"' & $driver_path & '" -s1')
_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)
;Schauen ob der alte Treiber noch installiert ist und entferne ihn dann
__driver_check($driver_old, $driver_processor, $driver_typ)
_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)
_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 & '"')
#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
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.
Example .......; Yes
;Beispiel: Win7 x64
__driver_check("KONICA MINOLTA C360SeriesPCL", "x64", "Typ 3 - Benutzermodus")
;Beispiel: WinXP x86
__driver_check("KONICA MINOLTA C360SeriesPCL", "Intel", "Windows 2000 und XP")
============================================================================================================
#ce
Func __driver_check($driver_name, $driver_processor, $driver_typ)
$wbemFRI = 0x10
$wbemFFO = 0x20
$printers = ""
$computer = "localhost"
$jumper = "rundll32 printui.dll,PrintUIEntry"
$wmis = ObjGet("winmgmts:\\" & $computer & "\root\CIMV2")
$printer = $wmis.ExecQuery("SELECT * FROM Win32_printer where local=true", "WQL", $wbemFRI + $wbemFFO)
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)
;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)
;Drucktreiber löschen
RunWait($jumper & ' /dd /m "' & $pr.DriverName & '" /h "' & $driver_processor & '" /v "' & $driver_typ & '"')
EndIf
EndIf
Next
Return 0
Else
Return 0
Endif
EndFunc
#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.
Example .......; Yes
[/autoit][autoit][/autoit][autoit];Zum Aufruf nach Beendigung des Scripts (z. B. durch EXIT)
OnAutoItExitRegister("_del_Driver")
============================================================================================================
#ce
Func _del_Driver()
[/autoit][autoit][/autoit][autoit]DirRemove($driver_path, 1)
BlockInput(0)
_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.