cwinnn
Goto Top

Profile sauber löschen via Batch

Hallo,

ich tüftle nun seit ein paar Stunden rum, und werde leider bei Google sonst auch nicht weiter fündig..

Ich möchte via Batch Remote Benutzerprofile löschen.

Idee dazu war über Netzwerk auf das Laufwerk des Zielrechners zu gehen, dort in C:\Users zu gehen, mir den gewünschten Profilnamen raussuchen, diesen Ordner löschen oder wenn ein Backup gewünscht ist, umzubenennen, und anschließend in die Registry zu gehen, und mir dort unter "Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\" den richtigen Eintrag rauszusuchen und zu löschen. Das Script habe ich nun soweit fertig, nur leider scheitert es an dem Punkt wo ich in der Registry den richtigen Eintrag löschen will.

Ich möchte quasi mit der Batch schauen, in welchem Reg Ordner unter "Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\#Ordnername#"
der Eintrag "ProfileImagePath" "C:\Users\#Profilname#" ist und wenn #Profilname#=#Angegebner Profilname# ist den ganzen Reg Ordner in dem der Eintrag liegt löschen.

Habe nun wirklich schon alles Probiert. Den einzelnen Eintrag kriege ich gelöscht aber nicht den ganzen Ordner. Hat dazu jemand eine Idee ?


Das Script sieht im moment so aus :

@echo off

:start

cls

echo Clientname :

Set /p Client=


:Auswahl

cls

echo (1) Einzelnes (Bestimmtes) Profil
echo (2) Alle Profile

Set /p Auswahl=
if %Auswahl%==1 goto einzelnauswahl
if %Auswahl%==2 goto mehrereauswahl


:einzelnauswahl

cls

echo Profiliste fuer Client %Client% :
dir \\%Client%\C$\Users /b

echo Welches Profil soll geloescht werden ?

Set /p User=

echo soll ein Backup des Profils erstellt werden ? J/N
Set /p Backup=
if %Backup%==J goto einzelnmitbackup
if %Backup%==N goto einzelnohnebackup

:einzelnmitbackup

echo Profil %User% auf Clientname %Client% wird gelöscht..
ren \\%Client%\C$\Users\%User% %User%_backup

Content-ID: 598942

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

Ausgedruckt am: 22.11.2024 um 17:11 Uhr

erikro
Lösung erikro 25.08.2020 um 20:29:50 Uhr
Goto Top
Moin,

Zitat von @Cwinnn:

Hallo,

ich tüftle nun seit ein paar Stunden rum, und werde leider bei Google sonst auch nicht weiter fündig..

Ich möchte via Batch Remote Benutzerprofile löschen.

Batch ist dafür die falsche "Sprache". Tu Dir einen großen Gefallen und mache das mit der Powershell.

Idee dazu war über Netzwerk auf das Laufwerk des Zielrechners zu gehen, dort in C:\Users zu gehen, mir den gewünschten Profilnamen raussuchen, diesen Ordner löschen oder wenn ein Backup gewünscht ist, umzubenennen, und anschließend in die Registry zu gehen, und mir dort unter "Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\" den richtigen Eintrag rauszusuchen und zu löschen. Das Script habe ich nun soweit fertig, nur leider scheitert es an dem Punkt wo ich in der Registry den richtigen Eintrag löschen will.

Deshalb nimmt man dafür ja auch die Powershell. Da liegt die gesamte Registry als Objekte in Form von "Laufwerken" vor. Da kann ich drauf schreiben wie ich will. Und dass das Unterobjekt, dass Du suchst, eine SID ist, ist auch kein Problem, weil der User ebenso als Objekt vorliegt und ich so anhand des Usernamens die zugehörige SID herausfinden kann. Das geht mit Batches afaik nicht. Und sollte es doch irgendwie gehen, dann ist das wahrscheinlich ein kilometerlanges Skript mit 100 Goto-Anweisungen (einer meiner Profs meinte mal: Wer goto braucht, kann nicht programmieren face-wink ). In der PS wäre das ein Befehl.

remove-item HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\{$sid}

Vorher hat man in $sid die des Users eingelesen und gut ist. (Bei den geschweiften Klammern bin ich mir nicht sicher, ob die im Objekt nicht schon drin sind.)

Ich möchte quasi mit der Batch schauen, in welchem Reg Ordner unter "Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\#Ordnername#"

Ok

$(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$sid\").ProfileImagePath  

Mach's in der Powershell. face-wink

Liebe Grüße

Erik
mbehrens
Lösung mbehrens 25.08.2020 um 21:09:30 Uhr
Goto Top
Zitat von @Cwinnn:

Ich möchte via Batch Remote Benutzerprofile löschen.

[...]

Warum nicht einfach ein

Get-CimInstance -ClassName Win32_UserProfile | where {$_.LocalPath.Split('\')[-1] -eq '<Benutzername>'} | Remove-CimInstance  
Cwinnn
Cwinnn 26.08.2020 um 06:11:02 Uhr
Goto Top
Damit komme erstmal weiter. Hat geklappt. Danke !
Starmanager
Starmanager 26.08.2020 um 13:12:15 Uhr
Goto Top
Ich verwende das Tool von https://helgeklein.com/free-tools/delprof2-user-profile-deletion-tool/

Damit kann man einfach und schnell mal ein oder alle Profil/e loeschen.
erikro
erikro 26.08.2020 um 19:39:09 Uhr
Goto Top
Moin,

Warum nicht einfach ein

Get-CimInstance -ClassName Win32_UserProfile | where {$_.LocalPath.Split('\')[-1] -eq '<Benutzername>'} | Remove-CimInstance  

Ich wusste doch, dass man das in der PS in einer Zeile hinkriegt. face-wink Aber endlich mal einen überzeugt. face-wink

Liebe Grüße

Erik
Technoolli
Technoolli 13.06.2024 um 09:25:04 Uhr
Goto Top
Zitat von @mbehrens:

Zitat von @Cwinnn:

Ich möchte via Batch Remote Benutzerprofile löschen.

[...]

Warum nicht einfach ein

Get-CimInstance -ClassName Win32_UserProfile | where {$_.LocalPath.Split('\')[-1] -eq '<Benutzername>'} | Remove-CimInstance  


Bei mir funktioniert das nicht es kommt folgende Meldung:

In Zeile:1 Zeichen:74

back-to-top... ce -ClassName Win32_UserProfile | where {$_.LocalPath.Split ('\')[-1] ...

back-to-top~

Unerwartetes Token "(" in Ausdruck oder Anweisung.
+ CategoryInfo : ParserError: (face-smile [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken

Bei Benutzername habe Ich "Test" eingegeben und vorher natürlich einen Ordner Test unter Benutzer erstellt.