"Konto unbekannt" auf AD-Clients per Powershell löschen
Hallo zusammen,
bei der letzten Clientrechner-Wartung hatte ich diverse, veraltete bzw. unbekannte Profile.
Da kam mir die Idee regelmäßig alle AD-Rechner diesbezüglich zu reinigen.
Es gibt wohl auch eine GPO-Einstellung dazu, die erscheinende Meldung wirft beim User aber wohl nur unnötig Fragen auf.
https://social.technet.microsoft.com/wiki/contents/articles/28647.how-to ...
Leider reichen meine Programmierkenntnisse nicht dafür.
Lokal funktioniert das so schon mal:
Müsste man aber eigentlich auch domänenweit über
pipen können?!
Danke und Gruß
rudeboy
bei der letzten Clientrechner-Wartung hatte ich diverse, veraltete bzw. unbekannte Profile.
Da kam mir die Idee regelmäßig alle AD-Rechner diesbezüglich zu reinigen.
Es gibt wohl auch eine GPO-Einstellung dazu, die erscheinende Meldung wirft beim User aber wohl nur unnötig Fragen auf.
https://social.technet.microsoft.com/wiki/contents/articles/28647.how-to ...
Leider reichen meine Programmierkenntnisse nicht dafür.
Lokal funktioniert das so schon mal:
Get-WMIObject -class Win32_UserProfile | Where {(!$_.Special) -and ($_.ConvertToDateTime($_.LastUseTime) -lt (Get-Date).AddDays(-732))} | Remove-WmiObject
Get-ADComputer -Filter * | Select -Expand Name
Danke und Gruß
rudeboy
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 331405
Url: https://administrator.de/contentid/331405
Ausgedruckt am: 22.11.2024 um 01:11 Uhr
6 Kommentare
Neuester Kommentar
Get-WMIObject akzeptiert den Parameter -ComputerName, und der akzeptiert auch ein Array, jetzt sollte es klick machen .
ACHTUNG mit deinem Befehl löschst du auch Profile von noch vorhandenen Usern. Besser du checkst die SID Auflösung zu einem User, wie hier:
Powershell Script zum löschen von lokalen Profilen bei "Account Unknown"
Gruß
ACHTUNG mit deinem Befehl löschst du auch Profile von noch vorhandenen Usern. Besser du checkst die SID Auflösung zu einem User, wie hier:
Powershell Script zum löschen von lokalen Profilen bei "Account Unknown"
gwmi win32_Userprofile | ?{try{$result = (New-Object System.Security.Principal.SecurityIdentifier($_.SID)).Translate([System.Security.Principal.NTAccount])}catch{$_}} | remove-wmiobject
Zitat von @132272:
Funktioniert der Befehl so? Eigentlich müsste im catch teil dein $_ die Exception repräsentieren, wodurch du eine Exception an "remove-wmiobject" weiterleitest.gwmi win32_Userprofile | ?{try{$result = (New-Object System.Security.Principal.SecurityIdentifier($_.SID)).Translate([System.Security.Principal.NTAccount])}catch{$_}} | remove-wmiobject
Müsste dann eigentlich so sein:
gwmi win32_Userprofile | ?{$obj=$_;try{$voidResult = (New-Object System.Security.Principal.SecurityIdentifier($obj.SID)).Translate([System.Security.Principal.NTAccount])}catch{$obj}} | remove-wmiobject
Außerdem ist gwmi (get-wmiobject) als deprecated markiert und erhält schon seit längerem keine funktions/performance updates wie Microsoft es nennt.
Get-CimInstance win32_Userprofile | ?{$obj=$_;try{$voidResult = (New-Object System.Security.Principal.SecurityIdentifier($obj.SID)).Translate([System.Security.Principal.NTAccount])}catch{$obj}} | Remove-CimInstance
Funktioniert der Befehl so?
Ja, weil hier ja tatsächlich nichts ausgeben werden soll und wird, da das in einem where-object stattfindet! Das ist nur dafür da damit dass Pipeline Object weitergeleitet wird , könnte man also auch durch ein $true ersetzen.Außerdem ist gwmi (get-wmiobject) als deprecated markiert
gwmi nur damit er es auch mit PS 2.0 nutzen kann, wer weiß ob er das noch auf reinen W7 ohne MMF Update abfackeln will
@132272
Jetzt weiß ich auch wieder, wieso ich diese Aliase sehr selten verwende...
Das gabs damals noch nicht?
Ist man nicht mehr dran gewöhnt, seitdem PowerShell mittels WSUS verteilt werden kann Und automatisch alle Clients (mit wenigen außnahmen) die Version 5 haben.
Zitat von @132272:
Ja, weil hier ja tatsächlich nichts ausgeben werden soll und wird, da das in einem where-object stattfindet! Das ist nur dafür da damit dass Pipeline Object weitergeleitet wird , könnte man also auch durch ein $true ersetzen.
Danke für die Erklärung. Dachte jetzt wirklich kurz, dass "?" der alias für ein foreach-Object währe, mein Fehler.Ja, weil hier ja tatsächlich nichts ausgeben werden soll und wird, da das in einem where-object stattfindet! Das ist nur dafür da damit dass Pipeline Object weitergeleitet wird , könnte man also auch durch ein $true ersetzen.
Jetzt weiß ich auch wieder, wieso ich diese Aliase sehr selten verwende...
Außerdem ist gwmi (get-wmiobject) als deprecated markiert
gwmi nur damit er es auch mit PS 2.0 nutzen kann, wer weiß ob er das noch auf reinen W7 ohne MMF Update abfackeln willIst man nicht mehr dran gewöhnt, seitdem PowerShell mittels WSUS verteilt werden kann Und automatisch alle Clients (mit wenigen außnahmen) die Version 5 haben.
Das gabs damals noch nicht?
Nope, erst seit PS 3.0.