einfachbernd
Goto Top

Alte ntuser.dat hiven und Reg Einträge in neue Registry übernehmen?

Hallo @all,

bräuchte beim Scripten bitte eure Hilfe face-smile

Muss aus einer alten NTUSER.DAT Daten auslesen und dann in die HKCU übernehmen:

Müsste folgende 4 Punkte in ein Batch File einbauen
REM 1) Drucker: alle eingerichteten Drucker vom Server serverPRNQ (keine weiteren Drucker), auch der vom User eingerichtete Standarddrucker soll wieder gesetzt werden,

Bisher habe ich wie folgt gearbeitet:

REM HIVE Migration anlegen
reg add HKEY_LOCAL_MACHINE\Software\Migration /f
reg load "HKU\_Migration\%username%" "\\server\Profiles$\%username%\ntuser.dat"

REM 1) Drucker: alle eingerichteten Drucker vom Server serverPRNQ (keine weiteren Drucker), auch der vom User eingerichtete Standarddrucker soll wieder gesetzt werden,
REM ------------------------------------------
reg copy "HKU\_Migration\%username%\Software\Microsoft\Windows NT\CurrentVersion\Windows\" "HKCU\_Migration\%username%\Software\Microsoft\Windows NT\CurrentVersion\Windows\" /f
reg copy "HKU\_Migration\%username%\Software\Microsoft\Windows NT\CurrentVersion\Devices" "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices" /f

reg query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices" > "%temp%\Drucker.txt"
find /i \\KSVPRNQ "%temp%\Drucker.txt" > "%temp%\Drucker2.txt"
for /f "skip=2 tokens=1" %%i in ("%temp%\Drucker2.txt") do rundll32 printui.dll,PrintUIEntry /q /dn /n %%i

REM HIVE Migration anlegen
reg unload "HKU\_Migration\%username%"


Ausgabe bei find /i \\serverPRNQ "%temp%\Drucker.txt" > "%temp%\Drucker2.txt"

Drucker2.txt
\\serverPRNQ\prt01 REG_SZ winspool,Ne00:

So nun meine Frage:
zu REM 1: Habe die Einträge aus HKU auf HCU kopiert, das funktioniert auch, jedoch verstehe ich nicht wie ich nun die Installation aller Drucker inizieren kann, bzw wie der Befehl geschrieben werden musss, dass alle Drucker installiert werden die der Anforderung entsprechen (for schleife mit suche?)

Wäre echt dankbar, wenn ich hier nen Fehler drinnen habe, dass mir jemand die passende Lösung schreibt face-smile

DAnke für die Hilfe face-smile

Content-ID: 179497

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

Ausgedruckt am: 25.11.2024 um 23:11 Uhr

Karo
Karo 25.01.2012 um 11:02:57 Uhr
Goto Top
Hi,

ich habe vor einiger Zeit ein Script gebastelt mit dem man Printernamen eines Users ändern kann (auf dem Druckservern wurden damals andere Sharenamen angelegt). Vielleicht hilft es Dir weiter.
Da ich nicht die Zeit habe das Script an Deine Bedürfnisse umzustellen, kannst Du in dem benötigten Textfile für den alten und neuen Namen den gleichen Wert nehmen.

Den Drucker hast Du in Deinem Drucker2.txt bereits, benötigt wird nur der Shareteil (\\serverPRNQ\prt01) .
(\\SERVER\PRINTERNAME;\\SERVER\PRINTERNAME), Dann würde der Inhalt in etwa so aussehen:
\\serverPRNQ\prt01;\\serverPRNQ\prt01
\\serverPRNQ\prt02;\\serverPRNQ\prt02
\\serverPRNQ\prt......

Das File könnte nach dem Usernamen benannt sein (NAME_printers.txt) und mit \\MYSERVER\MYSHARE\%USERNAME%_printers.txt aufgerufen werden. im Code zu finden bei Set fsFILE = fs.GetFile("\\MYSERVER\MYSHARE\printers.txt")


' CHANGE Printers for Users  
'  
' Karo, 08.09.2010  
' With this script you can change the mapping from Printernames  
' OLDNAME to NENAME in a Textfile  
' Syntax in TXT = \\SERVER\PRINTERNAMEOLD;\\SERVER\PRINTERNAMENEW  
'  
' 20100908 Initial  
' 20100909 Set Default Printer  
' 20100910 Added Loop for check if Printer connected after renaming  


' Set printers  
' ******************************  
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002

On Error Resume Next
Dim objNetwork, fs, fsFILE
Dim Counter, CounterU, aryPrinter(999), aryPrinterU(100), strComputer, strUsername
Dim splPrinter, x, y, fstemp, DefPrinter
Set objNetwork = CreateObject("WScript.Network")  
Set fs = CreateObject("Scripting.FileSystemObject")  
Set fstemp = fs.GetSpecialFolder(2)
wscript.echo ("The path to your TEMP folder is '" & fstemp & "'." )  

