Vorschlag wie man Drucker per Opsi installieren könnte?

IvicaE
Beiträge: 136
Registriert: 13 Sep 2016, 14:10

Vorschlag wie man Drucker per Opsi installieren könnte?

Beitrag von IvicaE »

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?
Avira
Beiträge: 36
Registriert: 22 Mär 2017, 15:29

Re: Vorschlag wie man Drucker per Opsi installieren könnte?

Beitrag von Avira »

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.
boven
Beiträge: 9
Registriert: 30 Mai 2017, 08:46

Re: Vorschlag wie man Drucker per Opsi installieren könnte?

Beitrag von boven »

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:

Code: Alles auswählen

Get-Printer | select Name, DriverName, PortName
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
Zuletzt geändert von boven am 09 Aug 2017, 11:43, insgesamt 2-mal geändert.
richik
Beiträge: 10
Registriert: 13 Sep 2016, 00:48
Wohnort: Vösendorf, AT
Kontaktdaten:

Re: Vorschlag wie man Drucker per Opsi installieren könnte?

Beitrag von richik »

hi,

wenn ihr ein active directory habt, würde ich das per gruppenrichtlinie lösen.

schöne grüße

richard
IvicaE
Beiträge: 136
Registriert: 13 Sep 2016, 14:10

Re: Vorschlag wie man Drucker per Opsi installieren könnte?

Beitrag von IvicaE »

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... :(
Benutzeravatar
SisterOfMercy
Beiträge: 1522
Registriert: 22 Jun 2012, 19:18

Re: Vorschlag wie man Drucker per Opsi installieren könnte?

Beitrag von SisterOfMercy »

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?
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: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... :(
What's wrong with windows 2003? :D
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!
Benutzeravatar
SisterOfMercy
Beiträge: 1522
Registriert: 22 Jun 2012, 19:18

Re: Vorschlag wie man Drucker per Opsi installieren könnte?

Beitrag von SisterOfMercy »

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.

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!
boven
Beiträge: 9
Registriert: 30 Mai 2017, 08:46

Re: Vorschlag wie man Drucker per Opsi installieren könnte?

Beitrag von boven »

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:

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

und hier die aktuelle control:

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
Die anderen Dateien haben sich nicht geändert.

Vielleicht lege ich mal einen neuen Wiki-Eintrag an, wenn ich die Zeit dafür finde.
IvicaE
Beiträge: 136
Registriert: 13 Sep 2016, 14:10

Re: Vorschlag wie man Drucker per Opsi installieren könnte?

Beitrag von IvicaE »

@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...
boven
Beiträge: 9
Registriert: 30 Mai 2017, 08:46

Re: Vorschlag wie man Drucker per Opsi installieren könnte?

Beitrag von boven »

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.
Antworten