drizzle
Goto Top

Lösung falls der Standarddrucker sich bei Citrix verstellt

Hier die Lösung für folgendes Problem: Windows (2003) Terminal Server, Roaming Profiles, mit Citrix Umgebung und Druckserver.
Wir benutzen sowohl "Fulldesktop", als auch "Shared Applications"
Problem dabei ist: Wenn sich ein Benutzer anmeldet, ist sein Standarddrucker verstellt und stattdessen ist ein willkürlicher Drucker gewählt oder der Citrix "Uniprint"-Drucker.

Nach Wochenlangem Testen und Rumprobieren, habe ich viele Fehlerquellen gefunden und auch beseitigen können. Dass der Drucker sich verstellt, hat folgende Ursachen:

Beim Anmelden auf die Citrixumgebung, erstellt Citrix die Drucker erst, NACHDEM das Profil des jeweiligen Users von Profilserver geladen wurde. Das heisst, dass der Standarddrucker, der im Profil hinterlegt ist, nicht eingestellt werden kann, da er noch gar nicht verfügbar ist.
Stattdessen wird der erste gewählt, der verfügbar ist oder der Drucker "Uniprint".


Damit der Drucker „Uniprint“ nicht als Standarddrucker gesetzt werden soll, müssen folgende Änderungen gemacht werden.
„Regedit“ starten und im Schlüssel:
HKLM\software\microsoft\windows nt\currentversion\winlogon\appsetup
Den Wert „Printerdefault.exe“ löschen.


Dies verhindert, dass der Citrix-eigene Drucker „Uniprint“ beim Anmelden als Standarddrucker gesetzt wird.


Jetzt komme ich zur eigentlichen Lösung. Erst die "einfache/umständliche" Version:

1.)

Jedem User wird ein Anmeldeskript (Batchfile) gegeben, in dem der Standarddrucker eingetragen wird.
Wobei %Standard% der Standarddruckename ist. Einfach die Zeile

rundll32 printui.dll,PrintUIEntry /y /n \\Druckerserver\%Standard% > NUL

im Editor einfügen und z.B.: als "Standarddrucker_Username.bat" speichern.
Jetzt ab ins "Active Directory" und dort dem jeweiligen User wählen. Rechtsklick -> Eigenschaften -> Profile und dann

unter "Logonskript" das jeweilige Skript auswählen. Fertig! Unschöne Lösung, deswegen:

2.)

Natürlich kann man jetzt auch ein Abmeldeskript per GPO einstellen. Dazu im Zweig Benutzerkonfiguration -> Windows Einstellungen -> Skripts (Anmelden/Abmelden) die Eigenschaften von „Abmelden“ konfigurieren und dort ein Skript einfügen, dass den Schlüssel mit dem Standarddrucker exportiert:


regedit /e %HOMESHARE%\Standarddrucker.reg "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\"

Und danach auch die Eigenschaften von „Abmelden“ konfigurieren und dort ein Skript einfügen, dass den Schlüssel mit dem Standarddrucker wieder importiertt:

regedit /s %HOMESHARE%\Standarddrucker.reg

Das war eine sehr schöne Lösung, bis bei mir jemand auf die Idee gekommen ist, dass User ja gar keinen Zugriff auf Registry Tools haben sollten... Da gings erst richtig los. Nach einigen Wochen und tausenden Lösungsversuchen habe ich jetzt folgende Lösung gefunden:

3.)

Im Active Directory die GPO für den Terminalserver öffnen.
Im Zweig Benutzerkonfiguration -> Windows Einstellungen -> Skripts (Anmelden/Abmelden) die Eigenschaften von „Abmelden“ konfigurieren. Auf Hinzufügen klicken und dort die Datei "Standarddrucker.vbs" mit folgendem Inhalt einfügen:


ON ERROR RESUME NEXT

ScriptLogName = "defprinter.log"

strComputer = "."

