Mit Powershell Benutzerprofile löschen
Ordner Anwendungsdaten will sich nicht löschen lassen
Hallo,
ich habe aktuell das Problem, dass ich beim Serverneustart (ist ein Remote Desktop Sitzungshost) Benutzerprofile löschen will, die älter sind, als 7 Tage. Die Abfrage wie alt usw. ist alles kein Problem, nur will er nicht die "schreibgeschützten" Ordner unter AppData löschen. Fehlermeldung: Der Zugriff auf den Pfad "C:\users\Benutzer\Anwendungsdaten" wurde verweigert. Auch mit "-force" geht es leider nicht. Kann mir jemand sagen, was ich vergessen habe?
Grüße
SoullessInk
ich habe aktuell das Problem, dass ich beim Serverneustart (ist ein Remote Desktop Sitzungshost) Benutzerprofile löschen will, die älter sind, als 7 Tage. Die Abfrage wie alt usw. ist alles kein Problem, nur will er nicht die "schreibgeschützten" Ordner unter AppData löschen. Fehlermeldung: Der Zugriff auf den Pfad "C:\users\Benutzer\Anwendungsdaten" wurde verweigert. Auch mit "-force" geht es leider nicht. Kann mir jemand sagen, was ich vergessen habe?
Grüße
SoullessInk
3 Antworten
- LÖSUNG carp-catcher schreibt am 21.07.2011 um 14:51:44 Uhr
- LÖSUNG SoullessInk schreibt am 22.07.2011 um 14:44:28 Uhr
- LÖSUNG SoullessInk schreibt am 10.09.2013 um 17:24:32 Uhr
- LÖSUNG SoullessInk schreibt am 22.07.2011 um 14:44:28 Uhr
LÖSUNG 21.07.2011 um 14:51 Uhr
LÖSUNG 22.07.2011 um 14:44 Uhr
Hi, danke für die Antwort. Soweit ich weiß, wird das Skript mit den Berechtigungen gestartet, die der startende User inne hält. Es scheint in diesem Sinne also kein Berechtigungsproblem zu sein. Wenn man den Ordner versucht per Hand zu löschen, bekommt man eine Abfrage, das wären Systemdateien und ob man wirklich löschen wolle. Die Powershell ist scheinbar nicht ohne weiteres in der Lage dazu, diese Frage einfach mit "ja" zu beantworten.
Hier mal das aktuelle Codebeispiel:
Hier mal das aktuelle Codebeispiel:
$heute = Get-Date
$users2delete = Get-ChildItem ".\users\*" | Where {$_.PSIsContainer} | where {$_.Name -notmatch "administrator*|Default User|All Users|public" } | Where-Object {($Heute - $_.LastWriteTime).Days -gt 7}
$i = 0
do{
$User = $users2delete[$i].Name
Remove-Item -Path "c:\Users\$User" -recurse -force
Write-Output "Benutzer $User wurde gelöscht"
$i++
}While ($i -lt $users2delete.Count)
LÖSUNG 10.09.2013 um 17:24 Uhr
$profiles = gwmi -Class Win32_UserProfile
Danach muss man eigentlich nur noch schauen, welche Bedingungen erfüllt sein sollten. Bei mir war wichtig, dass der Profilpfad ein "C:\users\*" beinhaltete und die letzte Anmeldezeit länger als sieben Tage zurückliegt. Der Code Dafür sieht folgendermaßen aus:
Vielleicht hilft es ja noch wem.
Danach muss man eigentlich nur noch schauen, welche Bedingungen erfüllt sein sollten. Bei mir war wichtig, dass der Profilpfad ein "C:\users\*" beinhaltete und die letzte Anmeldezeit länger als sieben Tage zurückliegt. Der Code Dafür sieht folgendermaßen aus:
$now = get-date
$profiles = gwmi -Class Win32_UserProfile
foreach ( $pro in $profiles ) {
$lastlogon = $pro.converttodatetime($pro.lastusetime)
if ( ($now - $lastlogon).totaldays -ge 7 -and $pro.LocalPath -like "C:\users\*" ) {
$pro.Delete()
}
}