mabe12
Goto Top

Per batch ein Userprofile löschen

Hallo,
ich möchte per batch in der registry ein userprofil löschen und mein Problem ist den übergeordneten Eintrag zu finden.
Was ich habe ist das:
reg QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /s | findstr /I paul
ProfileImagePath REG_EXPAND_SZ C:\Users\paul

Was ich aber brauche ist der übergeodrnete Schlüssel:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-1169707632-819927519-313593124-35345

Hat da jemand eine Idee?
Grüße
mabe12
Kommentar vom Moderator Biber am Jan 19, 2012 um 15:53:57 Uhr
Verschoben von "Windows"-"Userverwaltung" nach "Batch & Shell"

Content-Key: 179135

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

Printed on: April 16, 2024 at 15:04 o'clock

Member: bastla
bastla Jan 18, 2012 at 17:16:36 (UTC)
Goto Top
Hallo mabe12 und willkommen im Forum!

Versuch es mal so:
@echo off & setlocal
set "Name=paul"  
set "Key=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList  

set "Search=True"  
for /f "delims=" %%i in ('reg QUERY "%Key%" /s') do (  
    echo %%i|findstr /e /i "\\%Name%">nul && set "Search="  
    if defined Search echo %%i|findstr /c:"%Key%">nul && for /f "tokens=7 delims=\" %%a in ("%%i") do set "SID=%%a"  
)
set "ProfileKey=%Key%\%SID%"  
Grüße
bastla
Member: Logan000
Logan000 Jan 19, 2012 at 07:28:35 (UTC)
Goto Top
Mon Moin

Als Plan B gann man die SID des Users mit PsGetSID ermitteln.

Gruß L.
Member: mabe12
mabe12 Jan 19, 2012 at 09:50:35 (UTC)
Goto Top
Moin,
danke erstmal für das welcome und natürlich die Antworten.
Wenn ich diese sehe merke ich das ich von for und findstr nicht wirklich viel verstehe ;-(

@bastla
erst hatte ich es mit Deiner Lösung versucht, aber in der Zeile:
echo %%i|findstr /e /i "\\%Name%">nul && set "Search="
ist ein Syntaxfehler drin (wird ganz kurz angezeigt).

Nun habe ich es aber so gelöst:
set "Name=paul"
set "Key=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
for /f %%i in ('psgetsid %Name%') do ( set "bla=%%i")
echo %Key%\%bla%


Was ich noch vergessen hatte:
Das Ergebnis aus bastlas Vorschlag lieferte immer den letzten vorhandenen Schlüssel...

Danke nochmals
Grüße mabe12
Member: bastla
bastla Jan 19, 2012 at 10:42:53 (UTC)
Goto Top
Hallo mabe12!

Mein Ansatz oben ist zwar performancemäßig bei vielen vorhandenen Profilen eine Zumutung, hatte aber (in der geposteten Version) bei mir (unter XP) funktioniert ...
Nur der Vollständigkeit halber eine schnellere Alternative:
@echo off & setlocal
set "Name=paul"  
set "Key=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList  

set "Nr="  
for /f "delims=:" %%i in ('reg QUERY "%Key%" /s^|findstr /n /e /i "\\%Name%"^|findstr "ProfileImagePath"') do set /a Nr=%%i  
if not defined Nr echo "%Name%" nicht gefunden! & goto :eof  

set /a Nr-=1
for /f "tokens=7 delims=\" %%a in ('reg QUERY "%Key%" /s^|findstr /n "^"^|findstr /b "%Nr%:"') do set "SID=%%a"  
set "ProfileKey=%Key%\%SID%"  
echo %ProfileKey%
Grüße
bastla

[Edit] Beschränkung auf "ProfileImagePath" ergänzt [/Edit]
Member: mabe12
mabe12 Jan 19, 2012 at 14:21:41 (UTC)
Goto Top
Hallo bastla,

ja nun geht es super, danke nochmals.
Ich versuche mich mal durchzuarbeiten, vllt. verstehe ich es ja doch noch face-wink.

Auf jeden Fall wird auf diese Weise der tatsächliche Pfad herausgefunden
und es gibt keine Probs wenn windows das Profil schon auf *.bak umbennant hat.

Gestern hatte ich vllt. vergessen zu erwähnen, das es für w7 und xp funzen soll.
Aber eigentlich sollte es zumindest an dieser Stelle keine Unterschiede geben.

Danke nochmal
Grüße
mabe12
Member: bastla
bastla Jan 19, 2012 at 14:49:37 (UTC)
Goto Top
Hallo mabe12!
vllt. verstehe ich es ja doch noch face-wink.
Wenn nicht, weißt Du ja, wo Du fragen könntest ... face-wink

Grüße
bastla