Logonscript, Printserver abändern
Guten Tag Liebe Community
Es geht um folgendes.
Wir haben zur Zeit in der Firma 2 Printserver.
1x einer für 32bit (Printer1)
1x einer für 64 bit (Printer2)
nun habe ich einen erstellt, der beide Treiber zur Verfügung stellt. (Printer3)
Doch nun geht es um die integrierung des Printservers. Es sollte im Logonscript herausgelesen werden, welcher Benutzer welchen Drucker schon installiert hat und den löschen und vom neuen Server dann wieder anziehen.
Ich habe mich nun lange schlau gemacht, doch ich komme nicht weiter.
Mit rundll32 printui.dll, PrintUIEntry /ge /f printer.txt habe ich mal die installierten Printer in eine Textdatei gebracht.
Wie kann ich das einfach anstellen, habt ihr eine Idee?
Vielen Dank schonmal,
es Grüsst Shakey!
Es geht um folgendes.
Wir haben zur Zeit in der Firma 2 Printserver.
1x einer für 32bit (Printer1)
1x einer für 64 bit (Printer2)
nun habe ich einen erstellt, der beide Treiber zur Verfügung stellt. (Printer3)
Doch nun geht es um die integrierung des Printservers. Es sollte im Logonscript herausgelesen werden, welcher Benutzer welchen Drucker schon installiert hat und den löschen und vom neuen Server dann wieder anziehen.
Ich habe mich nun lange schlau gemacht, doch ich komme nicht weiter.
Mit rundll32 printui.dll, PrintUIEntry /ge /f printer.txt habe ich mal die installierten Printer in eine Textdatei gebracht.
Wie kann ich das einfach anstellen, habt ihr eine Idee?
Vielen Dank schonmal,
es Grüsst Shakey!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 184169
Url: https://administrator.de/contentid/184169
Ausgedruckt am: 25.11.2024 um 06:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo,
1.) Drucker anpassen/pflegen:
2.) „printmig.exe“ auf den Print1 und Print 2 öffnen
3.) Actions -> Backup…; dieses Backup auf ein Netzlaufwerk legen
4.) Die Textdatei „Drucker.txt“Dort sind alle Drucker eingetragen:
Auf ein Netzlaufwerk kopieren wo alle Nutzer vollen zugriff haben
5.) Das Script „Druckerverbindung.vbs“ anpassen mit dem Pfad zur Textdatei.
6.) „printmig.exe“ auf den Print3 öffnen
7.) Actions -> Restore…; die zuvor gespeicherte „*.cap“ auswählen und zurück sichern.
8.) Den Nutzer das Script zukommen lassen und ausführen. ( ohne Adminrechte möglich )
9.) Ausführen des Script kann bis zu 10min dauern, je nachdem wie viele Drucker eingebunden werden müssen.
Bsp für drucker.txt:
DruckerAlt;DruckerNeu
"\\Print1\d001";"\\print3\d001"
Script:
[Edit Biber] Codeformatierung [/Edit]
1.) Drucker anpassen/pflegen:
2.) „printmig.exe“ auf den Print1 und Print 2 öffnen
3.) Actions -> Backup…; dieses Backup auf ein Netzlaufwerk legen
4.) Die Textdatei „Drucker.txt“Dort sind alle Drucker eingetragen:
Auf ein Netzlaufwerk kopieren wo alle Nutzer vollen zugriff haben
5.) Das Script „Druckerverbindung.vbs“ anpassen mit dem Pfad zur Textdatei.
6.) „printmig.exe“ auf den Print3 öffnen
7.) Actions -> Restore…; die zuvor gespeicherte „*.cap“ auswählen und zurück sichern.
8.) Den Nutzer das Script zukommen lassen und ausführen. ( ohne Adminrechte möglich )
9.) Ausführen des Script kann bis zu 10min dauern, je nachdem wie viele Drucker eingebunden werden müssen.
Bsp für drucker.txt:
DruckerAlt;DruckerNeu
"\\Print1\d001";"\\print3\d001"
Script:
' Name: Druckerverbindung.vbs
' Author: Martin Henschke
' Client Script um die Druckserver um zuleiten
'
'
'
' Pfad zur Druckerdatei
strDBPfad = "\\PFAD\Drucker.txt"
' Druckerdatei temporär kopieren, um Sperrkonflikte zu umgehen
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objDBDatei = objFSO.GetFile(strDBPfad)
strDBDateilokal = objFSO.GetTempName
strTemppfad = objFSO.GetSpecialFolder(2)
strDBPfadlokal = objFSO.BuildPath(strTemppfad, strDBDateilokal)
objDBDatei.Copy strDBPfadlokal
' Tabelle hier: Name der Textdatei
strTabelle = strDBDateilokal
' ADO-Objekte
Set objConn = CreateObject("ADODB.Connection")
' weitere Objekte
Set objNetwork = CreateObject("WScript.Network")
Set objShell = CreateObject("Wscript.Shell")
Set objWMI = GetObject("winmgmts:\\.\root\CIMV2")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strTemppfad & ";" & _
"Extended Properties=""text;HDR=YES;FMT=Delimited"""
strText = ""
' Druckerverbindungen des Benutzers durchlaufen
Set colDrucker = objNetwork.EnumPrinterConnections
' Im jeweils zweiten Wert steht der Druckername
For i=0 To colDrucker.Count-1 Step 2
strDruckerAlt = colDrucker(i + 1)
' In Datenbank nach der aktuellen Verbindung suchen
Set objRS = objConn.Execute("SELECT * FROM " & strTabelle & " WHERE DruckerAlt = '" _
& strDruckerAlt & "'")
' Falls Drucker gefunden (objRS nicht leer) ...
If Not objRS.EOF Then
' ... neuen Drucker herausfinden
strDruckerNeu = objRS("DruckerNeu")
' ... und verbinden
DruckerSetzen strDruckerAlt, strDruckerNeu
End If
Next
' Erfolg melden
'If strText <> "" Then
' objShell.Popup strText, 10, "Druckerumzug"
'End If
' Lokale Textdatei schließen und löschen
objRS.Close
Set objDBDateilokal = objFSO.GetFile(strDBPfadlokal)
objDBDateilokal.Delete
Sub DruckerSetzen(strDruckerAlt, strDruckerNeu)
' ist der alte Drucker der Standarddrucker?
strDruckerWQL = Replace(strDruckerAlt, "\", "\\")
strWQL = "SELECT Default FROM Win32_Printer " _
& "WHERE Name = '" & strDruckerWQL & "'"
Set colPrinters = objWMI.ExecQuery(strWQL)
If colPrinters.Count > 0 Then
For Each objPrinter In colPrinters
If objPrinter.Default = vbTrue Then
flgDefault = True
Else
flgDefault = False
End If
Next
End If
' alte Verbindung entfernen
objNetwork.RemovePrinterConnection strDruckerAlt, True, True
strText = strText & strDruckerAlt & " entfernt." & VbCrLf
' neue Verbindung hinzufügen
objNetwork.AddWindowsPrinterConnection strDruckerNeu
strText = strText & strDruckerNeu & " hinzugefügt." & VbCrLf
If flgDefault Then
objNetwork.SetDefaultPrinter(strDruckerNeu)
strText = strText & strDruckerNeu & " ist Standarddrucker." & VbCrLf
End If
End Sub
[Edit Biber] Codeformatierung [/Edit]
Einfach eine TXT erstellen, und diese so anpassen ->
DruckerAlt;DruckerNeu
"\\print01\d001";"\\print03\d001"
"\\print01\d002";"\\print03\d002"
"\\print01\d003";"\\print03\d003"
"\\print01\d004";"\\print03\d004"
"\\print01\d005";"\\print03\d005"
"\\print02\d006";"\\print03\d006"
"\\print02\d007";"\\print03\d007"
"\\print02\d008";"\\print03\d008"
"\\print02\d009";"\\print03\d009"
"\\print02\d0010";"\\print03\d0010"
DruckerAlt;DruckerNeu
"\\print01\d001";"\\print03\d001"
"\\print01\d002";"\\print03\d002"
"\\print01\d003";"\\print03\d003"
"\\print01\d004";"\\print03\d004"
"\\print01\d005";"\\print03\d005"
"\\print02\d006";"\\print03\d006"
"\\print02\d007";"\\print03\d007"
"\\print02\d008";"\\print03\d008"
"\\print02\d009";"\\print03\d009"
"\\print02\d0010";"\\print03\d0010"
Hey, hatte jetzt auch selbiges Problem.
Habe es aber über einen Batch Script lösen können der dann einmal pro User beim Logon läuft.
Dabei wird auch der vorherige Standard drucker wieder gesetzt.
script sieht dann in etwa so aus:
(Printer und Servernamen wurden hier durch platzhalter ersetzt ;) )
@echo off
set Printer1=d001
set Printer2=d002
set Printer3=d003
set Printer4=d004
set Printer5=d005
set Printer6=d006
set Printer7=d007
set Printer8=d008
set Printer9=d009
set Printer10=d010
set Printer11=d011
set Printer12=d012
set Printer13=d013
set Printer14=d014
set Printer15=d015
set Printer16=d016
set Printer17=d017
set Printer18=d018
set Printer19=d019
set Printer20=d020
set Printer21=d021
set Printer22=d022
set Printer23=d023
set Printer24=d024
set Printer25=d025
set Printer26=d026
set Printer27=d027
set Printer28=d028
set Printer29=d029
set Printer30=d030
set Printer31=d031
set Printer32=d032
set Printer33=d033
set Printer34=d034
set Printer35=d035
set Printer36=d036
set Printer37=d037
set Printer38=d038
set Printer39=d039
set Printer40=d040
set Printer41=d041
set Printer42=d042
set Printer43=d043
set Printer44=d044
set Printer45=d045
set Printer46=d046
set Printer47=d047
set Printer48=d048
set Printer49=d049
set Printer50=d050
set Printer51=d051
set Printer52=d052
set Printer53=d053
set Printer54=d054
set Printer55=d055
set Printer56=d056
set Printer57=d057
set Printer58=d058
set Printer59=d059
set Printer60=d060
set Printer61=d061
set Printer62=d062
set Printer63=d063
set Printer64=d064
set Printer65=d065
set Printer66=d066
set Printer67=d067
set Printer68=d068
::echo Druckerpfade werden auf neuen Druckserver geändert, dies kann einen Moment dauern.
reg query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices" |findstr \\ >c:\Temp\printer.txt
reg query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v Device >c:\Temp\defaultprinter.txt
setlocal enabledelayedexpansion
set PrtNr=1
:loop
::echo !Printer%PrtNr%!
CALL set CheckPrinter=!Printer%PrtNr%!
::echo %CheckPrinter%
find /I "\\ALTERSERVER\%CheckPrinter%" C:\Temp\defaultprinter.txt
IF %ERRORLEVEL% == 0 (
echo Drucker %CheckPrinter% wird neu Tempiert.
rundll32 printui.dll,PrintUIEntry /q /dn /n "\\ALTERSERVER\%CheckPrinter%"
rundll32 printui.dll,PrintUIEntry /q /in /n "\\NEUERSERVER\%CheckPrinter%"
rundll32 printui.dll,PrintUIEntry /q /y /n "\\NEUERSERVER\%CheckPrinter%"
goto :mark
)
find /I "ALTERSERVER\%CheckPrinter%" C:\Temp\printer.txt
IF %ERRORLEVEL% == 0 (
echo Drucker %CheckPrinter% wird neu Tempiert.
rundll32 printui.dll,PrintUIEntry /q /dn /n "\\ALTERSERVER\%CheckPrinter%"
rundll32 printui.dll,PrintUIEntry /q /in /n "\\NEUERSERVER\%CheckPrinter%"
)
:mark
::echo %PrtNr%
::pause
set /a PrtNr+=1
IF %PrtNr% lss 69 goto :loop
del C:\Temp\printer.txt
del C:\Temp\defaultprinter.txt
cls
echo Druckerpfade wurden auf neuen Server geaendert.
echo\
echo\
Pause
Habe es aber über einen Batch Script lösen können der dann einmal pro User beim Logon läuft.
Dabei wird auch der vorherige Standard drucker wieder gesetzt.
script sieht dann in etwa so aus:
(Printer und Servernamen wurden hier durch platzhalter ersetzt ;) )
@echo off
set Printer1=d001
set Printer2=d002
set Printer3=d003
set Printer4=d004
set Printer5=d005
set Printer6=d006
set Printer7=d007
set Printer8=d008
set Printer9=d009
set Printer10=d010
set Printer11=d011
set Printer12=d012
set Printer13=d013
set Printer14=d014
set Printer15=d015
set Printer16=d016
set Printer17=d017
set Printer18=d018
set Printer19=d019
set Printer20=d020
set Printer21=d021
set Printer22=d022
set Printer23=d023
set Printer24=d024
set Printer25=d025
set Printer26=d026
set Printer27=d027
set Printer28=d028
set Printer29=d029
set Printer30=d030
set Printer31=d031
set Printer32=d032
set Printer33=d033
set Printer34=d034
set Printer35=d035
set Printer36=d036
set Printer37=d037
set Printer38=d038
set Printer39=d039
set Printer40=d040
set Printer41=d041
set Printer42=d042
set Printer43=d043
set Printer44=d044
set Printer45=d045
set Printer46=d046
set Printer47=d047
set Printer48=d048
set Printer49=d049
set Printer50=d050
set Printer51=d051
set Printer52=d052
set Printer53=d053
set Printer54=d054
set Printer55=d055
set Printer56=d056
set Printer57=d057
set Printer58=d058
set Printer59=d059
set Printer60=d060
set Printer61=d061
set Printer62=d062
set Printer63=d063
set Printer64=d064
set Printer65=d065
set Printer66=d066
set Printer67=d067
set Printer68=d068
::echo Druckerpfade werden auf neuen Druckserver geändert, dies kann einen Moment dauern.
reg query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices" |findstr \\ >c:\Temp\printer.txt
reg query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v Device >c:\Temp\defaultprinter.txt
setlocal enabledelayedexpansion
set PrtNr=1
:loop
::echo !Printer%PrtNr%!
CALL set CheckPrinter=!Printer%PrtNr%!
::echo %CheckPrinter%
find /I "\\ALTERSERVER\%CheckPrinter%" C:\Temp\defaultprinter.txt
IF %ERRORLEVEL% == 0 (
echo Drucker %CheckPrinter% wird neu Tempiert.
rundll32 printui.dll,PrintUIEntry /q /dn /n "\\ALTERSERVER\%CheckPrinter%"
rundll32 printui.dll,PrintUIEntry /q /in /n "\\NEUERSERVER\%CheckPrinter%"
rundll32 printui.dll,PrintUIEntry /q /y /n "\\NEUERSERVER\%CheckPrinter%"
goto :mark
)
find /I "ALTERSERVER\%CheckPrinter%" C:\Temp\printer.txt
IF %ERRORLEVEL% == 0 (
echo Drucker %CheckPrinter% wird neu Tempiert.
rundll32 printui.dll,PrintUIEntry /q /dn /n "\\ALTERSERVER\%CheckPrinter%"
rundll32 printui.dll,PrintUIEntry /q /in /n "\\NEUERSERVER\%CheckPrinter%"
)
:mark
::echo %PrtNr%
::pause
set /a PrtNr+=1
IF %PrtNr% lss 69 goto :loop
del C:\Temp\printer.txt
del C:\Temp\defaultprinter.txt
cls
echo Druckerpfade wurden auf neuen Server geaendert.
echo\
echo\
Pause