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
, xcacls
oder 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 FileSystemAccessRule
Objekten 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 FileSystemAccessRule
und 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-Acl
Sie Set-Acl
die 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