Ich habe ein Skript für Netzwerkdrucker erstellt, die über die Protokolle LPR oder Raw kommunizieren.
Folgende Einstellmöglichkeiten sind in opsi-configed in der Produktkonfiguration möglich:
druckerliste: Mehrere Drucker auf einmal installieren/deinstallieren
testpage: Bei "true" wird von allen ausgewählten Computern auf alle installierte Drucker eine Testseite gedruckt.
Folgende Schritte sind beim Hinzufügen eines neuen Druckers zu machen:
1. IP und genauen Namen des Druckertreibers herausfinden. Hier hat sich Powershell bewährt (vorausgesetzt man hat ein Rechner/Server, an dem der Drucker schon installiert ist) mit dem Befehl:
2. Namen des Druckers in die control Datei bei der ProductProperty "druckerliste" eintragen
3. Treiber in den ordner "driverfiles" kopieren. Am besten unterordner mit Hersteller und modell machen.
Ab hier wird die sub_install.ins bearbeitet
4. neue Variable für den treiber definieren
5. bei der Sektion [sub_setDriverPath] den Pfad zur Treiber.inf der neuen variable zuweisen. ACHTUNG! Der Pfad muss mit einzelnen UND doppelten Anführungszeichen umgeben sein. Also so: '"<Pfad>'" . Sonst kommt Windows nicht mit dem Befehl für die Druckerinstallation klar.
6. In der gleichen Sektion muss der Pfad zu den Treiberdateien dem Treibernamen zugeordnet werden (Nicht Druckername!)
7. In der Sektion [sub_setinfo] muss der Druckername, der Treibername, die IP und das Druckprotokoll entsprechend der Vorlage eingetragen werden. Wieder die Anführungszeichen bei $PrinterDriver$ beachten.
8. Das wars
Weitere nennenswerte Sachen:
Die IP wird in dem Skript auch für den Anschlussnamen verwendet. Bei der Variable $IP$ darf also wirklich nur die IP stehen
Bei der Deinstallation muss man die Drucker auswählen, die auch tatsächlich auf dem Rechner installiert sind. Bei falschen Druckern geht die Deinstallation trotzdem weiter.
Verbesserungen sind auf jeden Fall möglich und gern gesehen.
Tree
Code: Alles auswählen
CLIENT_DATA
├ Install.ins
├ Uninstall.ins
├ delsub.ins
├ sub_install.png
└ Folder
└ driverfiles
setup.ins
Code: Alles auswählen
ExitOnError=false
;Syntax Fehler werden in einem separaten Fenster angezeigt
ScriptErrorMessages=on
;Single-Step Mode nicht verwenden
TraceMode=off
;Im Batchmode das Winst-Fenster nicht im Vordergrund anzeigen
StayOnTop=false
[Actions]
;Name des Produkts (max. 12 Zeichen)
DefVar $ProductName$
Set $ProductName$ = "Drucker"
;Dateiname des Produktbildes mit Erweiterung
DefVar $ProductPicture$
Set $ProductPicture$ = ""
;Die Variable zur Auswertung des ExitCodes
DefVar $ExitCode$
;Vollständiger Produktname incl. Versionsnummer
DefVar $ProductNameFull1$
set $ProductNameFull1$ = "Drucker"
;Anzeigen der Installationsbenachrichtigung incl. des vollen Produktnamens
Message "Installiere "+$ProductNameFull1$
;Prüfen der Winst Version
requiredWinstVersion >= "4.11"
;$ProductPicture$ und $ProductName$ anzeigen
ShowBitmap /3 "%scriptpath%\" + $ProductPicture$ $ProductName$
;Freien Speicherplatz ermitteln
if not (HasMinimumSpace ("%SYSTEMDRIVE%", "500 MB"))
LogError "Nicht genügend Platz auf %SYSTEMDRIVE%"
isFatalError
endif
Message "Installiere "+$ProductNameFull1$
sub "%ScriptPath%\sub_install.ins"
uninstall.ins
Code: Alles auswählen
; Copyright (c) uib gmbh (www.uib.de)
; This sourcecode is owned by uib gmbh
; and published under the Terms of the General Public License.
; credits: http://www.opsi.org/credits/
[Actions]
requiredWinstVersion >= "4.10.8.6"
DefVar $MsiId$
DefVar $UninstallProgram$
DefVar $LogDir$
DefVar $ExitCode$
DefVar $ProductId$
DefVar $InstallDir$
DefVar $LicenseRequired$
DefVar $LicensePool$
Set $LogDir$ = "%SystemDrive%\tmp"
; ----------------------------------------------------------------
; - Please edit the following values -
; ----------------------------------------------------------------
Set $ProductId$ = "drucker"
Set $InstallDir$ = "%ProgramFiles32Dir%\<path to the product>"
Set $LicenseRequired$ = "false"
Set $LicensePool$ = "p_" + $ProductId$
; ----------------------------------------------------------------
comment "Show product picture"
ShowBitmap "%ScriptPath%\" + $ProductId$ + ".png" $ProductId$
Message "Uninstalling " + $ProductId$ + " ..."
if FileExists("%ScriptPath%\delsub.ins")
comment "Start uninstall sub section"
Sub "%ScriptPath%\delsub.ins"
endif
if $LicenseRequired$ = "true"
comment "Licensing required, free license used"
Sub_free_license
endif
[Sub_free_license]
comment "License management is enabled and will be used"
comment "Trying to free license used for the product"
DefVar $result$
Set $result$ = FreeLicense($LicensePool$)
; If there is an assignment of a license pool to the product, it is possible to use
; Set $result$ = FreeLicense("", $ProductId$)
;
; If there is an assignment of a license pool to a windows software id, it is possible to use
; DefVar $WindowsSoftwareId$
; $WindowsSoftwareId$ = "..."
; set $result$ = FreeLicense("", "", $WindowsSoftwareId$)
delsub.ins
Code: Alles auswählen
;general variables
DefStringList $PrinterNames$
DefVar $SP$
;Get Printers to uninstall
Set $PrinterNames$ = GetProductPropertyList ("druckerliste","None")
;start Subroutine uninstallPrinter for every Printer in List PrinterNames
for %s% in $PrinterNames$ do sub_uninstallPrinter
[sub_uninstallPrinter]
Set $SP$="%s%"
if not ( ( $SP$="None") or ( $SP$="default") )
WinBatch_uninstall
else
LogWarning "No Printer selected"
endif
[WinBatch_uninstall]
"C:\WINDOWS\system32\rundll32" printui.dll,PrintUIEntry /n "$SP$" /dl /q
sub_install.ins
Code: Alles auswählen
;general variables
DefStringList $PrinterNames$
DefVar $SP$
DefVar $IP$
DefVar $PrinterDriver$
DefVar $pr_p$
DefVar $sp_name$
DefVar $get_lpr_b$
DefVar $lpr_b$
DefVar $DriverPath$
DefVar $get_testpage$
DefVar $testpage$
;define variables for driver files
DefVar $br_mfc9342cdw$
DefVar $ky_universal_kpdl$
;Get Printers to install and set default Printer, if selected printers cannot be installed
Set $PrinterNames$ = GetProductPropertyList ("druckerliste","None")
;start Subroutine AddPrinter for every Printer in List PrinterNames
DosInAnIcon_copyDriver
for %s% in $PrinterNames$ do sub_AddPrinter
if $get_testpage$="True"
DosInAnIcon_testpage
endif
;----------------------------------------------------------------------------------
[sub_AddPrinter]
set $SP$="%s%"
;set IP and Drivername
sub_setInfo
;set DriverPath
sub_setDriverPath
;install Printer
if not ( ( $SP$ = "default" ) or ( $SP$= "" ) or ( $SP$ = "None" ) )
Message $SP$ + " wird installiert"
DosInAnIcon_drucker
endif
;----------------------------------------------------------------------------------
[DosInAnIcon_copyDriver]
robocopy /S %Scriptpath%\driverfiles C:\tmp
;----------------------------------------------------------------------------------
[DosInAnIcon_drucker]
;Druckeranschluss erstellen
cscript %System%\Printing_Admin_Scripts\de-DE\Prnport.vbs -a -r $IP$ -h $IP$ -o $pr_p$ $sp_name$ $lpr_b$
;Drucker installieren
%System%\rundll32.exe printui.dll,PrintUIEntry /if /b "$SP$" /f $DriverPath$ /r $IP$ /m $PrinterDriver$
[DosInAnIcon_testpage]
;print testpage
%System%\rundll32.exe printui.dll,PrintUIEntry /n "$SP$" /k
;----------------------------------------------------------------------------------
[sub_setDriverPath]
;set path to driver files
;local drivers
Set $br_mfc9342cdw$='"c:\tmp\brother\mfc-9342cdw\BRPRC12A.INF"'
Set $ky_universal_kpdl$='"c:\tmp\kyocera\universal\oemsetup.inf"'
if $PrinterDriver$='"Brother MFC-9342CDW Printer"'
Set $DriverPath$=$br_mfc9342CDW$
endif
if $PrinterDriver$='"Kyocera Classic Universaldriver KPDL"'
Set $DriverPath$ ='$ky_universal_kpdl$'
endif
[sub_setinfo]
if $SP$="None"
LogWarning "No Printer selected"
endif
if $SP$="E302 - Brother MFC-9342CDW"
Set $PrinterDriver$='"Brother MFC-9342CDW Printer"'
Set $IP$="10.10.10.179"
Set $pr_p$="lpr"
Set $sp_name$="-q lp"
Set $lpr_b$="-2e"
endif
if $SP$="K01x - Kyocera FS-1300D"
Set $PrinterDriver$='"Kyocera Classic Universaldriver KPDL"'
Set $IP$="10.10.10.207"
Set $pr_p$="raw"
Set $sp_name$="-n 9100"
Set $lpr_b$=""
endif
ProductProperties in OPSI/control
Code: Alles auswählen
[ProductProperty]
type: unicode
name: druckerliste
multivalue: True
editable: True
description: Liste aller Drucker
values: ["E302 - Brother MFC-9342CDW","K01x - Kyocera FS-1300D","None"]
default: ["None"]
[ProductProperty]
type: bool
name: testpage
description: Testseite drucken?
default: False
EDIT: sub_install.ins und control aktualisiert