» Tag "Drucker"  »  1 Beitrag vorhanden

Zuletzt verwendeten Standard-Drucker, bei Anmeldung erneut festlegen (ohne GPO)

Dienstag, 14. Juni 2016 - 13:49 Uhr  |  Kategorie: Errors, Solutions & Workarounds  |  Kommentare (0)

Der Titel für diesen Beitrag zu wählen war schon eine Herausforderung an sich :D

Die ursprüngliche Herausforderung war jedoch ein schneller Workaround für unseren Terminalserver, der es ermöglicht, den zuletzt verwendeten Standard-Drucker nach der nächsten Anmeldung an einem der Terminalserver erneut zur als Standard-Drucker zu definieren.

Wir haben eine Printer-GPO die nach der Anmeldung alle notwendigen Drucker verbindet, jedoch keine Standard-Drucker vorgibt.
Der User kann seinen Standard-Drucker selbst festlegen und dieser sollte (wie auch auf den W7-Workstations) nach einem erneuten Login erhalten bleiben.

Auf den 2012R2-Server passiert das aus misteriösen Gründen nicht. Und so machte ich mich im Netz auf die Suche nach einer zielführenden Lösung des Problems und wurde nicht wirklich fündig.
Ein Workaround musste her und so suchte ich nach einem Tool, das den Standard-Drucker vor der Abmeldung ausliest und nach der Anmeldung wieder setzt.
Es gibt viele Programme die es ermöglichen den Standarddrucker nach der Anmeldung zu setzen. Leider konnte ich kein Programm finden, welches sich den letzten Standard-Drucker merkt und diesen nach der Anmeldung setzen kann.

Selbst ist der IT-ler. Und so habe ich ein kleines Tool in AutoIt gebaut, dass genau diese Funktion beherscht und die User somit wieder glücklich sind.

Um das Tool einfach in den Autostart schmeißen zu können und nicht extra eine Richtlinie mit Loopback-Verarbeitung erstellen zu müssen, läuft das Tool im Hintergrund, prüft alle 10 Minuten den aktuellen Standard-Drucker und speichert diesen in einer Datei im Profil des Benutzers.

Nach der Anmeldung startet das Programm und liest den Drucker aus der Datei und setzt diesen als Standard-Drucker.
Anschließend läuft es wieder im Hintergrund und wartet auf Änderungen.

#include <WinAPI.au3>
#include <FileConstants.au3>
#include <WinAPIFiles.au3>
#include <File.au3>

$STD_Printer = ""
$DefaultPrinterFile = @AppDataDir & "\default_printer"

If FileExists($DefaultPrinterFile) Then

	;ConsoleWrite("Datei existiert" & @CRLF)

	$hFileOpen = FileOpen($DefaultPrinterFile, $FO_READ)
	$sFileRead = FileRead($hFileOpen)

	If $sFileRead <> "" Then
		If _WinAPI_SetDefaultPrinter ( $sFileRead ) Then
			ConsoleWrite("Drucker '" & $sFileRead & "' als Standarddrucker gesetzt" & @CRLF)
			$STD_Printer = $sFileRead
		Else
			MsgBox(0,"",$sFileRead & " konnte nicht als Standarddrucker gesetzt werden");
		EndIf
	EndIf

Else
	_FileCreate($DefaultPrinterFile)
EndIf

While 1

	$strComputer = "."

	$objWMIService = ObjGet ("winmgmts:\\" & $strComputer & "\root\cimv2")
	$colPrinters = $objWMIService.ExecQuery ("Select * From Win32_Printer Where Default = True")

	For $objPrinter in $colPrinters
			If $objPrinter.Name <> $STD_Printer Then
				$hFileOpen = FileOpen($DefaultPrinterFile, $FO_OVERWRITE)
				FileWrite($hFileOpen, $objPrinter.Name)
				$STD_Printer = $objPrinter.Name
				ConsoleWrite("Drucker '" & $STD_Printer & "' als Standarddrucker gesichert" & @CRLF)
			EndIf
	Next

	Sleep(600000)

WEnd

Der Code kann gern übernommen und/oder weiterentwickelt werden (über einen Link zum Beitrag freue ich mich natürlich trotzdem)


Tags: WindowsTerminalserverScriptAutomatisierungGPOAutoitDrucker

Gravatar-Profilbild

SANDRO WIENBERG

Hier schreibe ich über alles, was mir in meinem Alltag über den Weg läuft...

Als IT-Systemadministrator in einem mittelständischen Unternehmen und als technikaffiner Mensch in der Freizeit, gibt es häufig Themen, Probleme oder Interessantes worüber ich einfach schreiben möchte..

Profil auf www.geocaching.com

2018


2017


2016


2015


2014


2013

Top