'COPY FILE TO TEMP  
'wscript.echo ("\\MYSERVER\MYSHARE\printers.txt")  
Set fsFILE = fs.GetFile("\\MYSERVER\MYSHARE\printers.txt")  
fsFILE.copy (fstemp & "\printers.txt")  

'READ FILE  
Set fsFILE = fs.OpenTextFile(fstemp & "\printers.txt")  
Counter = 0
Do Until fsFILE.AtEndOfStream
	Counter = Counter + 1
	aryPrinter(Counter) = fsFILE.Readline
	'wscript.echo Counter & " ---- " & aryPrinter(Counter)  
Loop

strComputer = "."  

'Read User Printer Connections  
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _  
    strComputer & "\root\default:StdRegProv")  
CounterU = 0
strKeyPath = "Printers\Connections"  
oReg.EnumKey HKEY_CURRENT_USER, strKeyPath, arrSubKeys
For Each subkey In arrSubKeys
	CounterU = CounterU + 1
	aryPrinterU(CounterU) = UCase(Replace(subkey,",","\"))  
Next

'Get Current Username  
strUsername = objNetwork.UserName
wscript.echo strUsername & " - Mapped Printers: " & CounterU  
'READ MAPPED PRINTERS FROM USER  
strComputer = "."  
Set objWMIService = GetObject("winmgmts:" _  
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")  

Set colInstalledPrinters =  objWMIService.ExecQuery _
    ("Select * from Win32_Printer")  
Y = 0
DefPrinter = "FALSE"  

For Each objPrinter in colInstalledPrinters
  For y = 1 to CounterU
	If InStr(1,UCase(aryPrinterU(Y)),UCase(objPrinter.Name),1) > 0 Then
  wscript.echo "##################################################"  
  WScript.echo "SEARCH: " & aryPrinterU(Y)  
   For x = 1 to Counter
 		splPrinter=Split(aryPrinter(x),";")  
     'COMPARE MAPPED PRINTERS WITH PRINTERS IN FILE  
     If InStr(1,aryPrinterU(Y),splPrinter(0),1) > 0 Then
 		 WScript.echo aryPrinterU(Y) & " - " & splPrinter(0)  
				 wscript.echo "-YES-"  

      		'Is Printer Default  
      			'DefPrinter = "FALSE"  
      		  If objPrinter.Default = "True" Then  
      		  	DefPrinter = splPrinter(1)
      		  	wscript.echo "Default Printer Flag is set on " & splPrinter(0) & ""  
	      		 ' Else  
	      		 ' 	DefPrinter = "FALSE"  
	      		 ' 	Exit For  
      		  End If

     		'DELETE OLD MAPPING  
				wscript.echo "-Delete Old Mapping-"  
     		objNetwork.RemovePrinterConnection splPrinter(0)
     				wscript.echo splPrinter(0)

     		'NEW MAPPING  
				wscript.echo "-New Mapping-"  
     		objNetwork.AddWindowsPrinterConnection splPrinter(1)
     		wscript.echo splPrinter(1)

     		wscript.echo "######END " & splPrinter(1) & "#####"  
     Else
     End If
   Next
  End If
  Next
Next
Y = 0
wscript.echo "##################################################"  
wscript.echo ""  
wscript.echo ""  
wscript.echo "##################################################"  

If DefPrinter =  "FALSE" Then  
	wscript.echo "No Default Printer in Remapped Printers"  
Else
	wscript.echo "Check for Connection: " & DefPrinter & " "  
	For counter = 0 to 2
		Set colInstalledPrinters =  objWMIService.ExecQuery _
    ("Select * from Win32_Printer")  
	 For Each objPrinter in colInstalledPrinters
	 'wscript.echo UCase(objPrinter.Name)& " -> " & UCase(DefPrinter)  
		If InStr(1,UCase(objPrinter.Name),UCase(DefPrinter),1) > 0 Then
			wscript.echo "-Bingo!"  
			counter = 3
			Exit For
		Else
		  counter = 1
		End If
	 Next
	Next
	     		'IF PRINTER IS DEFAULT (True) SET NEW DEFAULT  
			     		If DefPrinter = "FALSE" Then  
			     	  Else
								wscript.echo "-Set as Default"  
			     			'objNetwork.SetDefaultPrinter splPrinter(1)  
			     			'wscript.echo splPrinter(1)  
			     			objNetwork.SetDefaultPrinter DefPrinter
			     			wscript.echo DefPrinter
			     		End If
End If
wscript.echo "##################################################"  
wscript.echo ""  
wscript.echo "#######################"  
wscript.echo "###### END OF ALL " & "#####"  
wscript.echo "#######################"  
WScript.sleep 20000


Happy testing...

bye
Karo
einfachBernd
einfachBernd 25.01.2012 um 11:21:26 Uhr
Goto Top
Hi Karo,

danke für die Info, jedoch würde es mir reichen, wenn mir jemand das bestehende Script einfach anpasst oder erweitert. thx