LocalProfileKiller 1.00

Windows Vista und Windows 7 sollten ja eigentlich besser mit dem Löschen von lokalen Kopien der Profile klar kommen – zumindest nach der Meinung von Microsoft… Leider ist dies nicht immer ganz der Fall und es kommen ab und zu gerne einmal Meldungen wie: „Sie wurden mit einem temporären Profil angemeldet“ oder „Der Benutzerprofildienst konnte Sie nicht anmelden“, etc. Zudem können die Profile beim Abmelden meist dennoch nicht komplett entladen und somit gelöscht werden, so dass sich auf dem lokalen Client ein wunderbarer Datenfriedhof von lokalen verwaisten Profilen ansammelt…

Um Windows zu komplettieren und eine wirkliche Möglichkeit anzubieten, diese lokalen Profile zu löschen, habe ich ein kleines Hilfsprogramm geschrieben, welches beim Start oder beim Herunterfahren eines Rechners ausgeführt werden sollte – nur so sind die notwendigen Rechte vorhanden, um auch wirklich alle Aktionen durchführen zu können. Es spielt dabei keine Rolle auf welchem Laufwerk Windows installiert ist – das sucht das Tool selbst für Sie raus!

Folgende Aktionen werden durch das Tool unternommen:

  1. Es werden sämtliche Verzeichnisse unter dem „Users“-Ordner gelöscht – AUSSER: „Default, Default User, Public und All Users“ – diese Ordner sind ab Windows Vista sprachlich lokalisiert und deshalb läuft das Tool in allen Sprachversionen von Windows!
  2. Es werden jegliche Registry-Verweise unter dem Pfad „HKLM/Software/Microsoft/windows nt/CurrentVersion/ProfileList“ gelöscht, welche auf „Nicht-Standard-Profile“ verweisen. An diesem Ort speichert Windows Vista und höher zusätzlich nochmals alle Verweise von angemeldeten Benutzern, welche beim Laden von Profilen zu Irritationen führen könnten.

Zur Inbetriebnahme, muss einfach der nachfolgende Code in ein VBS-Script eingefügt werden. Diese Datei kann dann einfach über eine Gruppenrichtlinie über die Computereinstellungen auf eine OU mit Computerkonten verknüpft und über „Richtlinien/Windows-Einstellungen/Scripts“ als Start- oder Herunterfahr-Script eingebunden werden.

 
 ‚ **********************************************************************************************************
‚ **********************************************************************************************************
‚ LocalProfileKiller 1.00 by iTrain GmbH, André Pflaum, 15.09.2010
‚ Deletes all references to local profiles - folders and reg-hives
‚ This should be run during SHUTDOWN or START of a machine (System privileges)
‚ **********************************************************************************************************
‚ **********************************************************************************************************

OnErrorResumeNext

Const HKEY_LOCAL_MACHINE = &H80000002

strComputer = „.“
set WshShell = CreateObject(„WScript.Shell“)
vSystemDrive = Left(WshShell.ExpandEnvironmentStrings(„%SystemRoot%“),3)

‚ Deletion of the registry values
Set oReg=GetObject(„winmgmts:{impersonationLevel=impersonate}!\\“ & strComputer & „\root\default:StdRegProv“)

strKeyPath = „Software\Microsoft\windows nt\CurrentVersion\ProfileList“
oReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys

ForEach subkeyIn arrSubKeys
    ‚ Delete all subkeys if they start with “S-1-5-21″ and the length of it is more than 15 characters
    IfInStr(UCase(subkey), „S-1-5-21“) > 0AndLen(subkey) > 15Then
        DeleteSubkeys HKEY_LOCAL_MACHINE,strKeyPath & „\“ & subkey
    EndIf
Next

‚ Deletion of the user profile directories

Dim fso, fldr
Set fso = CreateObject(„Scripting.FilesystemObject“)

Set fldr = fso.GetFolder(vSystemDrive & „Users“)

‚ Delete subfolders
ForEach subfIn fldr.SubFolders

    IfUCase(subf.Name) = „ALL USERS“OrUCase(subf.Name) = „DEFAULT“OrUCase(subf.Name) = „DEFAULT USER“OrUCase(subf.Name) = „PUBLIC“Then
    ‚ Let them exist…
    Else
        ‚ Delete the directory, if it isn’t a default profile
        Set WshShell = WScript.CreateObject(„WScript.Shell“)
        Return = WshShell.Run(„%comspec% /c rd “„“ & vSystemDrive & „Users\“ & subf.Name & „“„ /S /Q“, 0, true)
    EndIf
    
Next

‚ Function: DeleteSubKey
Function DeleteSubkeys(HKEY_LOCAL_MACHINE,strKeyPath)

    Set oReg = GetObject(„winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv“)
    oReg.EnumKey HKEY_LOCAL_MACHINE,strKeyPath,arrSubKeys
        
    IfIsArray(arrSubkeys) = TrueThen
    
        ForEach strSubkeyIn arrSubKeys
            DeleteSubkeys HKEY_LOCAL_MACHINE,strKeyPath & „\“ & strSubkey
        Next
        
    EndIf
    
    oReg.DeleteKey HKEY_LOCAL_MACHINE,strKeyPath

EndFunction


VN:R_U [1.9.22_1171]
Rating: 10.0/10 (1 vote cast)
VN:F [1.9.22_1171]
Rating: +2 (from 2 votes)
LocalProfileKiller 1.00, 10.0 out of 10 based on 1 rating

5 Gedanken zu “LocalProfileKiller 1.00

  1. Ich glaube auch mit Windows Server 2030 werden wir noch über servergespeicherte Profile fluchen, es gibt Dinge die ändern sich nie 😉 Mittlerweile gehörts ja auch zur Microsoft-Folklore dazu, vermutlich würde einem was fehlen …

    Werde das Tool bei Gelegenheit mal testen genug Patienten fallen mir jedenfalls ein dies nötig hätten … :-)

    Grüße

    Frank

  2. Hehe – das ist so! MS tut sein bestes, damit wir das OS vervollständigen können… Aber das macht ja auch Spass – zumindest im Nachhinein betrachtet ;-D…

    Das Script habe ich gerade noch etwas angepasst und mit Source bereitgestellt.

    Grüessli

    André

  3. Hi Roland

    Ja – aber…: Irgendwo im Script wird das Verzeichnis „Users“ angegeben – das müsste dann mit „Dokumente und Einstellungen“ ersetzt werden. Dann gehts auch unter Windows XP…

    Grüessli

    André

  4. Again, cooles Script, André!
     
    Hinweis für Windows XP:
    – Der Pfad muss 2x angepasst werden (Zeile 36 und 46)
    – das Löschen der Registry Keys (Zeile 18-29) habe ich auskommentiert
     
    Als allgemeiner Hinweis:
    – zusätzliche, von der Löschung ausgenommene Pfade müssen GROSSGESCHRIEBEN werden. Das hat mich jetzt gerade ein bisschen Zeit gekostet… :)
    – Der erste Lauf in grösseren Umgebungen und vielen Userwechseln kann ne Weile dauern (ich hatte Zeiten bis 10 Minuten). Einfach zu beachten, nicht dass User am Montag morgen kommen und reklamieren 😉
     
    Sonst funktioniert es wie ne 1!
     
    Gruss
    Ivo

Schreib einen Kommentar