busteron
Goto Top

Registrywert suchen und Oberschlüssel löschen

Hallo werte Gemeinschaft,

leider bin ich nirgends im Internet fündig geworden um eine Lösung zu bekommen.

Ich hab folgendes Problem!
Ich möchte über einer Batch Datei einen Registrywert suchen und den Oberschlüssel des Wertes löschen.
Ich habe einen Registrywert:

Name: ProfileImagePath
Typ: REG_EXPAND_SZ
Daten: C:\Users\ hier steht der "wissende Nutzername"

es soll nun der "wissende Nutzername" in diesem Wert gefunden werden und der OBERSCHLÜSSEL soll gelöscht werden.
Dieser Oberschlüssel steht an folgender Stelle in der Reg!

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

Der Anfang des Oberschlüssels beginnt mit S-1-5-21


Kann mir jemand helfen dieses Problem zu lösen?

Content-Key: 270392

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

Printed on: April 18, 2024 at 02:04 o'clock

Member: Clijsters
Clijsters Apr 27, 2015 at 08:40:33 (UTC)
Goto Top
Hallo,

kann es sein, dass es sich immernoch um dieses Thema handelt?

Die Definition von "wissender Nutzername" und "Oberschlüssel" ist mir nicht ganz klar.

Ich nehme mal an, Du versuchst folgendes:
Im Schlüssel ProfileList alle Unterschlüssel durchsuchen, bis Du den Nutzer (mal angenommen mmustermann) gefunden hast.
Dann den ganzen Profilschlüssel von mmustermann löschen.

Wenn es nach wie vor darum geht, Benutzerprofile zu löschen, hast Du schonmal über folgende Möglichkeit via Powershell nachgedacht?
$UserSID = (Get-WmiObject Win32_UserProfile | Where {$_.LocalPath -like '*\test-*'}).SID  
(gwmi -class Win32_UserProfile -filter "SID='$UserSID'").Delete()  
Dieses Snippet sucht nach der SID des Users, dessen Profilpfad den Namen "\test-" am Ende enthält und entfernt dann Diese. (Inkl. Profil)
Ist eventuell eine etwas sauberere Variante, als einfach einen Reg-Schlüssel zu löschen, der Reste hinterlässt.


Sollte keine Powershell verfügbar sein, WMI kann auch von VBS und wmic (cmd) angesprochen werden.

Beste Grüße
Dominique
Member: colinardo
colinardo Apr 27, 2015 updated at 08:52:08 (UTC)
Goto Top
Hallo zusammen,
und hier noch als Ergänzung zu Dominique's Variante, hier der Schnippsel um nur den entsprechenden RegistryKey zu löschen (ebenfalls mit Powershell):
$username = "Meier"  
gci "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" | %{Get-ItemProperty $_.PSPath} | ?{$_.ProfileImagePath -like '\$username*'} | %{remove-item $_.PSPath -Force}  
oder auch
$username = "Meier"  
$sid = (New-Object System.Security.Principal.NTAccount($username)).Translate([System.Security.Principal.SecurityIdentifier]).Value
Get-Item "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$sid" | remove-item -Force  
Das komplette Profil nach Dominques Variante zu entfernen ist natürlich zu bevorzugen. Das nur als mögliche Varianten für das Suchen und Entfernen in der Registry via Powershell.

Grüße Uwe
Member: busteron
busteron Apr 27, 2015 at 09:01:38 (UTC)
Goto Top
Hallo Dominique,

ja du liegst richtig mit der Annahme das es sich um das gleiche Thema handelt.
Nur war die Reaktion ziehmlich einsilbig.
Mit diesem Thema wollte ich es nur nochmal konkretisieren.

Eure beiden Ansätze sind super nur bin ich hinsichtlich VBS leider nicht so bewandert und bei PowerShell auch nicht ganz so, da kommt aber noch die Verfügbarkeit mit hinzu die nicht überall gegeben ist.

Daher mein Frage hinsichtlich (batch) CMD, was ich doch schon etwas besser beherrsche.
Nur über WMIC hab ich keine so richtige Lösung gefunden.

Gibt es da auch einen Lösungsweg?
Member: Clijsters
Clijsters Apr 27, 2015 at 09:30:06 (UTC)
Goto Top
Get SID of user 2 Sekunden Google ;)

Nur zum sauberen Entfernen mittels Batch bin ich leider überfragt. Ich hatte schonmal nach etwas ähnlichem gesucht.
Die Powershell ist hier doch meiner Meinung nach die schönste Lösung.

Usernamen ersetzen (am Besten in Variable ablegen) und gut ist's...

Und was Powershell angeht, finden sich mittlerweile mehr und mehr Foren, Fachliteratur und Support.
Einmal Google angeworfen, "gwmi delete sid" und schon sprudelt die Quelle vor lauter Antworten.

Ich habe gerade mal etwas länger nach Möglichkeiten gesucht, Memberfunktionen mittels WMIC auszuführen (hier z.B. SID.Delete()) und komme da auf keinen grünen Zweig.
Hoffentlich hat jemand anders eine Lösung parat. Wäre daran auch sehr interessiert.


Beste Grüße
Dominique
Member: colinardo
colinardo Apr 27, 2015 updated at 09:48:03 (UTC)
Goto Top
Nur über WMIC hab ich keine so richtige Lösung gefunden.
wmic PATH WIN32_Userprofile where (LocalPath like '%\MaxMuster') delete /interactive:off
Für die Verwendung in einer Batch sind die Sonderzeichen wie das Prozentzeichen zu beachten (doppelung).

Grüße Uwe
p.s. zu Powershell kann ich dir nur raten dich unbedingt damit zu beschäftigen. Wird in Windows in naher Zukunft Batch ersetzen und ist ja schon seit Windows Vista nutzbar.
Member: Clijsters
Solution Clijsters Apr 27, 2015 updated at 12:22:31 (UTC)
Goto Top
Ist ja annähernd dasselbe. Ich habe schonmal zu danken!

Habe mal etwas zusammengeschnipselt, was aus einem Usernamen via Registry eine SID machen sollte. Der Rest sollte von selbst kommen ;)
@echo off
for /f "tokens=*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" ^| Find /i "S-1-5-21"') do (  
    for /f "tokens=2,* delims= " %%b in ('reg query "%%a" /v  "ProfileImagePath"') do (  
        if %%c == C:\Users\mmustermann (echo %%~na)
    )
)
Ich hoffe, busteron sollten nun alle nötigen Infos offeriert worden sein.


Beste Grüße
Dominique
Member: busteron
busteron Apr 27, 2015 at 12:22:10 (UTC)
Goto Top
Hallo Dominique,

na das war der entscheidene Ansatz!!

Vielen Dank, Perfekt!!

Super