Vorschlag wie man Drucker per Opsi installieren könnte?
Vorschlag wie man Drucker per Opsi installieren könnte?
Hallo Leute,
bei mir gedeiht das Projekt 'OPSI' ziemlich gut. Ich habe nahezu alle unsere 'Haupt'-Programme paketiert und kann sie verteilen.
Bald kann ich mit dem OPSI tatsächlich auf die Fläche gehen.
Es fehlen mir nur noch Servicepacks (OS + Office, wir haben leider keinen WSUS-Server) und die ganze Druckerlandschaft was Priorität 1 hat bevor es mit OPSI in den Echt-Betrieb gehen kann. Sicherlich gibt es noch einige Tools und Programmen die individuell bei uns eingesetzt werden. Aber das kommt nach und nach auf den OPSI.
Nun zu der Frage wegen den Druckern:
Wie verteilt ihr die Druckertreiber und Einstellungen?
Wir nutzen hauptsächlich Drucker von HP (2 verschiedene Modell) und haben auch noch 3 Kyocera 'All-in-One'-Stationen.
Ich höre immer wieder das Stichwort 'CUPS'. Dies ist ja ein Printserver (irgendwie mit Samba 4.x oder höher verknüpft so wie ich das überflogen habe).
Bevor ich da richtig viel Zeit hineinstecke, frage ich lieber erst einmal hier nach Erfahrungswerten und Vorgehensweisen von anderen OPSI-Administratoren. Kann man Druckertreiber und Einstellungen per OPSI verteilen? Direkt 'nur' mit OPSI oder in Verbindung mit eben CUPS o.ä.?
Und wenn Letzteres: wie sieht das ungefähr aus?
bei mir gedeiht das Projekt 'OPSI' ziemlich gut. Ich habe nahezu alle unsere 'Haupt'-Programme paketiert und kann sie verteilen.
Bald kann ich mit dem OPSI tatsächlich auf die Fläche gehen.
Es fehlen mir nur noch Servicepacks (OS + Office, wir haben leider keinen WSUS-Server) und die ganze Druckerlandschaft was Priorität 1 hat bevor es mit OPSI in den Echt-Betrieb gehen kann. Sicherlich gibt es noch einige Tools und Programmen die individuell bei uns eingesetzt werden. Aber das kommt nach und nach auf den OPSI.
Nun zu der Frage wegen den Druckern:
Wie verteilt ihr die Druckertreiber und Einstellungen?
Wir nutzen hauptsächlich Drucker von HP (2 verschiedene Modell) und haben auch noch 3 Kyocera 'All-in-One'-Stationen.
Ich höre immer wieder das Stichwort 'CUPS'. Dies ist ja ein Printserver (irgendwie mit Samba 4.x oder höher verknüpft so wie ich das überflogen habe).
Bevor ich da richtig viel Zeit hineinstecke, frage ich lieber erst einmal hier nach Erfahrungswerten und Vorgehensweisen von anderen OPSI-Administratoren. Kann man Druckertreiber und Einstellungen per OPSI verteilen? Direkt 'nur' mit OPSI oder in Verbindung mit eben CUPS o.ä.?
Und wenn Letzteres: wie sieht das ungefähr aus?
Re: Vorschlag wie man Drucker per Opsi installieren könnte?
Hallo,
hab eben folgendes gefunden.
wiki/doku.php?id=userspace:cups_printer ... []=printer
viewtopic.php?t=462
Vielleicht kannst du was damit, anfangen und mir Feedback geben, weil ich ebenfalls noch Drucker Installation einrichten muss.
Für Windows Updates usw, schau dir mal wsusoffline an.
hab eben folgendes gefunden.
wiki/doku.php?id=userspace:cups_printer ... []=printer
viewtopic.php?t=462
Vielleicht kannst du was damit, anfangen und mir Feedback geben, weil ich ebenfalls noch Drucker Installation einrichten muss.
Für Windows Updates usw, schau dir mal wsusoffline an.
Re: Vorschlag wie man Drucker per Opsi installieren könnte?
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
setup.ins
uninstall.ins
delsub.ins
sub_install.ins
ProductProperties in OPSI/control
EDIT: sub_install.ins und control aktualisiert
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:
Code: Alles auswählen
Get-Printer | select Name, DriverName, PortName
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
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"
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$)
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
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
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
Zuletzt geändert von boven am 09 Aug 2017, 11:43, insgesamt 2-mal geändert.
Re: Vorschlag wie man Drucker per Opsi installieren könnte?
hi,
wenn ihr ein active directory habt, würde ich das per gruppenrichtlinie lösen.
schöne grüße
richard
wenn ihr ein active directory habt, würde ich das per gruppenrichtlinie lösen.
schöne grüße
richard
Re: Vorschlag wie man Drucker per Opsi installieren könnte?
Ich will mich wieder, nach zahlreichen Verzögerungen wie andere Projekte, Urlaub usw., wieder meinem Lieblingsprojekt 'OPSI' widmen.
Ich habe das mit den Druckern immer noch nicht umgesetzt und will es nun angehen.
Die Anleitung von @boven gefällt mir und ich habe versucht diese nun umzusetzen.
Gleich zu Beginn sehe ich in den Product-Properties beim Eintrag 'spoolername' die Anschlussart 'LPT'.
Dann habe ich mir die anderen Einträge angeschaut und es schaut so aus als ob dieses Script für lokale Drucker (am LPT angeschlossene) gedacht ist.
Jetzt meine Frage: gibt es so etwas auch für Netzwerkdrucker?
Wenn nein: andere Ansätze?
@richik
Wir nutzen, entgegen meiner Überzeugung und unter allergrößtem Protest meinerseits, immer noch ein Windows Server 2003 als Domaincontroller.
Ich weiß nicht ob dir das bekannt ist, aber dieser ist nicht wirklich für GPOs in einem Netzwerk geeignet und vor allem dann wenn die Clients VIEL NEUER sind wie z.B. Win7 und Win10. Daher: AD mit Gruppenrichtlinien vielleicht irgendwann mal. Momentan jedoch unmöglich...
Ich habe das mit den Druckern immer noch nicht umgesetzt und will es nun angehen.
Die Anleitung von @boven gefällt mir und ich habe versucht diese nun umzusetzen.
Gleich zu Beginn sehe ich in den Product-Properties beim Eintrag 'spoolername' die Anschlussart 'LPT'.
Dann habe ich mir die anderen Einträge angeschaut und es schaut so aus als ob dieses Script für lokale Drucker (am LPT angeschlossene) gedacht ist.
Jetzt meine Frage: gibt es so etwas auch für Netzwerkdrucker?
Wenn nein: andere Ansätze?
@richik
Wir nutzen, entgegen meiner Überzeugung und unter allergrößtem Protest meinerseits, immer noch ein Windows Server 2003 als Domaincontroller.
Ich weiß nicht ob dir das bekannt ist, aber dieser ist nicht wirklich für GPOs in einem Netzwerk geeignet und vor allem dann wenn die Clients VIEL NEUER sind wie z.B. Win7 und Win10. Daher: AD mit Gruppenrichtlinien vielleicht irgendwann mal. Momentan jedoch unmöglich...
- SisterOfMercy
- Beiträge: 1527
- Registriert: 22 Jun 2012, 19:18
Re: Vorschlag wie man Drucker per Opsi installieren könnte?
I think it's necessary for the raw part of the driver. Furthermore, look at sub_install.ins and look at the ip addresses. Don't think these are local printers.IvicaE hat geschrieben:Gleich zu Beginn sehe ich in den Product-Properties beim Eintrag 'spoolername' die Anschlussart 'LPT'.
Dann habe ich mir die anderen Einträge angeschaut und es schaut so aus als ob dieses Script für lokale Drucker (am LPT angeschlossene) gedacht ist.
Jetzt meine Frage: gibt es so etwas auch für Netzwerkdrucker?
What's wrong with windows 2003?IvicaE hat geschrieben:Wir nutzen, entgegen meiner Überzeugung und unter allergrößtem Protest meinerseits, immer noch ein Windows Server 2003 als Domaincontroller.
Ich weiß nicht ob dir das bekannt ist, aber dieser ist nicht wirklich für GPOs in einem Netzwerk geeignet und vor allem dann wenn die Clients VIEL NEUER sind wie z.B. Win7 und Win10. Daher: AD mit Gruppenrichtlinien vielleicht irgendwann mal. Momentan jedoch unmöglich...
Anyway, I think you can get a few updates for w2k3 that have updated the GPO policies to include windows 7.
For simple policies you can get a new client with a registry scanner. Just edit a local policy, and search the registry for changes. I have all policies in a OPSI package.
Bitte schreiben Sie Deutsch, when I'm responding in the German-speaking part of the forum!
- SisterOfMercy
- Beiträge: 1527
- Registriert: 22 Jun 2012, 19:18
Re: Vorschlag wie man Drucker per Opsi installieren könnte?
BTW, I have a similar script, installing freePDF with a printer that uses the 'driver' from pdf24, because of all the variety in paper formats.
Using a newer version of redmon than delivered with freePDF. Also, I'm not using the freePDF installer, because that thing sucks.
Using a newer version of redmon than delivered with freePDF. Also, I'm not using the freePDF installer, because that thing sucks.
Code: Alles auswählen
; Copyright (c) uib gmbh (www.uib.de)
; This sourcecode is owned by uib
; and published under the Terms of the General Public License.
; credits: http://www.opsi.org/en/credits/
;
; License Management removed
[Actions]
;SetLogLevel=9
requiredWinstVersion >= "4.11.5.14"
;DefVar $MsiId32$
DefVar $UninstallProgram32$
;DefVar $MsiId64$
DefVar $UninstallProgram64$
DefVar $LogDir$
DefVar $ProductId$
DefVar $MinimumSpace$
DefVar $InstallDir32$
DefVar $InstallDir64$
DefVar $ExitCode$
DefVar $INST_SystemType$
;DefVar $INST_architecture$
DefVar $INST_MsVersion$
set $INST_MsVersion$ = GetMsVersionInfo
Set $INST_SystemType$ = GetSystemType
;set $INST_architecture$ = GetProductProperty("install_architecture","system specific")
Set $LogDir$ = "%SystemDrive%\tmp"
; ----------------------------------------------------------------
; - Please edit the following values -
; ----------------------------------------------------------------
;$ProductId$ should be the name of the product in opsi
; therefore please: only lower letters, no umlauts,
; no white space use '-' as a seperator
Set $ProductId$ = "freepdf"
Set $MinimumSpace$ = "500 MB"
; the path were we find the product after the installation
Set $InstallDir32$ = "%ProgramFiles32Dir%\FreePDF"
Set $InstallDir64$ = "%ProgramFiles64Dir%\FreePDF"
; ----------------------------------------------------------------
if not(HasMinimumSpace ("%SystemDrive%", $MinimumSpace$))
LogError "Not enough space on %SystemDrive%, " + $MinimumSpace$ + " on drive %SystemDrive% needed for " + $ProductId$
isFatalError
; Stop process and set installation status to failed
endif
if CompareDotSeparatedNumbers($INST_MsVersion$, "<", "5.1")
LogError "Windows XP or newer is required for " + $ProductId$
isFatalError
endif
comment "Show product picture"
ShowBitmap "%ScriptPath%\" + $ProductId$ + ".png" $ProductId$
if FileExists("%ScriptPath%\delsub3264.opsiscript")
comment "Start uninstall sub section"
Sub "%ScriptPath%\delsub3264.opsiscript"
endif
comment "installing"
if ($INST_SystemType$ = "x86 System")
;and ($INST_architecture$ = "system specific")) or ($INST_architecture$ = "both") or ($INST_architecture$ = "32 only")
Message "Installing " + $ProductId$ + "..."
comment "Install certificate"
DosInAnIcon_install_cert_32
comment "Copy files"
Files_install_32 /32Bit
Files_install_AllProfiles /AllNtUserProfiles
comment "Install Redmon"
Winbatch_install_32 /32Bit
Sub_check_exitcode
comment "Patch Registry"
Registry_install_freepdf_32 /32Bit
Registry_install_32 /32Bit
Registry_install_AllProfiles /AllNTUserDats
comment "Install FreePDF printer"
if (CompareDotSeparatedNumbers($INST_MsVersion$, ">=", "6"))
Winbatch_install_printer_NT6 /32Bit
else
Winbatch_install_printer_NT5 /32Bit
endif
Sub_check_exitcode
;Registry_install_printer /32Bit
comment "Create shortcuts"
LinkFolder_install_32
endif
if ($INST_SystemType$ = "64 Bit System")
;and (($INST_architecture$ = "system specific") or ($INST_architecture$ = "both") or ($INST_architecture$ = "64 only"))
Message "Installing " + $ProductId$ + "..."
comment "Install certificate"
DosInAnIcon_install_cert_64
comment "Copy files"
Files_install_64 /64Bit
Files_install_AllProfiles /AllNtUserProfiles
comment "Install Redmon"
Winbatch_install_64 /64Bit
Sub_check_exitcode
comment "Patch Registry"
Registry_install_freepdf_64 /32Bit
Registry_install_64 /64Bit
Registry_install_AllProfiles /AllNTUserDats
comment "Install FreePDF printer"
if (CompareDotSeparatedNumbers($INST_MsVersion$, ">=", "6"))
Winbatch_install_printer_NT6 /64Bit
else
Winbatch_install_printer_NT5 /64Bit
endif
Sub_check_exitcode
;Registry_install_printer /64Bit
comment "Create shortcuts"
LinkFolder_install_64
endif
[Winbatch_install_32]
"$InstallDir32$\redmon\setup.exe" /q
[Winbatch_install_64]
"$InstallDir64$\redmon\setup64.exe" /q
[DosInAnIcon_install_cert_32]
"%ScriptPath%\files\x86\certutil.exe" -addstore "TrustedPublisher" "%ScriptPath%\files\pdf24.cer"
[DosInAnIcon_install_cert_64]
"%ScriptPath%\files\x64\certutil.exe" -addstore "TrustedPublisher" "%ScriptPath%\files\pdf24.cer"
[Winbatch_install_printer_NT5]
; Create printer
"%SystemRoot%\system32\rundll32.exe" printui.dll,PrintUIEntry /q /if /b "FreePDF" /r "freepdfxp1:" /m "PDF24" /z /f "%ScriptPath%\files\printer_nt5\pdf24.inf"
; Restore settings
"%SystemRoot%\system32\rundll32.exe" printui.dll,PrintUIEntry /q /Sr /n "FreePDF" /a "%ScriptPath%\files\printer_nt5\settings.dat" d g r
; Instellingen global zijn 'printing defaults', per user gaat het via 'printing preferences'
; Set description and location
"%SystemRoot%\system32\rundll32.exe" printui.dll,PrintUIEntry /q /Xs /n "FreePDF" comment "PDF Printer"
"%SystemRoot%\system32\rundll32.exe" printui.dll,PrintUIEntry /q /Xs /n "FreePDF" location "Virtual"
[Winbatch_install_printer_NT6]
; Create printer
"%SystemRoot%\system32\rundll32.exe" printui.dll,PrintUIEntry /q /if /b "FreePDF" /r "freepdfxp1:" /m "PDF24" /z /f "%ScriptPath%\files\printer_nt6\pdf24.inf"
; Restore settings
"%SystemRoot%\system32\rundll32.exe" printui.dll,PrintUIEntry /q /Sr /n "FreePDF" /a "%ScriptPath%\files\printer_nt6\settings.dat" d g r
; Set description and location
"%SystemRoot%\system32\rundll32.exe" printui.dll,PrintUIEntry /q /Xs /n "FreePDF" comment "PDF Printer"
"%SystemRoot%\system32\rundll32.exe" printui.dll,PrintUIEntry /q /Xs /n "FreePDF" location "Virtual"
[Files_install_32]
copy -s "%ScriptPath%\files\redmon\*" "$InstallDir32$"
copy -s "%ScriptPath%\files\freepdf\*" "$InstallDir32$"
[Files_install_64]
copy -s "%ScriptPath%\files\redmon\*" "$InstallDir64$"
copy -s "%ScriptPath%\files\freepdf\*" "$InstallDir64$"
[Registry_install_freepdf_32]
openkey [HKEY_LOCAL_MACHINE\SOFTWARE\shbox\FreePdfXP]
set "Style" = "xp"
set "DefaultProfile" = "High Quality"
set "fpDir" = "$InstallDir32$\"
set "fpmailer" = "$InstallDir32$\fpmailer.exe"
set "gswin32c" = "%ProgramFiles32Dir%\ghostscript\bin\gswin32c.exe"
openkey [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
set "fpAssist" = "$InstallDir32$\fpAssist.exe"
[Registry_install_freepdf_64]
openkey [HKEY_LOCAL_MACHINE\SOFTWARE\shbox\FreePdfXP]
set "Style" = "xp"
set "DefaultProfile" = "High Quality"
set "fpDir" = "$InstallDir64$\"
set "fpmailer" = "$InstallDir64$\fpmailer.exe"
set "gswin32c" = "%ProgramFiles64Dir%\ghostscript\bin\gswin64c.exe"
openkey [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
set "fpAssist" = "$InstallDir64$\fpAssist.exe"
[Registry_install_32]
openkey [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Redirected Port\Ports\FreePDFXP1:]
set "Description" = "Redirected Port"
set "Command" = "$InstallDir32$\redrun.exe"
set "Arguments"='"$InstallDir32$\fpRedMon.exe" %1'
set "Printer" = "FreePDF"
;set "Printer" = ""
set "Output" = REG_DWORD:00000000
set "ShowWindow" = REG_DWORD:00000002
set "RunUser" = REG_DWORD:00000000
set "Delay" = REG_DWORD:0x0000012c
set "LogFileUse" = REG_DWORD:00000000
set "LogFileName" = ""
set "LogFileDebug" = REG_DWORD:00000000
set "PrintError" = REG_DWORD:00000000
[Registry_install_64]
openkey [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Redirected Port\Ports\FreePDFXP1:]
set "Description" = "Redirected Port"
set "Command" = "$InstallDir64$\redrun.exe"
set "Arguments"='"$InstallDir64$\fpRedMon.exe" %1'
set "Printer" = "FreePDF"
;set "Printer" = ""
set "Output" = REG_DWORD:00000000
set "ShowWindow" = REG_DWORD:00000002
set "RunUser" = REG_DWORD:00000000
set "Delay" = REG_DWORD:0x0000012c
set "LogFileUse" = REG_DWORD:00000000
set "LogFileName" = ""
set "LogFileDebug" = REG_DWORD:00000000
set "PrintError" = REG_DWORD:00000000
[Registry_install_AllProfiles]
openkey [HKEY_CURRENT_USER\Software\shbox\FreePdfXP]
set "language" = "2"
set "ViewGsLog" = "1"
set "DefaultProfile" = "High Quality"
set "psdir" = "%userprofiledir%\Local Settings\Application Data\FreePDF_XP\"
set "FreePDFSize" = "5895#4305"
; Remove stored start menu order
deletekey [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Start Menu]
[LinkFolder_install_32]
set_basefolder common_programs
set_subfolder "FreePDF"
set_link
name: "FreePDF"
target: "$InstallDir32$\freepdf.exe"
parameters:
working_dir: "$InstallDir32$"
icon_file: "$InstallDir32$\freepdf.exe"
icon_index: 0
end_link
set_link
name: "FreePDF Config"
target: "$InstallDir32$\fpUCnfg.exe"
parameters:
working_dir: "$InstallDir32$"
icon_file: "$InstallDir32$\fpUCnfg.exe"
icon_index: 0
end_link
set_link
name: "FreePDF Join"
target: "$InstallDir32$\fpjoin.exe"
parameters:
working_dir: "$InstallDir32$"
icon_file: "$InstallDir32$\fpjoin.exe"
icon_index: 0
end_link
set_link
name: "FreePDF Manual"
target: "$InstallDir32$\FreePDFen.pdf"
parameters:
working_dir: "$InstallDir32$"
icon_file:
icon_index:
end_link
[LinkFolder_install_64]
set_basefolder common_programs
set_subfolder "FreePDF"
set_link
name: "FreePDF"
target: "$InstallDir64$\freepdf.exe"
parameters:
working_dir: "$InstallDir64$"
icon_file: "$InstallDir64$\freepdf.exe"
icon_index: 0
end_link
set_link
name: "FreePDF Config"
target: "$InstallDir64$\fpUCnfg.exe"
parameters:
working_dir: "$InstallDir64$"
icon_file: "$InstallDir64$\fpUCnfg.exe"
icon_index: 0
end_link
set_link
name: "FreePDF Join"
target: "$InstallDir64$\fpjoin.exe"
parameters:
working_dir: "$InstallDir64$"
icon_file: "$InstallDir64$\fpjoin.exe"
icon_index: 0
end_link
set_link
name: "FreePDF Manual"
target: "$InstallDir64$\FreePDFen.pdf"
parameters:
working_dir: "$InstallDir64$"
icon_file:
icon_index:
end_link
[Sub_check_exitcode]
comment "Test for installation success via exit code"
set $ExitCode$ = getLastExitCode
; informations to exit codes see
; http://msdn.microsoft.com/en-us/library/aa372835(VS.85).aspx
; http://msdn.microsoft.com/en-us/library/aa368542.aspx
if ($ExitCode$ = "0")
comment "Looks good: setup program gives exitcode zero"
else
if ($ExitCode$ = "1")
comment "Looks good: RedMon already installed!"
else
comment "Setup program gives a exitcode unequal zero: " + $ExitCode$
if ($ExitCode$ = "1605")
comment "ERROR_UNKNOWN_PRODUCT 1605 This action is only valid for products that are currently installed."
comment "Uninstall of a not installed product failed - no problem"
else
if ($ExitCode$ = "1641")
comment "looks good: setup program gives exitcode 1641"
comment "ERROR_SUCCESS_REBOOT_INITIATED 1641 The installer has initiated a restart. This message is indicative of a success."
else
if ($ExitCode$ = "3010")
comment "looks good: setup program gives exitcode 3010"
comment "ERROR_SUCCESS_REBOOT_REQUIRED 3010 A restart is required to complete the install. This message is indicative of a success."
else
logError "Fatal: Setup program gives an unknown exitcode unequal zero: " + $ExitCode$
isFatalError
endif
endif
endif
endif
endif
Bitte schreiben Sie Deutsch, when I'm responding in the German-speaking part of the forum!
Re: Vorschlag wie man Drucker per Opsi installieren könnte?
SisterofMercy hat Recht, das Skript wird hauptsächlich für Netzwerkdrucker eingesetzt. Wir müssen bei einigen Druckern LPR als Druckprotokoll einsetzen, diese sind aber auch übers Netzwerk erreichbar. Ich habe das Skript in abgeänderter From im Einsatz und es läuft sehr zuverlässig.
Ich habe die Optionen zum Setzen des Druckprotokolls für jeden Drucker direkt in die sub_install.ins reingeschrieben, da das Protokoll sich für gewöhnlich nicht ändert. damit fallen auch die dazugehörigen Properties weg.
Hier ist die aktuelle sub_install.ins:
und hier die aktuelle control:
Die anderen Dateien haben sich nicht geändert.
Vielleicht lege ich mal einen neuen Wiki-Eintrag an, wenn ich die Zeit dafür finde.
Ich habe die Optionen zum Setzen des Druckprotokolls für jeden Drucker direkt in die sub_install.ins reingeschrieben, da das Protokoll sich für gewöhnlich nicht ändert. damit fallen auch die dazugehörigen Properties weg.
Hier ist die aktuelle 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
Code: Alles auswählen
[Package]
version: 1
depends:
incremental: False
[Product]
type: localboot
id: drucker
name: Drucker Verwaltung
description:
advice:
version: 1.0
priority: 0
licenseRequired: False
productClasses:
setupScript: setup.ins
uninstallScript: uninstall.ins
updateScript:
alwaysScript:
onceScript:
customScript:
userLoginScript:
[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
Vielleicht lege ich mal einen neuen Wiki-Eintrag an, wenn ich die Zeit dafür finde.
Re: Vorschlag wie man Drucker per Opsi installieren könnte?
@boven
Ich war jetzt lange im Urlaub und noch länger vom Projekt 'opsi' weg.
Daher bitte ich um Entschuldigung wenn ich blöd frage:
>>Die anderen Dateien haben sich nicht geändert.<<
Welche 'andere Dateien'?
Wo finde ich das komplette Script? Und wenn ich es gefunden habe ersetze ich Abschnitte durch die hier geposteten Abschnitte und passe noch an meine Bedürfnisse an, richtig?
@SisterOfMercy
Win2K3 mit GPO funktioniert in unserer Domäne nur sehr schlecht. Ich habe beschlossen mehr und mehr auf GPO zu gehen wenn wir endlich neue Server einsetzten. Jetzt wechseln wir aber erst einmal unser ERP (mal wieder) und dann wird wohl Zeit sein für alle anderen aufgeschobenen Projekte...
Ich war jetzt lange im Urlaub und noch länger vom Projekt 'opsi' weg.
Daher bitte ich um Entschuldigung wenn ich blöd frage:
>>Die anderen Dateien haben sich nicht geändert.<<
Welche 'andere Dateien'?
Wo finde ich das komplette Script? Und wenn ich es gefunden habe ersetze ich Abschnitte durch die hier geposteten Abschnitte und passe noch an meine Bedürfnisse an, richtig?
@SisterOfMercy
Win2K3 mit GPO funktioniert in unserer Domäne nur sehr schlecht. Ich habe beschlossen mehr und mehr auf GPO zu gehen wenn wir endlich neue Server einsetzten. Jetzt wechseln wir aber erst einmal unser ERP (mal wieder) und dann wird wohl Zeit sein für alle anderen aufgeschobenen Projekte...
Re: Vorschlag wie man Drucker per Opsi installieren könnte?
mit "die anderen Dateien" meine ich unistall.ins, setup.ins etc.
Ich habe bereits die Änderungen in meinen ersten beitrag vorgenommen. Du kannst das komplette Skript von da übernehmen.
Ich habe bereits die Änderungen in meinen ersten beitrag vorgenommen. Du kannst das komplette Skript von da übernehmen.