Powershell Script zum löschen von lokalen Profilen bei "Account Unknown"
Hallo zusammen,
ich habe nun schon einige Zeit gesucht und auch das ein oder andere gefunden, aber noch arbeitet nichts so wie ich mir das erhofft hatte.
Wir mussten die Domain neu machen und damit hat sich natürlich die RID, entsprechend auch die SID geändert.
Diese Leichen würde ich nun gerne aus unseren Servern entfernen.
Klar wäre es möglich das manuell zu machen, aber wenn es geht würde ich das gerne vermeiden.
Es soll also per Skript erkannt werden, dass das Userprofil aus der alten Domain stammt und dann entweder dadurch das Userprofil (wegen der Daten) an einen anderen Platz kopiert werden, alternativ sichere ich einfach alles vorher, viel wichtiger ist aber die anschließende Löschung dieses Userprofils.
Am liebsten wäre mir wenn ich zuvor auf einer Testmaschine ein whatif durchführen könnte.
Durch Get-ACL und Nutzung von WMI habe ich schon SID, Pfad, etc. herausbekommen, aber außer in der GUI scheint nirgendwo "Account Unknown" zu stehen.
Danke!
LG mcdy
ich habe nun schon einige Zeit gesucht und auch das ein oder andere gefunden, aber noch arbeitet nichts so wie ich mir das erhofft hatte.
Wir mussten die Domain neu machen und damit hat sich natürlich die RID, entsprechend auch die SID geändert.
Diese Leichen würde ich nun gerne aus unseren Servern entfernen.
Klar wäre es möglich das manuell zu machen, aber wenn es geht würde ich das gerne vermeiden.
Es soll also per Skript erkannt werden, dass das Userprofil aus der alten Domain stammt und dann entweder dadurch das Userprofil (wegen der Daten) an einen anderen Platz kopiert werden, alternativ sichere ich einfach alles vorher, viel wichtiger ist aber die anschließende Löschung dieses Userprofils.
Am liebsten wäre mir wenn ich zuvor auf einer Testmaschine ein whatif durchführen könnte.
Durch Get-ACL und Nutzung von WMI habe ich schon SID, Pfad, etc. herausbekommen, aber außer in der GUI scheint nirgendwo "Account Unknown" zu stehen.
Danke!
LG mcdy
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 323387
Url: https://administrator.de/contentid/323387
Ausgedruckt am: 22.11.2024 um 04:11 Uhr
10 Kommentare
Neuester Kommentar
Du kannst ja mit der SID ein NTAccount-Object anlegen wenn das geht gibt es den User noch ansonsten nicht
Ein kompettes Script kann ich dir schreiben, aber nich ümmesöns ...
(New-Object System.Security.Principal.SecurityIdentifier("S-1-5-21-99999999999-9999999999-999999999-1005")).Translate([System.Security.Principal.NTAccount]).Value
gwmi win32_Userprofile | ?{try{$result = (New-Object System.Security.Principal.SecurityIdentifier($_.SID)).Translate([System.Security.Principal.NTAccount])}catch{};!$result}
habe dann müsste man in catch{} schreiben was passieren soll wenn der erste Teil einen Fehler ausgelöst hat.
Nein.Warum du ein where-Object not result brauchst ist mir aber trotzdem nicht klar.
Das Where-Object gibt nur die Profile zurück bei denen kein Fehler bei der Auflösung aufgetreten ist.Wenn Fehler = User existiert nicht => $result muss also $true sein
Wenn kein Fehler = User existiert => $result muss also $false sein damit dieses Profil nicht zurückgegeben wird!
Last chance ...
Das Where-Object erwartet als Ergebnis einen Wert oder keinen du kannst hier nicht irgendwas in der Konsole im catch ausgeben ...
Wenn im try ein Fehler geworfen wird ist $result = $null und mit dem ! wird das umgedreht in $true. So einfach ist das...
I'm out now
Viel Erfolg
Gruß mik
Das Where-Object erwartet als Ergebnis einen Wert oder keinen du kannst hier nicht irgendwas in der Konsole im catch ausgeben ...
Wenn im try ein Fehler geworfen wird ist $result = $null und mit dem ! wird das umgedreht in $true. So einfach ist das...
Wie ich in diesem Fall aber die SID oder noch besser den Pfad zurück gebe, da kein Bezug mehr auf den Bereich vor der Pipe besteht, bleibt mir ein Rätsel.
???? Alle Objekte die nicht mehr passen also eine SID nicht existiert werden dir doch in der PIPE zurückgegeben!!!! Was willst du mehr?? Hänge einfach eine FOREACH-Schleife hinten dran und du kannst auf alle Eigenschaften des Profils zurückgreifen.gwmi win32_Userprofile | ?{try{$result = (New-Object System.Security.Principal.SecurityIdentifier($_.SID)).Translate([System.Security.Principal.NTAccount])}catch{};!$result} | %{$_.LocalPath}
I'm out now
Viel Erfolg
Gruß mik