Netzwerkdrucker mappen anhand PC und Druckerliste
Hallo allerseits
Wir migrieren unsere IT Umgebung von veralteten Windows 7 PCs zu neuen Windows 10 PCs.
Im Hintergrund laufen bereits Server 2012R2 und teilweise 2016.
Aktuell werden die Druckermappings anhand eines KIX Script bewerkstellgt, welches auf eine .ini Datei zugreift
in welcher die PCs aufgelistet sind und welche Drucker sie erhalten sollen und welches dieser gemappten Drucker der Standard sein soll.
Das funktioniert soweit auch sehr gut, allerdings wollen wir in die neue Umgebung das KIX nicht mehr mitnehmen, bzw. wollen wir
möglichst alles (oder viel) mit GPOs, GPPs und PowerShell machen, im Extremfall VBS oder .bat.
Jetzt werden wohl viele sagen, wir sollen das Mapping mit GPOs/GPP machen, das haben wir auch schon angeschaut, jedoch wäre es für unsere
Umgebung nicht praktisch, bzw. zu komplex und würden unser Ziel nicht erreichen.
Wir betreuen ca. 180 PCs und ca. 70 Drucker, welche teilweise in Einzelbüros sind, oder die Mitarbeiter der gleichen Abteilung über diverse
Stockwerke und Büros verteilt sind, und dementsprechend unterschiedliche Drucker haben, und auch andere Geräte als Standard definiert sind.
Unser Wunsch wäre es nun, einen Login Script, vorzugsweise PowerShell, oder eins welches wir als GPO verteilen könnten zu erstellen,
das immer gleich bleibt, und wir nur die Liste der PCs und Drucker, bzw. welcher Drucker welchem PC zugewiesen ist bearbeiten müssten.
Klappere das Netz seit Tagen ab nach einer solchen Lösung, werde aber einfach nicht fündig, und kann mir nicht vorstellen, dass wir die Einzigen
sind mit solch einem Bedürfnis.
Wir sind natürlich auch für jeglichen anderen praktischen Ansatz dankbar. Wichtig ist für uns, dass es einfach zu Administrieren ist, bzw. möglichst
wenig Administrations Aufwand benötigt, da wir ein ziemlich kleines Team sind.
Hoffe, dass uns jemand helfen kann, und bedanken uns im Vorab für die Unterstützung.
Gruss
WBZ-ITS
Wir migrieren unsere IT Umgebung von veralteten Windows 7 PCs zu neuen Windows 10 PCs.
Im Hintergrund laufen bereits Server 2012R2 und teilweise 2016.
Aktuell werden die Druckermappings anhand eines KIX Script bewerkstellgt, welches auf eine .ini Datei zugreift
in welcher die PCs aufgelistet sind und welche Drucker sie erhalten sollen und welches dieser gemappten Drucker der Standard sein soll.
Das funktioniert soweit auch sehr gut, allerdings wollen wir in die neue Umgebung das KIX nicht mehr mitnehmen, bzw. wollen wir
möglichst alles (oder viel) mit GPOs, GPPs und PowerShell machen, im Extremfall VBS oder .bat.
Jetzt werden wohl viele sagen, wir sollen das Mapping mit GPOs/GPP machen, das haben wir auch schon angeschaut, jedoch wäre es für unsere
Umgebung nicht praktisch, bzw. zu komplex und würden unser Ziel nicht erreichen.
Wir betreuen ca. 180 PCs und ca. 70 Drucker, welche teilweise in Einzelbüros sind, oder die Mitarbeiter der gleichen Abteilung über diverse
Stockwerke und Büros verteilt sind, und dementsprechend unterschiedliche Drucker haben, und auch andere Geräte als Standard definiert sind.
Unser Wunsch wäre es nun, einen Login Script, vorzugsweise PowerShell, oder eins welches wir als GPO verteilen könnten zu erstellen,
das immer gleich bleibt, und wir nur die Liste der PCs und Drucker, bzw. welcher Drucker welchem PC zugewiesen ist bearbeiten müssten.
Klappere das Netz seit Tagen ab nach einer solchen Lösung, werde aber einfach nicht fündig, und kann mir nicht vorstellen, dass wir die Einzigen
sind mit solch einem Bedürfnis.
Wir sind natürlich auch für jeglichen anderen praktischen Ansatz dankbar. Wichtig ist für uns, dass es einfach zu Administrieren ist, bzw. möglichst
wenig Administrations Aufwand benötigt, da wir ein ziemlich kleines Team sind.
Hoffe, dass uns jemand helfen kann, und bedanken uns im Vorab für die Unterstützung.
Gruss
WBZ-ITS
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 334155
Url: https://administrator.de/forum/netzwerkdrucker-mappen-anhand-pc-und-druckerliste-334155.html
Ausgedruckt am: 23.04.2025 um 01:04 Uhr
19 Kommentare
Neuester Kommentar
Hi,
ja, damit biste ganz alleine auf der Welt ...
Wir haben ein paar Tausend Clients und Drucker und das selbe Problem. Wir haben und dafür aber ne eigene Anwendung programmiert. Bei uns kommt noch hinzu, dass wir das unter Terminalserver betreiben. Die Clients sind in der Mehrheit keine Windows Kisten. Die Drucker sind alle zentral am Printserver installiert. Die Drucker fast alle per TCP/IP am LAN. Die lokal per USB angeschlossenen haben wir unter Windows Clients freigegeben bzw. an Linux Thin Clients per LPR verfügbar und dann trotzdem nochmal am Printsrver installiert. In den TS-Sitzungen werden dann alle Drucker über den Printserver verbunden.
Unser Programm hat früher auch mit einer Datendatei gearbeitet (heute sind die Daten im AD gespeichert). 1. Spalte der Clientname. 2. Spalte der UNC des Druckers vom Printserver.
Wenn ein Client mehrere Drucker hat, dann galt, 1. Zeile für diesen Clientnamen bestimmt den Standarddrucker.
Das Script muss nur die Zeilen der Reihe nach abarbeiten. Erste Spalte vergleichen mit dem lokalen Clientnamen. Wenn Treffer, dann den Drucker aus 2. Spalte verbinden. Das ist kein Hexenwerk.
E.
ja, damit biste ganz alleine auf der Welt ...
Wir haben ein paar Tausend Clients und Drucker und das selbe Problem. Wir haben und dafür aber ne eigene Anwendung programmiert. Bei uns kommt noch hinzu, dass wir das unter Terminalserver betreiben. Die Clients sind in der Mehrheit keine Windows Kisten. Die Drucker sind alle zentral am Printserver installiert. Die Drucker fast alle per TCP/IP am LAN. Die lokal per USB angeschlossenen haben wir unter Windows Clients freigegeben bzw. an Linux Thin Clients per LPR verfügbar und dann trotzdem nochmal am Printsrver installiert. In den TS-Sitzungen werden dann alle Drucker über den Printserver verbunden.
Unser Programm hat früher auch mit einer Datendatei gearbeitet (heute sind die Daten im AD gespeichert). 1. Spalte der Clientname. 2. Spalte der UNC des Druckers vom Printserver.
Wenn ein Client mehrere Drucker hat, dann galt, 1. Zeile für diesen Clientnamen bestimmt den Standarddrucker.
Das Script muss nur die Zeilen der Reihe nach abarbeiten. Erste Spalte vergleichen mit dem lokalen Clientnamen. Wenn Treffer, dann den Drucker aus 2. Spalte verbinden. Das ist kein Hexenwerk.
E.
Hi
Zielgruppenadressierung oder WMI Filterung anhand der IP Adresse wäre auch möglich, sofern:
Wir haben alle Büroabschnitte in separate VLANs unterteilt und konnten das darüber steuern, die Kollegen haben dann jeweils max. 3 Drucker vorgegeben (Etagengeräte).
Davon wollen wir allerdings weg und auf "FollowMe"(?) Printing umstellen, des weiteren haben wir vor kurzen alle Bürodrucker aus den Büros genommen (mit Ausnahme von Personalbezogenen Büros), so das die Kollegen nur noch die Etagedrucker haben - hat zwar zu einigen "Konflikten" geführt sich aber schlussendlich gelegt (Druckvolumen um ca. 30% zurück gegangen
).
Gruß
@clSchak
Zielgruppenadressierung oder WMI Filterung anhand der IP Adresse wäre auch möglich, sofern:
- das Netz via VLAN segmentiert ist, so das es möglich ist
Wir haben alle Büroabschnitte in separate VLANs unterteilt und konnten das darüber steuern, die Kollegen haben dann jeweils max. 3 Drucker vorgegeben (Etagengeräte).
Davon wollen wir allerdings weg und auf "FollowMe"(?) Printing umstellen, des weiteren haben wir vor kurzen alle Bürodrucker aus den Büros genommen (mit Ausnahme von Personalbezogenen Büros), so das die Kollegen nur noch die Etagedrucker haben - hat zwar zu einigen "Konflikten" geführt sich aber schlussendlich gelegt (Druckvolumen um ca. 30% zurück gegangen
Gruß
@clSchak
Hi
was genau ist denn eure Zielsetzung? Eure Lösung bedeutet ja im Endefekkt immer, das ihr beim erstellen eines neuen Clients eine Liste manuell pflegen müsst.
Das wäre mir jetzt doch zu viel Arbeit und vor allem zu lästig, weil ja ständig jemand anruft und einen anderen Drucker will.
Für mich wäre die "Einsteigerlösung" die nötigen Drucker eines Gebäudes oder Stockwerks in eine Gruppenrichtlinie zu pressen und dafür sorgen, das diese auf dem Client ausgeführt wird.
Also z.B Richtlinie Printer_Buchhaltung -> die Drucker "BuchhaltungFarblaser" und "BuchhaltungBriefkopf" einfügen.
Jetzt kannst du bei entsprechender OU-gestaltung die Richtlinie in die BuHa OU stecken, oder einfach nur die entsprechenden Clients zum ausführen der RL berechtigen. Per GPPs lässt sich das sogar nich flexiebler und bequemer machen.
Dann müsstest du in Zukunft, wenn ein neuer Drucker da hingestellt wird, diesen nur noch in die RL eingeben und alle Clients haben ihn direkt eingebunden.
Und man kann das ganze dann z.B auch gleich für Notebooks ganz toll machen. Man kann zusätzlich eine Richtlinie für die einzelnen IP-Bereiche machen. Wenn der Client sich z.B im Netz 10.10.0.1-254 befindet, kann man gleich mal die Drucker "München1-5" einbinden, weil sich der Client dann in München befindet. Toll für Kollegen, die zwischen den Niederlassungen wechseln usw.
Kurz: Die GPO/GPPs machen es einem da eigentlich sehr leicht, sich nie wieder um die Drucker kümmern zu müssen, wenn man es ein mal richtig aufgesetzt hat.
Und Standarddrucker sollte der Client selbst setzen. Das bleibt ja im Profil des Users gespeichert. Wenn er einen gewissen Drucker als Standard will, soll er das setzen und auch behalten dürfen. Hat ja einen Grund, warum er das macht
was genau ist denn eure Zielsetzung? Eure Lösung bedeutet ja im Endefekkt immer, das ihr beim erstellen eines neuen Clients eine Liste manuell pflegen müsst.
Das wäre mir jetzt doch zu viel Arbeit und vor allem zu lästig, weil ja ständig jemand anruft und einen anderen Drucker will.
Für mich wäre die "Einsteigerlösung" die nötigen Drucker eines Gebäudes oder Stockwerks in eine Gruppenrichtlinie zu pressen und dafür sorgen, das diese auf dem Client ausgeführt wird.
Also z.B Richtlinie Printer_Buchhaltung -> die Drucker "BuchhaltungFarblaser" und "BuchhaltungBriefkopf" einfügen.
Jetzt kannst du bei entsprechender OU-gestaltung die Richtlinie in die BuHa OU stecken, oder einfach nur die entsprechenden Clients zum ausführen der RL berechtigen. Per GPPs lässt sich das sogar nich flexiebler und bequemer machen.
Dann müsstest du in Zukunft, wenn ein neuer Drucker da hingestellt wird, diesen nur noch in die RL eingeben und alle Clients haben ihn direkt eingebunden.
Und man kann das ganze dann z.B auch gleich für Notebooks ganz toll machen. Man kann zusätzlich eine Richtlinie für die einzelnen IP-Bereiche machen. Wenn der Client sich z.B im Netz 10.10.0.1-254 befindet, kann man gleich mal die Drucker "München1-5" einbinden, weil sich der Client dann in München befindet. Toll für Kollegen, die zwischen den Niederlassungen wechseln usw.
Kurz: Die GPO/GPPs machen es einem da eigentlich sehr leicht, sich nie wieder um die Drucker kümmern zu müssen, wenn man es ein mal richtig aufgesetzt hat.
Und Standarddrucker sollte der Client selbst setzen. Das bleibt ja im Profil des Users gespeichert. Wenn er einen gewissen Drucker als Standard will, soll er das setzen und auch behalten dürfen. Hat ja einen Grund, warum er das macht
Hier ein altes VBscript-Code-Schnipsel von mir. Ohne jede Gewähr.
"DataFilePath" musst Du noch anpassen.
Alles ganz primitiv. Keine große Logik dahinter.
Wenn Du das mit dem Standarddrucker nicht haben willst, dann einfach die Zeile mit dem "SetDefaultPrinter" auskommentieren.
"DataFilePath" musst Du noch anpassen.
Alles ganz primitiv. Keine große Logik dahinter.
Wenn Du das mit dem Standarddrucker nicht haben willst, dann einfach die Zeile mit dem "SetDefaultPrinter" auskommentieren.
On Error Resume Next
'Je Zeile, 1x, COMPUTERNAME <tab> PrinterUNC
'Bsp:
'CLIENT0815<tab>\\PRINTSERVER1\DruckerA
'CLIENT0815<tab>\\PRINTSERVER1\DruckerB
'CLIENT0815<tab>\\PRINTSERVER1\DruckerC
'CLIENTxxxx<tab>\\PRINTSERVER1\DruckerA
'#Kommentar
Const DataFilePath = "\\domain.local\NETLOGON\Client2Printer.txt"
Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject")
Dim WshNet : Set WshNet = CreateObject("Wscript.Network")
If FSO.FileExists(DataFilePath) Then
Dim CurrentClient : CurrentClient = GetClientName
Dim DefaultPrinter : DefaultPrinter = ""
Dim Line, ClientName, PrinterUNC
With FSO.OpenTextFile(DataFilePath)
While Not .AtEndOfStream
Line = Trim(.ReadLine)
If Line <> "" And _
Not Left(Line,1) = "#" Then
ClientName = "" : ClientName = Trim(Split(Line,vbTab)(0))
PrinterUNC = "" : PrinterUNC = Trim(Split(Line,vbTab)(1))
If UCase(ClientName) = UCase(CurrentClient) And _
PrinterUNC <> "" Then
If DefaultPrinter = "" Then
DefaultPrinter = PrinterUNC
End If
WshNet.AddWindowsPrinterConnection PrinterUNC
End If
End If
Wend
If DefaultPrinter <> "" Then
WshNet.SetDefaultPrinter DefaultPrinter
End If
End With
End If
WScript.Quit
Function GetClientName
On Error Resume Next
Dim ReturnValue
ReturnValue = ""
ReturnValue = UCase(CreateObject("Wscript.Shell").ExpandEnvironmentStrings("%CLIENTNAME%"))
If ReturnValue = "%CLIENTNAME%" Or _
ReturnValue = "CONSOLE" Then
ReturnValue = UCase(CreateObject("Wscript.Network").ComputerName)
End If
GetClientName = ReturnValue
End Function
Du müsstest uns doch erstmal bitte mittteilen, was konkret nicht geht, welche Fehlermeldung Du konkret wann bekommst!
Unabhängig davon:
Unabhängig davon:
\\server\$env:username\printers.csv
Willst Du ernsthaft für jeden Benutzer eine Freigabe erstellen? Wäre es nicht sinnvoller, in einer Freigabe pro Benutzer eine Datei zu erstellen?$Printers=IMPORT-CSV \\server\freigabe\$env:username.csv
Wenn Du nur wild was zusammenkopierst, ohne es auch nur halbwegs zu verstehen, dann wird das nichts.
Wenn Du nur eine Datei für alle Clients hast, dann musst Du bei der Ausführung zunächst noch nach diesem Computernamen filtern. Sonst verbindest Du alle in der Datei genannten Drucker.
Bsp. für CSV
Wenn Du nur eine Datei für alle Clients hast, dann musst Du bei der Ausführung zunächst noch nach diesem Computernamen filtern. Sonst verbindest Du alle in der Datei genannten Drucker.
Bsp. für CSV
PC0001, \\SV0002\PR0001, True
PC0001, \\SV0002\PR00002, False
PC0002, \\SV0002\PR0001, True
PC0002, \\SV0002\PR00002, False