Aktionen

ZnilTools:JP ProfileCleaner

Aus znilwiki

Changelog:

  • 24.07.2012 erste öffentliche Version
  • 08.05.2015 neue Version die UTF16 statt ANSI schreibt

Download: JP_ProfileCleaner.zip, Quellcode unter AutoIt:JP_ProfileCleaner


1 Vorwort

Der JP_ProfileCleaner kann unter der Verwendung einer FadeOut.dat die Registry Schlüssel aus vorhandenen JPUser.dat filtern.

Normalerweise filtert die JPLogout.exe die Schlüssel aus der FadeOut.dat aus - diese Schlüssel werden nicht in die JPUser.dat geschrieben. Sind diese bereits vorhanden werden diese zwar noch bei der Anmeldung eingelesen, beim nächsten Abmelden jedoch verworfen.

Mit dem JP_ProfileCleaner können wir diese Schlüssel sofort ausfiltern lassen.



2 Download

Download: JP_ProfileCleaner.zip


3 Anleitung

WICHTIG! JP:ProfileCleaner erwartet eine FadeOut.dat im gleichen Verzeichnis!
Diese dient als Basis für das Ausfiltern. Eine Beispiel FadeOut.dat findet Ihr am Ende dieser Webseite.


Aufruf:
JP_ProfileCleaner.exe [Pfad][Dateinname]


Beispiel:
JP_ProfileCleaner.exe D:\Profiles\Benutzer\JumpingProfile\JPUser.dat


Für eine Batch-Verarbeitung aller JPUser.dat eines Unterverzeichnisses kann man es z.B. mit ForFiles kombinieren:

Forfiles /P "D:\Profile" /S /M JPUser.dat /C "cmd /c D:\Skripte\JP_ProfileCleaner.exe @path"

Eine Beispiel CMD Datei ist in der .ZIP Datei mit drin.


Die Original JPUser.dat wird in JPUser.dat.OLDFILE umbenannt. Achtung, bei zweimaligen Aufruf wird die Datei dann überschrieben, es ist immer die letzte JPUser.dat.



4 Screenshots

Beispielbilder der Benutzung:

JP ProfileCleaner-001.PNG


JP ProfileCleaner-002.PNG



5 FadeOut.dat

Hier ein Beispiel für eine FadeOut.dat. Ihr solltet ansonsten die aus eurer JP-Installation nehmen.

;============================================================
; File:    FadeOut.dat
;============================================================
;
; Comment: Filter registry keys/values on logout
;
; Syntax:  [<Profile version>:<Environment>]
;          <Registry key 1>
;          <Registry key 2>
;          <Registry value in key 2>
;
; Notice:  The JumpingProfiles registry key contains required 
;          information and MUST NOT be faded out!
;          HKEY_CURRENT_USER\Software\JumpingProfiles\ 
;
;============================================================

[Header]
JP version = 5.0.0.0

[DEFAULT]

HKEY_CURRENT_USER\Printers\

HKEY_CURRENT_USER\SessionInformation\

HKEY_CURRENT_USER\Software\Microsoft\Active\

HKEY_CURRENT_USER\Software\Microsoft\Advanced INF Setup\

HKEY_CURRENT_USER\Software\Microsoft\Internet Account Manager\

HKEY_CURRENT_USER\Software\Microsoft\MediaPlayer\

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints\

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\SessionInfo\

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Group Policy\

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\

HKEY_CURRENT_USER\Software\Netscape\Netscape Navigator\

HKEY_CURRENT_USER\Software\NetSupport\

HKEY_CURRENT_USER\Software\Policies\

HKEY_CURRENT_USER\Volatile Environment\

HKEY_CURRENT_USER\Console\

HKEY_CURRENT_USER\Control Panel\Appearance\

HKEY_CURRENT_USER\Software\Adobe\Acrobat Reader\8

HKEY_CURRENT_USER\Software\Adobe\Acrobat Reader\7

HKEY_CURRENT_USER\Software\DameWare

HKEY_CURRENT_USER\Software\Foxit

HKEY_CURRENT_USER\Software\Microsoft\Advanced INF Setup\IE UserData NT\RegBackup\

HKEY_CURRENT_USER\Software\Microsoft\Advanced INF Setup\IE.HKCUZoneInfo\RegBackup\

HKEY_CURRENT_USER\Software\Microsoft\MediaPlayer\Battery\Presets\

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\TrayNotify\

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs\

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Wallpaper\MRU\

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Cached\

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Telephony\Cards\

HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\BagMRU\

HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\Bags\

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\




6 Quellcode

