Aktionen

AutoIt:JP ProfileCleaner

Aus znilwiki

gehört zu JP_ProfileCleaner Offline Filterung von Registry-Schlüsseln in JPUser.dat
Ein Tool für JumpingProfiles Umgebungen

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=znil.ico
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Change2CUI=y
#AutoIt3Wrapper_Res_Description=Novemer 2011 Bernhard Linz
#AutoIt3Wrapper_Res_Fileversion=1.0.2.3
#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 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 & _
					'         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 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",2)

$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
Loading comments...