Löschen von clientseitig gespeicherten Userprofilen auf Windows10-Clients unter Windows Server 2019
Hallo zusammen,
wir haben die Betreuung eines gut laufenden Windows Server 2019 mit ca. 70 Windows 10 Clients und ca. 800 Usern übernommen (Schule). Die User haben lokal gespeicherte Profile und bei der hohen Fluktuation (jedes Jahr ca. 100 Zu- und Abgänge) sammeln sich auf den Clients erhebliche Mengen an lokalen Profilen an. Ich habe in einigen Fällen mit der Windows-Systemsteuerung händisch nicht mehr benötigte Profile auf den Clients gelöscht, aber es kam schnell der Wunsch ein PowerShell-Script zu schreiben, welches Profile, die z.B. mehrere Monate alt sind bei Bedarf auf den Clients per Batch zu löschen. Leider bin ich PowerShell-Anfänger, möchte mich aber gerne einarbeiten.
Der erste Zugang zum Löschen erschien mir über Remove-LocalUser sinnvoll, aber wenn ich mir die Ausgabe über Get-LocalUser ansehe, habe ich nur die üblichen Windows10 User, wie Administrator, Gast usw. nicht aber die Domänenuser, die sich irgendwann an diesem Client angemeldet haben. Diese kann ich zwar z.B. mittels
Get-ChildItem -path "C:\Users\" *.* | Where-Object -FilterScript {($_.LastWriteTime -lt '2021-10-01')}
ausfiltern, aber ich weiß nicht wie ich den vollständigen Löschvorgang per Script vornehmen soll.
Für eine Hilfe wäre ich dankbar, meine Suche hier im Forum hat mich leider noch nicht weitergebracht.
Gruß
wir haben die Betreuung eines gut laufenden Windows Server 2019 mit ca. 70 Windows 10 Clients und ca. 800 Usern übernommen (Schule). Die User haben lokal gespeicherte Profile und bei der hohen Fluktuation (jedes Jahr ca. 100 Zu- und Abgänge) sammeln sich auf den Clients erhebliche Mengen an lokalen Profilen an. Ich habe in einigen Fällen mit der Windows-Systemsteuerung händisch nicht mehr benötigte Profile auf den Clients gelöscht, aber es kam schnell der Wunsch ein PowerShell-Script zu schreiben, welches Profile, die z.B. mehrere Monate alt sind bei Bedarf auf den Clients per Batch zu löschen. Leider bin ich PowerShell-Anfänger, möchte mich aber gerne einarbeiten.
Der erste Zugang zum Löschen erschien mir über Remove-LocalUser sinnvoll, aber wenn ich mir die Ausgabe über Get-LocalUser ansehe, habe ich nur die üblichen Windows10 User, wie Administrator, Gast usw. nicht aber die Domänenuser, die sich irgendwann an diesem Client angemeldet haben. Diese kann ich zwar z.B. mittels
Get-ChildItem -path "C:\Users\" *.* | Where-Object -FilterScript {($_.LastWriteTime -lt '2021-10-01')}
ausfiltern, aber ich weiß nicht wie ich den vollständigen Löschvorgang per Script vornehmen soll.
Für eine Hilfe wäre ich dankbar, meine Suche hier im Forum hat mich leider noch nicht weitergebracht.
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1728883210
Url: https://administrator.de/contentid/1728883210
Ausgedruckt am: 19.11.2024 um 11:11 Uhr
18 Kommentare
Neuester Kommentar
Hallo
Weisst du, dass es eine GPO gibt, um alte Profile zu löschen?
http://woshub.com/delete-old-user-profiles-gpo-powershell/
Gruss
Weisst du, dass es eine GPO gibt, um alte Profile zu löschen?
http://woshub.com/delete-old-user-profiles-gpo-powershell/
Gruss
Ich wäre mit dieser GPO vorsichtig.
Wie dem Link zu entnehmen ist:
Ich suche selbst noch nach einer besseren Alternative. Microsoft muss diesen Umstand fixen.
Wie dem Link zu entnehmen ist:
this policy may not work if some third-party software (most often it is an antivirus) accesses NTUSER.DAT file in user profiles and updates the date of last use.
Ich habe beobachtet, dass auf vielen Systemen das Letzter-Zugriff-Datum der ntuser.dat stets mit dem letzten Reboot übereinstimmte, egal, ob die Profile in Benutzung waren, oder nicht. Das hieße in Konsequenz: alte Profile würden nicht gelöscht.Ich suche selbst noch nach einer besseren Alternative. Microsoft muss diesen Umstand fixen.
Wenn das Log voll ist, wird das Älteste gelöscht, das ist Standard, ja. Somit verlierst Du, wenn das Log nicht ausreichend groß genug eingestellt ist, ggf. Anmeldelogeinträge und Profile werden unbeabsichtigt gelöscht. Da man das Log recht groß setzen kann, wird das nur selten passieren, wenn überhaupt, da gebe ich Dir Recht.
Aber Achtung: dein Skript funktioniert nur bei lokalen Nutzern. Domänennutzer werden nicht unter 7001 lokal aufgezeichnet, sondern da solltest Du eher 811/812 nehmen.
Dein jetziges Skript löscht somit derzeit die Profile aller Domänenkonten.
Aber Achtung: dein Skript funktioniert nur bei lokalen Nutzern. Domänennutzer werden nicht unter 7001 lokal aufgezeichnet, sondern da solltest Du eher 811/812 nehmen.
Dein jetziges Skript löscht somit derzeit die Profile aller Domänenkonten.
Verzeih bitte, ich habe das Log, welches Du nutzt, zunächst falsch abgelesen und mich an
Applications and Services Logs - Microsoft-Windows-Winlogon/Operational
orientiert und nicht an System.
Dann passt Dein Skript, so lange wie gegeben ist, dass es den vollen Zeitraum (60 Tage) aufzeichnet.
Pack also noch eine Zeile rein, die zunächst einmal feststellt, ob das älteste Ereignis des Systemlogs mindestens 60 Tage alt ist und sonst abbricht.
Applications and Services Logs - Microsoft-Windows-Winlogon/Operational
orientiert und nicht an System.
Dann passt Dein Skript, so lange wie gegeben ist, dass es den vollen Zeitraum (60 Tage) aufzeichnet.
Pack also noch eine Zeile rein, die zunächst einmal feststellt, ob das älteste Ereignis des Systemlogs mindestens 60 Tage alt ist und sonst abbricht.
Bau also noch sowas ein:
Exit wäre jetzt natürlich nur die Notbremse, besser wäre zusätzlich eine Benachrichtigungsmail, dass auf diesem System die Loggröße wohl erhöht werden muss. Oder Du automatisierst auch das Erhöhen gleich im Skript.
if ((get-eventlog system -source Microsoft-Windows-Winlogon -Before (Get-Date).AddDays(-60)) -eq $null) {exit}