Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Logonscript, Printserver abändern

Frage Entwicklung Batch & Shell

Mitglied: Shakey

Shakey (Level 1) - Jetzt verbinden

26.04.2012 um 14:18 Uhr, 5123 Aufrufe, 8 Kommentare

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!
Mitglied: Henschki
26.04.2012 um 15:13 Uhr
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:
01.
' Name: Druckerverbindung.vbs 
02.
' Author: Martin Henschke  
03.
' Client Script um die Druckserver um zuleiten 
04.
05.
06.
07.
 
08.
 
09.
' Pfad zur Druckerdatei 
10.
strDBPfad = "\\PFAD\Drucker.txt" 
11.
' Druckerdatei temporär kopieren, um Sperrkonflikte zu umgehen 
12.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
13.
Set objDBDatei = objFSO.GetFile(strDBPfad) 
14.
strDBDateilokal = objFSO.GetTempName 
15.
strTemppfad = objFSO.GetSpecialFolder(2) 
16.
strDBPfadlokal = objFSO.BuildPath(strTemppfad, strDBDateilokal) 
17.
objDBDatei.Copy strDBPfadlokal 
18.
 
19.
' Tabelle hier: Name der Textdatei 
20.
strTabelle = strDBDateilokal 
21.
 
22.
' ADO-Objekte 
23.
Set objConn = CreateObject("ADODB.Connection") 
24.
' weitere Objekte 
25.
Set objNetwork = CreateObject("WScript.Network") 
26.
Set objShell = CreateObject("Wscript.Shell") 
27.
Set objWMI = GetObject("winmgmts:\\.\root\CIMV2") 
28.
 
29.
 
30.
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
31.
	"Data Source=" & strTemppfad & ";" & _ 
32.
	"Extended Properties=""text;HDR=YES;FMT=Delimited""" 
33.
strText = "" 
34.
 
35.
' Druckerverbindungen des Benutzers durchlaufen 
36.
Set colDrucker = objNetwork.EnumPrinterConnections 
37.
' Im jeweils zweiten Wert steht der Druckername 
38.
For i=0 To colDrucker.Count-1 Step 2 
39.
	strDruckerAlt = colDrucker(i + 1) 
40.
	' In Datenbank nach der aktuellen Verbindung suchen 
41.
	Set objRS = objConn.Execute("SELECT * FROM " & strTabelle & " WHERE DruckerAlt = '" _ 
42.
	& strDruckerAlt & "'") 
43.
 
44.
 
45.
 
46.
	' Falls Drucker gefunden (objRS nicht leer) ... 
47.
	If Not objRS.EOF Then 
48.
		' ... neuen Drucker herausfinden 
49.
		strDruckerNeu = objRS("DruckerNeu") 
50.
		' ... und verbinden 
51.
		DruckerSetzen strDruckerAlt, strDruckerNeu 
52.
	End If 
53.
Next 
54.
 
55.
' Erfolg melden 
56.
'If strText <> "" Then 
57.
'	objShell.Popup strText, 10, "Druckerumzug" 
58.
'End If 
59.
 
60.
' Lokale Textdatei schließen und löschen 
61.
objRS.Close 
62.
Set objDBDateilokal = objFSO.GetFile(strDBPfadlokal) 
63.
objDBDateilokal.Delete 
64.
 
65.
Sub DruckerSetzen(strDruckerAlt, strDruckerNeu) 
66.
	' ist der alte Drucker der Standarddrucker? 
