Wir haben ein Dokumentenverwaltungssystem, das Millionen von Dateien in einem NTFS-Dateisystem enthält, auf das über eine Netzwerkfreigabe zugegriffen wird. Ein einzelnes Dienstkonto benötigt die vollständige Berechtigung für alle diese Dateien, und die Anwendungsbroker greifen über dieses Dienstkonto zu.
Während einer Datenmigration ist etwas passiert und die Berechtigungen sind jetzt inkonsistent.
Ich habe versucht, ein Skript in PowerShell zu schreiben, um festzustellen, welche Dateien nicht über die entsprechende ACE verfügen, aber es get-acl
ist etwas ... schmerzhaft.
Ich habe verschiedene Kombinationen ausprobiert, ähnlich:
get-childitem -recurse | get-acl | select -expandproperty access |
where { $_.$_.IdentityReference -notcontains $principal
Dabei ist $ Principal der Benutzer, der eine Berechtigung im domain\user
Format benötigt.
Es muss einen Weg geben, das zu tun, oder? Was ist es? Ich möchte es in PowerShell nativ behalten und nicht verwenden icacls
oder cacls
wenn möglich.
quelle
Antworten:
Sie könnten es so machen (das Aufteilen in weitere Anweisungen hilft der Lesbarkeit):
Bitte testen Sie dies an einer kleineren Teilmenge von Dateien, bevor Sie in der Produktion laufen ;-)
Wenn Sie sicherstellen möchten, dass ein neuer expliziter ACE hinzugefügt wird, obwohl das Konto möglicherweise bereits über das geerbte Recht verfügt, filtern Sie geerbte Zugriffsregeln wie folgt heraus:
Beachten Sie, dass das zweite boolesche Argument jetzt
$false
angibt, dass geerbte Regeln nicht zurückgegeben werden sollenquelle