Set WshShell = WScript.CreateObject("WScript.Shell")
fTMP = WshShell.ExpandEnvironmentStrings("%HOMEDRIVE%")
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set inputFile = fso.OpenTextFile( "M:" & "\" & ScriptLogName, 2, True)

Set objWMIService = GetObject ("winmgmts:\\" & strComputer & "\root\cimv2")
Set colPrinters = objWMIService.ExecQuery ("Select * From Win32_Printer Where Default = TRUE")

For Each objPrinter in colPrinters
inputFile.WriteLine(objPrinter.ShareName)
Next


Dieses Skript erstellt auf dem Homelaufwerk M:\ des Benutzers eine Datei „defprinter.log“.
In dieser Datei wird der beim Abmelden eingestellte Standarddrucker eingetragen.

Jetzt kommt das Anmeldeskript. Aber dieses Skript kann nicht als Anmeldeskript funktionieren, weil ja noch gar keine Drucker vorhanden sind! Also muss man es auf den Terminalservern unter "...Dokumente und EInstellunge\All Users\Startmenu\Autostart" speichern!!! Dort eine (Verknüpfung zu einer) Batch-Datei mit folgendem Inhalt erstellen:


@echo off

:begin
REM Aus der vom Abmeldeskript gespeicherten Datei "defprinter.log" den Drucker extrahieren
for /F %%i in (%HOMEDRIVE%\defprinter.log) do set Standard=%%i
REM Falls kein STandarddrucker eingestellt wurde soll abgebrochen werden
IF "%Standard%" == "" GOTO Druckerwarnung
set /a test=1
:Start
REM Abfrage, ob der Drucker überhaupt schon verfügbar ist
reg query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices" >> M:\drucker.txt
find /I "\\Druckerserver\%Standard%" M:\drucker.txt
IF %ERRORLEVEL% == 1 GOTO Weiter
Goto End
:Weiter
REM Schleife die 6 Versuche mit 1000 ms Pause abfragt ob der Drucker schon vorhanden ist
PING 1.1.1.1 -n 1 -w 1000 > NUL
echo %test% "von 6 Versuchen"
set /a test=test+1
if %test% == 7 Goto WirklichSchluss
Goto Start
:End
REM Standarddrucker wird hinzugefügt
echo "Drucker wurde erfolgreich hinzugefuegt!"
rundll32 printui.dll,PrintUIEntry /y /n \\BY-DYDSRV\%Standard% > NUL
:WirklichSchluss
echo "Dieses Fenster schliesst sich von selbst..."
del M:\drucker.txt
goto:eof
:Druckerwarnung
"Es ist kein Standarddrucker eingetragen! Bitte Standarddrucker wählen!"
goto:eof


Dadurch wird der Standarddrucker abgefragt und wieder hinzugefügt und zwar ERST WENN ER VERFÜGBAR IST (Deswegen diese 6 Sekunden Verzögerung. EDIT: Habs jetzt bei uns sicherheitshalber auf 10 Versuche erhöht. )
Natürlich müssen für ALLE Ordner, in die von den Skripts Daten gespeichert werden, die Rechte umgestellt werden. Und zwar sollte "Jeder" User dort Lese- und Schreibrechte haben!!!! (MÖGLICHE FEHLERQUELLE!)

Aber wer jetzt denkt, das wars schon, der irrt! :D

Wir haben dann ja noch die Shared Applications eingeführt! SIE VERSTELLEN WIEDER DEN STANDARDDRUCKER!
Und zwar, weil bei ihnen kein Autostart-Skript läuft, da ja die Batch ohne explorer.exe und "Autostart im Startmenü" gar nicht gestartet wird. Jetzt wird aber beim Abmelden das Abmeldeskript ausgeführt und dieses speichert wieder gar keinen Drucker in die defprinter.log... -.-

Lösung:

Die Shared Applications Verknüpfungen sollen nicht auf das Programm verweisen, sondern auf eine Batch-Datei, die das Programm und das Standarddruckerskript startet!!!


Die Batch die gestartet wird, sieht dann zum Beispiel wie folgt aus:


REM Standarddruckerskript ausführen mit call, weil sonst das Batch-Fenster offen bleibt
call T:\Programs\Def_Prin\Def_Prin.bat
REM Programm starten
start "t:\programs\Internet Explorer\iexplore.exe"
exit


Manchmal müssen Programme auch mit "call" statt "start" gestartet werden. (z.B.: MMC.exe)

DAS WARS GLAUBE ICH face-smile
Ich hoffe einigen damit geholfen zu haben und wenn ihr Fehler entdeckt, dann sagt mir bescheid und ich korrigiere sie. Habe versucht es verständlich zu formulieren. Fragt, wenn ihr was nicht versteht! So long,

Drizzle

EDIT01: Ich habe die folgenden Zeilen aus dem Anmeldeskript gelöscht, weil sie wohl manchmal dazu führen, dass das Anmeldeskript nicht sauber ausgeführt wird!


REM Fenster minimiert starten
if not "%1"=="" goto %1
start /MIN cmd.exe /C "%~nx0 begin"
goto:eof

Dann ist das Fenster aber leider unschön bei jedem Anmelden zu sehen


EDIT02: Mir ist noch eine Lösung für euch eingefallen, aber da wir mit Thin-Clients arbeiten, funktioniert sie bei uns nicht. Wenn alle User mit Notebooks oder Desktop-PCs arbeiten, kann man auch in der "Citrix Presentation Server Console" folgende Einstellung machen: "Set default printer to the user's default printer"

c78a34332bca65687ce188477adfd82c-unbenannt

Dadurch wird der Drucker, der auf dem Notebook bzw. Desktop-Rechner als Standard gesetzt ist, direkt übernommen.

Content-Key: 91822

Url: https://administrator.de/contentid/91822

Printed on: April 24, 2024 at 05:04 o'clock

Mitglied: 63361
63361 Jul 21, 2008 at 07:03:09 (UTC)
Goto Top
Du bist mein Held heute face-smile

Vielen, vielen Dank... Wir hatten schon angefangen, für 300+ User jeweils eine eigene Druckerrichtlinie zu machen *umpf*

mfg, Schahn
Member: Flash600
Flash600 Jul 22, 2008 at 19:40:52 (UTC)
Goto Top
Hi,

warum alles so kompliziert?
Es gibt doch Richtlinien in Citrix.
Ich versteh nicht ganz das Problem. Wenn die Richtlinien und Berechtigungen richtig gesetzt sind, müsste es doch klappen.

mfg
freddy
Member: Drizzle
Drizzle Jul 23, 2008 at 11:03:54 (UTC)
Goto Top
Kannst mir gerne sagen, wie man die Berechtigungen und Richtlinien richtig setzt. Bei uns hat leider keine Einstellung geholfen, aber vielleicht haben wir etwas übersehen.
Member: Flash600
Flash600 Jul 23, 2008 at 14:27:09 (UTC)
Goto Top
Es stimmt, dass man an vielen Orten und ganz genau bei Citrix alles kontrollieren muss...
Ich hatte am Anfang selbst eine Menge Probleme mit den sch Druckern.
Ein Fehler (von mir) war, dass auf dem Citrix Server die Drucker installiert waren (also unter Start/Einstellungen/Drucker zu sehen) und dort nur die Standardberechtigungen u.a. "Benutzer - drucken". Und genau deshalb haben bei mir die Citrix-Regeln (zweck Standarddrucker) nicht richtig gegriffen, die Lösung war, auf den Druckern, die auf dem CitrixServer installiert sind, den Benutzern die Berechtigungen zu nehmen, dh. ich habe in den Sicherheitseinstellungen nur mehr den Admin drinnen. Danach griffen die Citrix-Richtlinien ohne Probleme.

Aber natürlich hängt es immer ab, wie, wo was gemappt wird... Bei Citrix muss man noch unter ICA-Protokoll genau kontrollieren, acht geben ob man nicht irgendeine Windows GPO gemacht hat usw..
Jedenfalls die Drucker-konfiguration-zuweisung bei Citrix ist wirklich nicht das gelbe vom Ei...
Mitglied: 63361
63361 Jul 23, 2008 at 19:09:48 (UTC)
Goto Top
Genau die Richtlinien sind ja das Problem. Wir haben 40 Aussenstellen mit je 3-5 Druckern, die alle am zentralen Druckserver hängen. Ich habe also 40 Richtlinien, die jedem MA einer Aussenstelle die Drucker seiner Aussenstelle verbindet. Allerdings will ja jeder der MA einen der verbundenen Drucker Drucker als Standarddrucker haben. Dafür müsste ich also für jeden der MA eine eigene Richtlinie machen (ca. 300 mit permanentem Pflegeaufwand).

Mit der Lösung von Drizzle kann ich mir das sparen. Jeder Nutzer legt einmal seinen Standarddrucker selber fest und gut.

Einfach perfekt face-smile

mfg, Schahn
Member: Flash600
Flash600 Jul 29, 2008 at 18:25:14 (UTC)
Goto Top
OK,
stimmt.
Ich werds auch mal testen (wenn ich dazu komme...)
Member: BK
BK Jul 30, 2008 at 08:59:40 (UTC)
Goto Top
Hallo,

welche Citrix Version? Für z.B. PS 4 gabs da einen Hotfix Rollup Pack PSE400W2K3R01.

http://support.citrix.com/article/CTX107504&searchID=20464753

Damit war bei uns das Problem erledigt. Und jeder hat seinen Standarddrucker und behält ihn auch.

mfg Beate
Mitglied: 63361
63361 Jul 30, 2008 at 09:07:48 (UTC)
Goto Top
Der Hotfix betrifft nur die Problematik des Standarddruckers für Clients, die einen solchen bereits eingerichtet haben und der dann in die Session reinverbunden wird.

Das Ganze funktioniert nicht bei Druckern, die erst beim Start der Session per Richtline als Netzwerkdrucker eingebunden werden (also auf dem Client-PC vorher nicht vorhanden sind). Dort ist Citrix meist zu langsam bei der Abarbeitung der Richtlinien, sodass Windows den im Userprofile gespeicherten Standarddrucker noch nicht vorfindet und daher einen beliebigen anderen Drucker als Standard setzt, so wie von Drizzle ganz oben beschrieben.

Es gibt derzeit von Citrix definitiv keine Lösung des Problems.

mfg, Schahn
Member: sp4c3
sp4c3 Jun 04, 2010 at 09:28:33 (UTC)
Goto Top
Mein Held... nach so langer Zeit geht mir endlich niemand mehr wegen seiner Drucker auf den Geist. DANKE :D
Member: goRaini
goRaini Sep 04, 2012 at 08:57:40 (UTC)
Goto Top
Danke für den tollen Beitrag. Auf diese Ideen wäre ich ansatzweise nicht gekommen, bin aber auch neu in Sachen Citrix.