Delete User Profiles Remotely

Delete User Profiles Remotely

Alte Benutzerprofile per Powershell löschen

Zur Löschung von alten Benutzerprofilen kann man unter Windows auch eine Gruppenrichtlinie einsetzen. Aber die Gruppenrichtlinie unterscheidet nicht zwischen normalen, administrativen oder technischen Konten. Powershell-Skripte wie “Delete User Profiles Remotely” oder “Deletes user profiles if they do not exist in Active Directory” sind gute Alternativen zur gezielten Löschung.

Computer Configuration → Administrative Templates → System → User Profiles

Benutzerprofile, die älter als eine bestimmte Anzahl von Tagen sind, beim Systemstart löschen

Aus diesem Grund arbeite ich an dieser Stelle entweder mit einem Windows-Task und einer Liste von Mitarbeitern die das Unternehmen verlassen haben (Off-Boarding), oder manuell per Invoke-Command.

Delete User Profiles Remotely

Die manuelle Löschung, gerade dann, wenn es sich um administrative Benutzer handelt, sollte unverzüglich starten.

Für die Löschung von alten Benutzerkonten gibt es unterschiedliche Gründe. Zum einen aus dem Aspekt des Datenschutzes (Aufbewahrungs- oder Löschfristen) heraus, oder aber auch zur Optimierung der Festplattenkapazität.

Hier ein Beispiel-Skript für die manuelle Löschung per Invoke-Command. Es müssen lediglich die zu löschenden Benutzerkonten angegeben werden, so wie die Server auf denen die Konten gelöscht werden sollen.

Delete User profiles remotely

Delete User Profiles Remotely

# https://www.der-windows-papst.de

$Users = “AGMP”,”Benutzer1″,”Joern”
$Computers = “CL2”,”CL1“

foreach ($User in $Users) {

foreach ($Computer in $Computers) {

Invoke-Command -ComputerName $computer -ScriptBlock {
param($user)
$localpath = ‘C:\Users\’ + $user
Get-WmiObject -Class Win32_UserProfile | Where-Object {$_.LocalPath -eq $localpath} |
Remove-WmiObject
} -ArgumentList $user
}}

Vor der Löschung:

Delete User profiles Powershell

Nach der Löschung:

Alte Benutzerprofile per Powershell löschen

Download-Skript:

Delete User profiles remotely

Dieses Skript kann man z.B. auf Domain Controllern einsetzen. Das Skript löscht aber nur die Benutzerprofile, deren Objekte im Active Directoy bereits gelöscht wurden. Auch hier wird eine Liste eingesetzt, die per Powershell eingelesen wird. Zusätzlich werden Event-Logs geschrieben.

Deletes user profiles if they do not exist in Active Directory

# https://www.der-windows-papst.de
If ([System.Diagnostics.EventLog]::SourceExists(‘DeleteUserProfiles’) -eq $False) {

New-EventLog -LogName Application -Source ‘DeleteUserProfiles’

}

$UserList = Get-Content -Path ‘\\windowspapst.de\Netlogon\Deleteprofiles.txt’
foreach ($User in $UserList) {
try {
Get-ADUser -Identity $User -ErrorAction Stop | Out-Null

Write-Host “User $User exists in AD and will not be deleted” -ForegroundColor Green
Write-EventLog –LogName Application –Source “DeleteUserProfiles” -EntryType Information -EventID 0 -Message “User $User exists in AD and will not be deleted”
continue

} catch {

if(-not (Test-Path “C:\Users\$User”)){
Write-Host “The localpath from User $User has already been deleted” -ForegroundColor Cyan
Write-Output “The localpath from User $User has already been deleted on Server $env:computername” >> ‘\\windowspapst.de\Netlogon\DeleteprofilesLog.txt’
Write-EventLog –LogName Application –Source “DeleteUserProfiles” -EntryType Information -EventID 1 -Message “The localpath from User $User has already been deleted on Server $env:computername”

}
else {

Write-Host “User [$User] does not exists in AD and will be deleted.” -ForegroundColor Red
$Del=Get-WmiObject Win32_UserProfile -filter “localpath=’C:\\Users\\$User'”
$Del.Delete()
Write-Output “User [$User] does not exists in AD and will be deleted on Server $env:computername” >> ‘\\windowspapst.de\Netlogon\DeleteprofilesLog.txt’
Write-EventLog –LogName Application –Source “DeleteUserProfiles” -EntryType Warning -EventID 2 -Message “User [$User] does not exists in AD and will be deleted on Server $env:computername”
}
}
}

Download-Skript:

Deletes user profiles if they do not exist in Active Directory