Gibt es eine Lösung, um Konto-Unbekannt-SIDs (S-1-5-21-*) durch vorhandene SIDs zu ersetzen?

Gibt es eine Lösung, um Konto-Unbekannt-SIDs (S-1-5-21-*) durch vorhandene SIDs zu ersetzen?

Bei vielen Dateien aus alten/anderen Windows-Installationen ist die Meldung „Konto unbekannt“ typisch und es gibt überall eine Menge typischer Antworten.
Ich suche jedoch nicht nach einer typischen takeown, subinacl, xcaclsoder GUI-Lösung. Ich möchte diese unbekannten SIDs in bekannte lokale SIDs ändern, aber Berechtigungstypen und Vererbung beibehalten.

Das Einzige, was dem, was ich suche, bisher nahe kommt, ist das folgende PowerShell-Skript:http://poshcode.org/2081das das Löschen unbekannter SIDs in Netzwerkfreigaben ermöglicht. Es enthält eine grundlegende Logik zum Auffinden unbekannter SIDs, aber ich habe noch keine Möglichkeit gefunden, SIDs in FileSystemAccessRuleObjekten zu ersetzen, aber ich bin nicht so gut mit PowerShell oder .NET vertraut.
Wenn ich mich nicht irre,Dieser Artikelauf MS TechNet wird die Konstruktion vorgeschlagen FileSystemAccessRuleund das kann erreicht werden.

Weiß jemand, ob es dafür eine bessere Lösung gibt? Vielleicht gibt es eine Anwendung, ein Befehlszeilentool oder ein Cmdlet für diese Aufgabe?

Antwort1

In Powershell können Get-AclSie Set-Acldie ACL ändern, indem Sie die SDDL-Zeichenfolge manipulieren.

Holen Sie sich zuerst das ACL-Objekt.

$acl = Get-Acl -Path C:\YourFile.txt

Holen Sie sich jetzt die SDDL-Zeichenfolge:

$sddl = $acl.sddl

Jetzt können Sie die SID in der Zeichenfolge durch das ersetzen, was Sie möchten. Dabei wird ein regulärer Ausdruck verwendet, um teilweise Übereinstimmungen zu aktualisieren.

$sddl2 = $sddl -replace "S-1-5-21-[0-9-]+", "ExistingSIDHere"

Aktualisieren Sie dann das ACL-Objekt:

$acl.SetSecurityDescriptorSddlForm($sddl2)

Legen Sie dann die ACL des Objekts fest:

Set-Acl -AclObject $acl -Path C:\YourFile.txt

verwandte Informationen