Powershell und per Script Profile löschen.

Robmantuto

Ensign
Registriert
Apr. 2008
Beiträge
141
Ich würde gerne eine Script schreiben, das Profile löscht.
Folgendermaßen müsste es ablaufen:
Ich starte das Script, es kommt eine Abfrage, welches Profil auf dem Rechner soll gelöscht werden. Ich gebe den Namen des Profils ein und der Name wird dann in einer Variablen gespeichert, diese wir dann weiterverwendet. Die Abfrage bekomme ich hin.
Der nächste Schritt wäre, den Ordner mit dem gleichen Namen, der sich ja unter C:\Users\Name umzubenennen.
Das würde ich auch hinbekommen.
Der schwierigste Teil aber wäre in der Registry den Namen zu finden und den zuständigen Eintrag zu löschen.
Die Profile findet man ja unter "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\ProfileList". Jetzt sind ja die SID hinterlegt, die den Namen nicht enthalten, sondern diese findet man im Schlüssel unter ProfileImagePath. Wie stelle ich das am besten an, dass der Name gesucht wird, dann, wenn er gefunden wurde, der Schlüssel (SID) gelöscht wird, der den Namen beinhaltet?
Danke.
 
ich kann dir "delprof2" empfehlen. Funktioniert sauber und macht keine Probleme (Löscht Benutzerordner und Registry Einträge)
Kannst dir ein Script schreiben.
 
Per WMI gehts am einfachsten und auf jeden Fall am saubersten:

Code:
$UserAccount = Get-CimInstance Win32_UserAccount | Ogv -Title 'Wähle den UserAccount den du löschen möchtest!' -PassThru 

If ($UserAccount -notin $Null , '') { 
	Do { 
		$Answer = Read-Host "Möchtest du wirklich `"$($UserAccount.Name)`" löschen? (J=Ja, N=Nein)?" 
	} Until ($Answer -in 'J' , 'N') 
	If ($Answer -eq 'N') { Return } 
} Else { Return } 

Get-CimInstance Win32_Userprofile -Filter "SID = '$($UserAccount.SID)'" | Remove-CimInstance

# Hiermit löscht du auch den User vom System (einfach auskommentieren):     
#([ADSI] 'WinNT://localhost').delete('user' , $UserAccount.Name)

Hierbei wird auch der abgelegte Registry Hive (HCKU wenn das Profil geladen wurde) für den User gelöscht. An diesen hast du laut deinem Beitrag nämlich nicht gedacht ;)

Wenn du den Teil mit ([ADSI] 'WinNT://localhost').delete('user' , $UserAccount.Name) auskommentierst, dann löscht du im Anschluss auch den kompletten User vom System.
 
Zuletzt bearbeitet:
Danke, das ist schon mal ein sehr gutes Script, aber leider erkennt es nicht alle Profile, da auch Domänenprofile angelegt werden. Sie werden natürlich auch auf C:\Users und unter profilelist abgelegt. Ich gehe davon aus, dass das Script nur mit lokalen Profilen funktioniert?
Ergänzung ()

Ich habe jetzt
Code:
$UserAccount = Get-CimInstance Win32_UserProfile | Ogv -Title 'Wähle den UserAccount den du löschen möchtest!' -PassThru
genommen.
Das funktioniert auch gut. Ein Kleinigkeit hätte ich noch und zwar werden mir mit dieser Methode auch die anderen Sachen angezeigt wie Networkservice, LocalService und systemprofile. Kann man diese irgendwie ausschliessen, dass sie nicht angezeigt werden?
 
Zuletzt bearbeitet:
Ich habe noch keine Lösung gefunden, die anderen User auszublenden. Kann man es irgendwie über einen Fillter machen? Habe noch eine Frage: Wie kann ich das Eingabefenster vergrößern? Ich würde nicht den Standard haben wollen, sondern bestimmen wie groß es sein soll.
Ergänzung ()

Meine Lösung:

Code:
$UserAccount = Get-CimInstance Win32_UserProfile -Filter "Loaded = '$false'" | Ogv -Title 'Wähle den UserAccount den du löschen möchtest!' -PassThru 
$UserName = $UserAccount.LocalPath
$Ausgabe = $UserName.remove(0,9)
$Fenster = new-object -comobject wscript.shell
 
If ($UserAccount -notin $Null , '') { 
	Do { 
		$Answer = Read-Host "Möchtest du wirklich das Profil `"$($Ausgabe)`" löschen? (J=Ja, N=Nein)?" 
	} Until ($Answer -in 'J' , 'N') 
	If ($Answer -eq 'N') { Return } 
} Else { Return } 
 
Get-CimInstance Win32_Userprofile -Filter "SID = '$($UserAccount.SID)'" | Remove-CimInstance
$Fenster.popup(“Das Profil ''$Ausgabe'' wurde gelöscht“,0,“Bestätigung”,4096)
 
# Hiermit löscht du auch den User vom System (einfach auskommentieren):     
#([ADSI] 'WinNT://localhost').delete('user' , $UserAccount.Name)

Jetzt fehlt mir nur noch die Vergrößerung des Ausgabefensters, in dem die Abfrage stattfindet.

Für alle, die sich dafür interessieren, das Script für die Fensteranpassung:
Code:
$pshost = get-host

$pswindow = $pshost.ui.rawui

$newsize = $pswindow.buffersize

$newsize.height = 3000

$newsize.width = 150

$pswindow.buffersize = $newsize


$newsize = $pswindow.windowsize

$newsize.height = 50

$newsize.width = 150

$pswindow.windowsize = $newsize
 
Zuletzt bearbeitet:
Zurück
Oben