Wie meistens auch wieder "mal eben schnell" mit AutoIt geschrieben:

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=Icon256-32.ico
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Change2CUI=y
#AutoIt3Wrapper_Res_Description=Novemer 2011 Bernhard Linz
#AutoIt3Wrapper_Res_Fileversion=1.0.2.7
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#AutoIt3Wrapper_Res_Language=1031
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <array.au3>
#Include <string.au3>

Dim $sFilename				; Dateiname inklusive Pfad zur JPUser.dat
Dim $aFadeOutLines[1]		; Hier stehen die Text aus der FadeOut.dat drin
Dim $hFadeOutDAT			; Zeiger auf die FadeOut.dat
Dim $sTempLine				; die eingelesenen Zeilen werden hier temporär gespeichert
Dim $bReadTheLines = False  ; Boolean - wird zum Leerzeilen überspringen genutzt
Dim $hSourceFile			; Zeiger auf die JPUser.dat
Dim $hTargetFile			; Zeiger auf die neue Verseion der JPUser.dat
Dim $bWriteToTarget			; Boolean - wenn False werden die eingelesenden Zeilen nicht geschrieben
Dim $iTimerstart			; Startzeit der Filterung
Dim $iTimerend				; Endzeit der Filterung
Dim $iLineCounter = 0		; Zeilenzählen - als Status geben wir alle 100 Zeilen einen Punkt aus


;                             10        20        30        40        50        60        70        80
;                 	 12345678901234567890123456789012345678901234567890123456789012345678901234567890
Dim $sHelp = 		'+------------------------------------------------------------------------------' & @CRLF & _
					'| JP_ProfileCleaner.exe - Version ' & FileGetVersion(@ScriptName) & @CRLF & _
					'+------------------------------------------------------------------------------' & @CRLF & _
					'| 2011-2015 von Bernhard Linz für http://znil.net - Kontakt: Bernhard@znil.net' & @CRLF & _
					'+------------------------------------------------------------------------------' & @CRLF & _
					@CRLF & _
					'Filtert Registry-Schlüssel aus einer JPUser.dat. Als Quelle dient eine' & @CRLF & _
					'JumpingProfiles FadeOut.dat im gleichen Verzeichnis wie dieses Programm.' & @CRLF & _
					'gefiltert werden alle Schlüssel die unterhalb von [DEFAULT] in der FadeOut.dat' & @CRLF & _
					'stehen - Umgebungen werden in dieser Version nicht berücksichtigt' & @CRLF & _
					'-------------------------------------------------------------------------------' & @CRLF & _
					@CRLF & _
					'Aufruf:' & @CRLF & _
					@ScriptName & ' [Pfad][Dateinname]' & @CRLF & _
					@CRLF & _
					'Beispiel:' & @CRLF & _
					@ScriptName & ' D:\Profiles\Benutzer\JumpingProfile\JPUser.dat' & @CRLF & _
					@CRLF & _
					'Beispiel für eine Batchverarbeitung: (Forfiles ist in jedem Windows enthalten)' & @CRLF & _
					@CRLF & _
					'Forfiles /P "D:\PF" /S /M JPUser.dat /C "cmd /c D:\JP_ProfileCleaner.exe @path"' & @CRLF & _
					@CRLF & _
					' "D:\PF" steht für den Pfad zu den Benutzerprofilen, Forfiles kann nicht mit' & @CRLF & _
					'         UNC Pfaden umgehen (ggf. als Netzlaufwerk mounten)' & @CRLF & _
					@CRLF & _
					' Das Beispiel verarbeitet alle JPUser.dat in allen Verzeichnissen' & @CRLF & _
					' unterhalb von "D:\PF"' & @CRLF & _
					@CRLF & _
					'+------------------------------------------------------------------------------' & @CRLF & _
					'| JP_ProfileCleaner ist FREEWARE! Kopieren, weitergeben ausdrücklich erlaubt!' & @CRLF & _
					'| Die jeweils aktuelleste Version und Anleitungen findet Ihr unter:' & @CRLF & _
					'| http://znil.net/index.php?title=ZnilTools:JP_ProfileCleaner' & @CRLF & _
					'+------------------------------------------------------------------------------' & @CRLF

; Prüfen  ob ein Parameter angegeben wurde - sonst beenden
If $CmdLine[0] = 0 Then
	ConsoleWrite(_ANSI2OEM("FEHLER - Keine Datei angegeben, /? für Hilfe" & @CRLF))
	Exit 0
EndIf

;Prüfen ob wir die Hilfe ausgeben sollen
If $CmdLine[1] = "/?" Then
	ConsoleWrite(_ANSI2OEM($sHelp))
	Exit 0