67.
	strDruckerWQL = Replace(strDruckerAlt, "\", "\\") 
68.
	strWQL = "SELECT Default FROM Win32_Printer " _ 
69.
		& "WHERE Name = '" & strDruckerWQL & "'" 
70.
	Set colPrinters = objWMI.ExecQuery(strWQL) 
71.
	If colPrinters.Count > 0 Then 
72.
		For Each objPrinter In colPrinters 
73.
			If objPrinter.Default = vbTrue Then 
74.
				flgDefault = True 
75.
			Else	 
76.
				flgDefault = False 
77.
			End If 
78.
		Next 
79.
	End If 
80.
	' alte Verbindung entfernen 
81.
	objNetwork.RemovePrinterConnection strDruckerAlt, True, True 
82.
	strText = strText & strDruckerAlt & " entfernt." & VbCrLf 
83.
	' neue Verbindung hinzufügen 
84.
	objNetwork.AddWindowsPrinterConnection strDruckerNeu 
85.
	strText = strText & strDruckerNeu & " hinzugefügt." & VbCrLf 
86.
	If flgDefault Then 
87.
		objNetwork.SetDefaultPrinter(strDruckerNeu) 
88.
		strText = strText & strDruckerNeu & " ist Standarddrucker." & VbCrLf 
89.
	End If 
90.
End Sub
[Edit Biber] Codeformatierung [/Edit]
Bitte warten ..
Mitglied: Shakey
26.04.2012 um 16:04 Uhr
Vielen Dank schon mal, ich bin es am ausprobieren.

Ich werde mich dazu noch melden.

Danke

Shakey
Bitte warten ..
Mitglied: Shakey
27.04.2012 um 11:13 Uhr
Moin

Kannst du, oder sonst jemand hier, mir nochmals erklären, wie das Drucker.txt file genau formatiert sein muss?

Vielen Dank
Shakey
Bitte warten ..
Mitglied: Henschki
27.04.2012 um 14:05 Uhr
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"
Bitte warten ..
Mitglied: Shakey
27.04.2012 um 14:52 Uhr
Kannst du das Script nicht ohne Zeilenumbrüche hier posten?

Ich bekomme da ständige Fehlermeldungen..

Wäre Dir echt dankbar..
Bei Zeile 22 fängt es an und dann endlos..

Grüsse Shakey
Bitte warten ..
Mitglied: Henschki
22.05.2012 um 13:21 Uhr
hat die Umstellung funktioniert?
Bitte warten ..
Mitglied: Shakey
22.05.2012 um 13:26 Uhr
Hallo Henschki

Leider funktionierte es bei mir nicht, deshalb habe ich einfach selbst nen Script gebastelt..

Folgendes Script hat mir dann dass gemacht, was ich brauchte.

#Rechte zum Scriptausführen vergeben
set-executionpolicy remotesigned

#Beispiel-Aufruf
#.\printerManagement.ps1 \\srhw8024 \\srhw8020

#Übergabeparameter auslesen
$alterPrinterServerParam = $args[0]
$neuerPrinterServerParam = $args[1]

#interne Variablen setzen
$Class = "win32_printer"
$printerListFile = "C:\printer.txt"

#Übergabeparameter in Variablen abfüllen
$alterPrinterServer = $alterPrinterServerParam
$neuerPrinterServer = $neuerPrinterServerParam
#mögliche Space's entfernen
$alterPrinterServer = $alterPrinterServer.Trim()
$neuerPrinterServer = $neuerPrinterServer.Trim()

#Netwerk-Objekt setzen
$net = new-Object -com WScript.Network

#Ausgabe
cmd.exe /c "Echo Ersetzte Printer-Server:$alterPrinterServer durch Printer-Server:$neuerPrinterServer"

#Interne Printer nach Muster ($alterPrinterServer) durchsuchen und in File($printerListFile) schreiben
Get-WmiObject -class $Class | Where-Object {$_.SystemName -like $alterPrinterServer} | ft Name | Out-File $printerListFile

#Überflüssige Zeilen in File suchen und löschen
(type $printerListFile) -notmatch "^$" | Out-File $printerListFile #leere Zeile entfernen
(type $printerListFile) -notmatch "Name" | Out-File $printerListFile #'Name' entfernen
(type $printerListFile) -notmatch "----" | Out-File $printerListFile #'-' entfernen

#File Zeile für Zeile auslesen
Foreach ($Line in Get-Content $printerListFile)
{
#ist Suche(Zeile:30) leer wird 'True' in File geschrieben -> Abbruch
if ($Line -notlike "True")
{
#Space entfernen
$Line = $Line.Trim()

#Alter Printer-Eintrag löschen
$net.RemovePrinterConnection($Line)

#String-Manipulation: Alter Printer-Server mit neuem Printer-Server ersetzen
$Line = $Line.Replace($alterPrinterServer , $neuerPrinterServer)

#Neuer Printer-Eintrag hinzufügen
$net.AddWindowsPrinterConnection($Line)

#Ausgabe
cmd.exe /c "Echo $Line"
}
}

#Ausgabe
cmd.exe /c "Echo ENDE"

trotzdem herzlichen Dank, auch für die Nachfrage!

Greetz Shakey
Bitte warten ..
Mitglied: Wissar
13.06.2014 um 12:45 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Drucker und Scanner
gelöst Standalone Printserver Modell (11)

Frage von dgrebner zum Thema Drucker und Scanner ...

Batch & Shell
gelöst Logonscript wirft Fehler raus? (5)

Frage von vessev zum Thema Batch & Shell ...

LAN, WAN, Wireless
gelöst Printserver gesucht - Druckeranbindung per WLAN (16)

Frage von chfran zum Thema LAN, WAN, Wireless ...

VB for Applications
gelöst Umstellung Printserver - Drucker anlegen (3)

Frage von trynerror zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...