Wenn Sie ein IT-Experte sind und Schwierigkeiten haben, die Dateisystemberechtigungen für Ihre Organisationen festzulegen, haben Sie Glück. Die Verwaltung von NTFS-Berechtigungen mit einer grafischen Benutzeroberfläche ist zeitaufwändig, insbesondere wenn Sie mit vielen Benutzern oder Gruppen arbeiten. Glücklicherweise haben wir PowerShell, um alles besser zu machen. Wie? Das Microsoft.PowerShell.Security Modul.
PowerShell verfügt über zwei Cmdlets, die speziell für die Arbeit mit ACLs entwickelt wurden: Get-ACL
und Set-ACL
. Mit diesen beiden Cmdlets können Sie beliebig viele NTFS-Berechtigungen abrufen und zuweisen, worüber Sie in diesem Tutorial alles erfahren werden. Wenn Sie effizienter werden und sofort nützlich bei der Verwaltung von NTFS-Berechtigungen sein möchten, lesen Sie weiter.
Keine Zeit zum Lesen? Kein Problem! Schauen Sie sich das Begleitvideo von TechSnips.io’s Anthony Howell unten an:
Verwalten und Berichten Sie über Active Directory, Exchange und Microsoft 365 mit ManageEngine ADManager Plus. Laden Sie die kostenlose Testversion herunter!
Voraussetzungen
Um den Beispielen in diesem Tutorial folgen zu können, benötigen Sie:
- PowerShell 7 oder Windows PowerShell 5.1
- A basic understanding of NTFS file and folder permissions
Erstellen von Dateien/Ordnern zum Testen
Dieses Tutorial wird um ein einfaches „Labor“ oder einen einzelnen Ordner herum aufgebaut sein. Sie lernen, wie Sie mit NTFS-Berechtigungen in PowerShell von Grund auf arbeiten können; es ist keine zusätzliche Arbeit Ihrerseits erforderlich.
- Um zu beginnen, öffnen Sie eine PowerShell-Sitzung als Administrator.
- Erstellen Sie einen leeren Ordner namens Freigabe irgendwo auf Ihrem Dateisystem. In den folgenden Beispielen nehmen wir an, dass sich dieser Ordner unter C:\Freigabe befindet. Dadurch werden die Beispiele kürzer und leichter verständlich. Sie können dieses Verzeichnis erstellen, indem Sie den folgenden Code kopieren:
3. Erstellen Sie einen Ordner namens C:\Freigabe\Assets.
4. Erstellen Sie eine Datei namens client_list.txt im Ordner C:\Freigabe.
5. Erstellen Sie eine Datei namens client_projects.txt im Ordner C:\Freigabe.
6. Weisen Sie anschließend eine Variable für den Pfad des Ordners Freigabe zu. Das Erstellen von Variablen reduziert die Eingabe und erleichtert die Wiederverwendung des Pfads. Nehmen wir an, Sie verwenden C:\Freigabe, kopieren Sie das folgende Codebeispiel in Ihre PowerShell-Sitzung:
7. Drücken Sie die Eingabetaste. Sie haben nun ein leeres Verzeichnis und den Pfad als Variable gespeichert.
NTFS-Berechtigungen mit Get-Acl anzeigen
In PowerShell können Sie NTFS-Berechtigungen schnell mit dem Befehl Get-Acl
anzeigen. In den folgenden Abschnitten lernen Sie, wie Sie den Befehl verwenden, um NTFS-Berechtigungen für eine Datei oder einen Ordner anzuzeigen.
Eine Zugriffssteuerungsliste (ACL ist eine Liste von Zugriffssteuereinträgen (ACE). Jeder ACE in einer ACL identifiziert einen Treuhänder und gibt die erlaubten, verweigerten oder überwachten Zugriffsrechte an. Der Sicherheitsdeskriptor für ein sicherbares Objekt kann zwei Arten von ACLs enthalten: eine DACL und eine SACL.
Anzeige von NTFS-Berechtigungen
Traditionell würden Sie eine ACL anzeigen, indem Sie mit der rechten Maustaste auf den Ordner C:\Freigabe klicken, auf Eigenschaften klicken, den Reiter Sicherheit auswählen und auf die Schaltfläche Erweitert klicken. Ein Beispiel dafür, wie die GUI Berechtigungen anzeigt, können Sie unten sehen.

Das obige Beispiel enthält einige nummerierte Berechtigungseinträge und Eigenschaften. Untersuchen Sie sie genau, da Sie später in diesem Abschnitt einen Vergleich sehen werden.
Verwenden Sie das zuvor erstellte Verzeichnis und zeigen Sie die aktuellen NTFS-Berechtigungen für das Verzeichnis mit Get-Acl
an.
Sie sollten nun den Pfad, den Besitzer und die Zugriffsebene-Details in dem folgenden Screenshot sehen.

Die oben angezeigte Access
-Eigenschaft enthält weitere Informationen zu den ACLs, aber sie scrollt über den Bildschirm hinaus, wie durch die drei Punkte am Ende von FullControl angezeigt. Es gibt eine bessere Möglichkeit, diese Eigenschaft anzuzeigen, indem der vorherige Befehl in runden Klammern eingeschlossen wird, um die Access
Objekteigenschaften anzuzeigen. Suchen Sie nur nach der Access
-Eigenschaft auf diesem Objekt, indem Sie den folgenden Code ausführen.
Der obige Befehl kann auch mit dem
Access
-Objekt und dem-ExpandProperties
-Parameter ausgedrückt werden:Get-Acl -Path $dir | Select-Object -ExpandProperty Access
Wie im folgenden Screenshot dargestellt, ist die Ausgabe umgebrochen, um die einzelnen Access
-Eigenschaften besser erkennen zu können:

Wenn Sie die Zugriffseigenschaften auf diese Weise anzeigen, kann die Terminalausgabe schnell über den Bildschirm scrollen, wenn Sie viele Zugriffskontrollelemente (ACE) haben. Jedes Element enthält die FileSystemRights, AccessControlType, IdentityReference, IsInherited, InheritenceFlags und PropagationFlags Eigenschaften. Um dies etwas lesbarer zu gestalten, leiten Sie die Objekte an Format-Table -AutoSize
. Führen Sie den folgenden Befehl aus.
Wie Sie im untenstehenden Screenshot sehen können, sind die Zugriffseigenschaften sauberer und besser organisiert, wenn Sie Format-Table -AutoSize
verwenden:

Untersuchen Sie die Eigenschaften und die Spaltennummer. Beachten Sie, dass es sich um dieselben Eigenschaften handelt, die Sie zu Beginn des Tutorials in der GUI gesehen haben.

Filtern von Zugriffsobjekten
Es gibt Zeiten, in denen Sie genauer bestimmen möchten, wenn Sie NTFS-Berechtigungen herausfinden. Sie können dies tun, indem Sie nach einem bestimmten ACE filtern oder nach bestimmten Ergebnissen suchen, die vererbte oder explizite NTFS-Berechtigungen in einer ACL mit PowerShell haben. Anstatt das Terminalfenster zeilenweise zu scrollen, können Sie das Where-Object
-Cmdlet verwenden, um eine Filterung durchzuführen.
Das folgende Codebeispiel filtert nach Objekten, die keine NTFS-Berechtigungen erben. Dies geschieht durch Verwendung von Where-Object
mit dem -Not
-Operanden, der das aktuelle Objekt in der Pipeline $_.
auf das Eigenschaftsobjekt IsInherited
untersucht, das angibt, ob der ACE das Ergebnis der Vererbung ist und nicht explizit festgelegt wurde:
Vergessen Sie nicht, Objekte an
Format-Table -AutoSize
weiterzuleiten, sonst scrollt die Ausgabe über den Bildschirm. Machen Sie das zu einer neuen Gewohnheit; Sie werden mir später dafür danken!
Verwenden Sie den folgenden Code und ersetzen Sie 'BENUTZERNAME'
durch einen anderen Benutzernamen, um spezifische Ergebnisse zu sehen:
Im Folgenden sehen Sie ein Beispiel, wie die Ergebnisse aussehen könnten:

Das obige Beispiel zeigt alle ACEs, bei denen die Eigenschaft IdentityReference
dem Benutzer oder der Sicherheitsgruppe Berechtigungen zugewiesen hat.
Gehen Sie weiter und üben Sie das, was Sie bisher über
Get-Acl
gelernt haben. Untersuchen Sie verschiedene Dateien und Ordner auf Ihrem System. Dadurch sehen Sie viele verschiedene Sicherheitsdeskriptoren für verschiedene Kontexte. Dadurch können Sie auch etwas Muskelgedächtnis aufbauen.
Lassen Sie uns einen Schritt weiter gehen und NTFS-Berechtigungen zuweisen.
Ändern von NTFS-Berechtigungen mit Set-Acl
Jetzt, da Sie NTFS-Berechtigungen anzeigen können, ist es an der Zeit, NTFS-Berechtigungen mit PowerShell zuzuweisen und zu ändern. Der Befehl Set-Acl
macht dies möglich. Die folgenden Abschnitte zeigen, wie Sie diesen Befehl in Verbindung mit Get-Acl
verwenden können, um NTFS-Berechtigungen von einer Datei oder einem Ordner zu kopieren, Vererbung zu ändern und NTFS-Berechtigungen zu entfernen.
Kopieren von NTFS-Berechtigungen
Sie haben möglicherweise eine Datei oder einen Ordner, der die erforderliche Ebene der NTFS-Berechtigungen enthält, die Sie für eine neue ACL verwenden möchten. Sie können Zeit sparen, indem Sie Berechtigungen von einer Datei oder einem Ordner auf eine andere kopieren.
Das Kopieren vorhandener ACLs/ACEs kann menschliche Fehler bei der Einrichtung von NTFS-Berechtigungen reduzieren, vorausgesetzt, der Sicherheitsdeskriptor, von dem Sie kopieren, ist korrekt und für das Ziel in erster Linie geeignet. Wie es so schön heißt: „Mit großer Macht kommt große Verantwortung.“. Behalten Sie das im Hinterkopf.
Betrachten Sie den folgenden Screenshot. Hier sehen Sie sich die ACL für eine Datei in C:\Share mit dem Namen „Client_List.txt“ an. Die ACL hat die gewünschten NTFS-Berechtigungen:

Nun betrachten Sie den nächsten Screenshot. Dieses Mal sehen Sie sich die ACL für eine andere Datei in C:\Share mit dem Namen „Client_Projects.txt“ an. Diese Datei hat nicht die gewünschten NTFS-Berechtigungen:

Sie müssen die NTFS-Berechtigungen von „Client_List.txt“ auf „Client_Projects.txt“ kopieren. Wie können Sie das tun? Sie werden die Berechtigungen ändern, indem Sie die ACL von „Client_List.txt“ abrufen und dann das Cmdlet „Set-Acl“ mit dem Parameter „-AclObject“ verwenden. Wenn Sie den folgenden Code ausführen, wird die gesamte ACL von „Client_List.txt“ auf „Client_Projects.txt“ kopiert:
Wie Sie im nummerierten Screenshot unten sehen können, hat die Datei „Client_Projects.txt“ jetzt die gleichen Sicherheitsdeskriptoren wie „Client_List.txt“.
- Erhalten Sie eine vorhandene ACL von einer vorhandenen Datei.
- Weisen Sie die kopierte ACL-Objekt der Datei oder dem Ordner zu.
- Überprüfen Sie, ob die ACL korrekt auf die Datei oder den Ordner kopiert wurde.

Sie sehen nun, dass die ACL für die Datei „Client_Projects.txt“ identisch ist mit der Datei „Client_List.txt“ in der Spalte „IdentityReference“ mit „AccessControlType“ auf „Allow“ gesetzt. Sie verwenden die gleiche Technik auch zum Zuweisen von NTFS-Berechtigungen für Ordner.
Hinzufügen von NTFS-Berechtigungen
Im letzten Abschnitt haben Sie bestehende NTFS-Berechtigungen von einem Dateiobjekt auf ein anderes kopiert. Dieses Mal werden Sie NTFS-Berechtigungen von Grund auf erstellen. Dadurch können Sie NTFS-Berechtigungen zuweisen, die einer Datei oder einem Ordner zugewiesen werden.
Beginnen Sie zunächst damit, einigen Variablen zuzuweisen, die zur Erstellung eines neuen Objekts verwendet werden, das von Set-Acl
verwendet wird. Auf diese Weise wird es etwas einfacher, wenn es an der Zeit ist, den Befehl auszuführen. Der folgende Code erstellt die Eigenschaften einer ACE, die zu den NTFS-Berechtigungen werden, die einer Datei oder einem Ordner zugewiesen werden:
Weisen Sie als nächstes eine weitere Variable zu, die die ursprüngliche ACL für den Ordner Assets
erhält. Verwenden Sie dann den Member-Typ AddAccessRule
der Methode, um eine Zugriffsregel unter Verwendung der Variable $ACE
hinzuzufügen:
Jetzt können Sie die neu erstellte ACE der ACL von C:\Share\Assets
hinzufügen. Verwenden Sie nun Set-Acl
, um diese neue ACE auf das richtige Verzeichnis anzuwenden:
Überprüfen Sie anschließend mit dem folgenden Code, ob der von Ihnen gewählte Benutzer die Berechtigungen zum Anzeigen des benötigten Verzeichnisses hat:
Entfernen von NTFS-Berechtigungen
Es wird eine Zeit kommen, in der Sie NTFS-Berechtigungen von einer Ressource entfernen müssen.
Um NTFS-Berechtigungen zu entfernen, beginnen Sie damit, die aktuelle ACL für die Datei oder den Ordner abzurufen. In diesem Beispiel ist diese Datei Client_Projects.txt
:
Filtern Sie nun nach dem spezifischen ACE, den Sie entfernen möchten. Sie tun dies, indem Sie die $Acl
-Memberobjekte aufrufen und diese Ergebnisse an Where-Object
und einige Operanden weiterleiten:
Verwenden Sie anschließend die Variable $Acl
, die die aktuellen ACL-Sicherheitsdeskriptoren enthält. Rufen Sie die Methode RemoveAccessRule
auf und übergeben Sie das oben erstellte ACE-Objekt, das mit dem New-Object
-Cmdlet an die Methode RemoveAccessRule()
übergeben wird. Dadurch wird der Eintrag entfernt:
Es ist wichtig zu beachten, dass Sie hier eine vorhandene ACL geändert haben und die Änderungen noch nicht übernommen haben.
Um diese Änderungen zu übernehmen, führen Sie das Cmdlet Set-Acl
aus und geben Sie die Parameter -Path
und -AclObject
mit den entsprechenden Werten von "$dir\Client_Projects.txt"
und $Acl
an. Sobald Sie den folgenden Befehl eingegeben haben, drücken Sie Enter:
Verwalten und Berichten Sie über Active Directory, Exchange und Microsoft 365 mit ManageEngine ADManager Plus. Laden Sie die kostenlose Testversion herunter!
Zusammenfassung
In diesem Artikel haben Sie gelernt, wie man NTFS-Berechtigungen mit PowerShell verwalten kann. Sie haben die beiden Cmdlets Get-Acl
und Set-Acl
kennengelernt und was sie mit NTFS-Berechtigungen machen.
Sie haben auch gelernt, wie Sie Filter verwenden können, um eine bestimmte ACE in einer ACL für die Verwendung in den oben genannten Cmdlets anzusprechen. Mit etwas Übung werden Sie mehr NTFS-Berechtigungsanfragen als je zuvor problemlos verwalten können.