EndIf

; Holen wir uns den Dateinamen - oder was auch immer da steht
$sFilename = $CmdLine[1]
ConsoleWrite("STATUS - Verarbeite Datei " & $sFilename)
ConsoleWrite(@CRLF & "=> JP_ProfileCleaner = 2011-2015 znil.net <=" & @CRLF)

; Holen wir uns die Schlüssel die ausgefiltert werden sollen
ConsoleWrite("STATUS - Lese FadeOut.dat ein .....")
$hFadeOutDAT = FileOpen(@ScriptDir & "\FadeOut.dat",0)
If $hFadeOutDAT = -1 Then
	ConsoleWrite(_ANSI2OEM("FEHLER - Konnte FadeOut.dat nicht öffnen") & @CRLF)
	Exit 1
EndIf

$aFadeOutLines[0] = 0
While 1
	$sTempLine = FileReadLine($hFadeOutDAT)
	If @error <> -1 Then
		If $sTempLine <> "" And $bReadTheLines = True Then
			$aFadeOutLines[0] = $aFadeOutLines[0] + 1
			_ArrayAdd($aFadeOutLines,$sTempLine)
		EndIf
		If StringInStr($sTempLine,"[DEFAULT]") > 0 Then
			; Wenn DEFAULT kam lesen wir die Schlüssel ein.
			$bReadTheLines = True
		EndIf
	Else
		ExitLoop
	EndIf
WEnd
FileClose($hFadeOutDAT)
ConsoleWrite(_ANSI2OEM("fertig (" & $aFadeOutLines[0] & " Einträge)" & @CRLF))


; Filtern!
ConsoleWrite("STATUS - Filtere Datei ")
$iTimerstart = TimerInit()
$hSourceFile = FileOpen($sFilename,0)
If $hSourceFile = -1 Then
	ConsoleWrite(_ANSI2OEM(@CRLF & "FEHLER - Konnte " & $sFilename & "nicht öffnen" & @CRLF))
	Exit 1
EndIf
$hTargetFile = FileOpen($sFilename & ".temp.txt",34)

$bWriteToTarget = True

While 1
	$sTempLine  = FileReadLine($hSourceFile)
	If @error <> -1 Then               ;123456789012345678
		If StringLeft($sTempLine,18) = "HKEY_CURRENT_USER\" Then
			$bWriteToTarget = True
		EndIf
		If $bWriteToTarget = True Then
			For $i = 1 To $aFadeOutLines[0]
				If StringInStr($sTempLine,$aFadeOutLines[$i]) > 0 Then
					$bWriteToTarget = False
				EndIf
			Next
		EndIf
		If $bWriteToTarget = True Then
			FileWriteLine($hTargetFile,$sTempLine)
		EndIf
		$iLineCounter = $iLineCounter + 1
		If $iLineCounter > 99 Then
			ConsoleWrite(".")
			$iLineCounter = 0
		EndIf
	Else
		ExitLoop
	EndIf
WEnd

FileClose($hSourceFile)
FileClose($hTargetFile)

$iTimerend = TimerDiff($iTimerstart) / 1000

ConsoleWrite(" fertig, Laufzeit " & StringRegExpReplace($iTimerend,"(\d*)\.(\d{2})(\d*)","$1,$2") & " sec" & @CRLF)

ConsoleWrite("Tausche JPUser.dat aus ....")
FileMove($sFilename, $sFilename & ".OLDFILE",1)
FileMove($sFilename & ".temp.txt",$sFilename,1)
ConsoleWrite("fertig" & @CRLF & @CRLF)
Exit 0



; ###################################################################################
; _ANSI2OEM löst das Problem mit dem Umlauten und anderen Sonderzeichen. Es wandelt Text so um das er korrekt in der DOS-Box dargestellt wird
; So können hier im Quellcode auch Umlaute verwendet werden (in den Textausgaben) und diese werden dann korrekt dargestellt
; Dank an Xenobiologist von AutoIt.de für diese Lösung: http://www.autoit.de/index.php?page=Thread&threadID=9461&highlight=ANSI2OEM
Func _ANSI2OEM($text)
	$text = DllCall('user32.dll', 'Int', 'CharToOem', 'str', $text, 'str', '')
	Return $text[2]
EndFunc   ;==>_ANSI2OEM




7 Kommentare


Kommentar hinzufügen
znilwiki freut sich über alle Kommentare. Sofern du nicht anonym bleiben möchtest, trage deinen Namen oder deine Email-Adresse ein oder melde dich an. Du kannst das Feld auch einfach leer lassen.