Set-Acl

Modul: Microsoft.PowerShell.Security

Ändert den Sicherheitsdeskriptor eines angegebenen Elements, z. B. einer Datei oder eines Registrierungsschlüssels.

Syntax

Set-Acl <String> <Object> >] >] 
Set-Acl <PSObject> <Object> >] >] 
Set-Acl -LiteralPath <String> <Object> >] >] 

Beschreibung

Das Cmdlet Set-Acl ändert den Sicherheitsbeschreiber eines angegebenen Elements, z. B. einer Datei oder eines Registrierungsschlüssels, so, dass er den Werten in einem von Ihnen bereitgestellten Sicherheitsbeschreiber entspricht.

Um Set-Acl zu verwenden, verwenden Sie den Path- oder InputObject-Parameter, um das Element zu identifizieren, dessen Sicherheitsbeschreibung Sie ändern möchten. Verwenden Sie dann die Parameter AclObject oder SecurityDescriptor, um einen Sicherheitsdeskriptor mit den gewünschten Werten bereitzustellen. Set-Acl wendet den übergebenen Securitydescriptor an. Er verwendet den Wert des AclObject-Parameters als Modell und ändert die Werte in der Sicherheitsbeschreibung des Elements so, dass sie mit den Werten im AclObject-Parameter übereinstimmen.

Beispiele

Beispiel 1: Kopieren einer Sicherheitsbeschreibung von einer Datei in eine andere

$DogACL = Get-Acl -Path "C:\Dog.txt"Set-Acl -Path "C:\Cat.txt" -AclObject $DogACL

Diese Befehle kopieren die Werte aus der Sicherheitsbeschreibung der Datei „Hund.txt“ in die Sicherheitsbeschreibung der Datei „Katze.txt“. Nach Abschluss der Befehle sind die Sicherheitsbeschreibungen der Dateien „Dog.txt“ und „Cat.txt“ identisch.

Der erste Befehl verwendet das Cmdlet Get-Acl, um die Sicherheitsbeschreibung der Datei „Dog.txt“ abzurufen.Der Zuweisungsoperator (=) speichert die Sicherheitsbeschreibung im Wert der Variablen „$DogACL“.

Der zweite Befehl verwendet Set-Acl, um die Werte in der ACL von „Cat.txt“ auf die Werte in $DogACL zu ändern.

Der Wert des Path-Parameters ist der Pfad zur Datei „Cat.txt“. Der Wert des AclObject-Parameters ist die Modell-ACL, in diesem Fall die ACL von Dog.txt, wie sie in der Variablen $DogACL gespeichert ist.

Beispiel 2: Verwenden des Pipelineoperators zum Übergeben eines Deskriptors

Get-Acl -Path "C:\Dog.txt" | Set-Acl -Path "C:\Cat.txt"

Dieser Befehl ist fast identisch mit dem Befehl im vorherigen Beispiel, außer dass er einen Pipelineoperator (|) verwendet, um den Sicherheitsdeskriptor von einem Get-AclBefehl an einen Set-AclBefehl zu senden.

Der erste Befehl verwendet das Cmdlet Get-Acl zum Abrufen des Sicherheitsdeskriptors der Datei „Dog.txt“. Der Pipelineoperator (|) übergibt ein Objekt, das den Sicherheitsdeskriptor von „Dog.txt“ darstellt, an das Cmdlet Set-Acl.

Der zweite Befehl verwendet Set-Acl, um den Sicherheitsdeskriptor von „Dog.txt“ auf „Cat.txt“ anzuwenden.Nach Abschluss des Befehls sind die ACLs der Dateien „Dog.txt“ und „Cat.txt“ identisch.

Beispiel 3: Anwenden einer Sicherheitsbeschreibung auf mehrere Dateien

$NewAcl = Get-Acl File0.txtGet-ChildItem -Path "C:\temp" -Recurse -Include "*.txt" -Force | Set-Acl -AclObject $NewAcl

Diese Befehle wenden die Sicherheitsbeschreibungen in der Datei File0.txt auf alle Textdateien im Verzeichnis C:\Temp und allen seinen Unterverzeichnissen an.

Der erste Befehl ruft den Sicherheitsbeschreiber der Datei „File0.txt“ im aktuellen Verzeichnis ab und verwendet den Zuweisungsoperator (=), um ihn in der Variablen $NewACL zu speichern.

Der erste Befehl in der Pipeline verwendet das Cmdlet „Get-ChildItem“, um alle Textdateien im Verzeichnis C:\Temp abzurufen. Der Recurse-Parameter erweitert den Befehl auf alle Unterverzeichnisse vonC:\temp. Der Include-Parameter schränkt die abgerufenen Dateien auf diejenigen mit der Dateinamenerweiterung .txt ein. Der Force-Parameter ruft versteckte Dateien ab, die sonst ausgeschlossen wären. (Sie können c:\temp\*.txt nicht verwenden, da der Recurse-Parameter auf Verzeichnisse und nicht auf Dateien wirkt.)

Der Pipeline-Operator (|) sendet die Objekte, die die abgerufenen Dateien darstellen, an das Set-Acl-Cmdlet, das die Sicherheitsbeschreibung im AclObject-Parameter auf alle Dateien in der Pipeline anwendet.

In der Praxis ist es am besten, den WhatIf-Parameter mit allen Set-Acl-Befehlen zu verwenden, die mehr als ein Element betreffen können. In diesem Fall wäre der zweite Befehl in der PipelineSet-Acl -AclObject $NewAcl -WhatIf. Dieser Befehl listet die Dateien auf, die von dem Befehl betroffen wären. Nachdem Sie das Ergebnis überprüft haben, können Sie den Befehl erneut ohne den WhatIf-Parameter ausführen.

Beispiel 4: Vererbung deaktivieren und vererbte Zugriffsregeln beibehalten

$NewAcl = Get-Acl -Path "C:\Pets\Dog.txt"$isProtected = $true$preserveInheritance = $true$NewAcl.SetAccessRuleProtection($isProtected, $preserveInheritance)Set-Acl -Path "C:\Pets\Dog.txt" -AclObject $NewAcl

Mit diesen Befehlen wird die Zugriffsvererbung von übergeordneten Ordnern deaktiviert, während die vorhandenen vererbten Zugriffsregeln erhalten bleiben.

Der erste Befehl verwendet das Cmdlet Get-Acl, um die Sicherheitsbeschreibung der Datei „Dog.txt“ abzurufen.

Nachfolgend werden Variablen erstellt, um die vererbten Zugriffsregeln in explizite Zugriffsregeln zu konvertieren. Um die damit verbundenen Zugriffsregeln vor Vererbung zu schützen, setzen Sie die Variable $isProtected auf$true.Um die Vererbung zu erlauben, setzen Sie $isProtected auf $false. Die Variable $preserveInheritance wird auf $true gesetzt, um vererbte Zugriffsregeln zu erhalten; false, um vererbte Zugriffsregeln zu entfernen. Dann wird der Zugriffsregelschutz mit der Methode SetAccessRuleProtection() aktualisiert.

Der letzte Befehl verwendet Set-Acl, um den Sicherheitsdeskriptor von auf Dog.txt anzuwenden. Wenn der Befehl abgeschlossen ist, werden die ACLs von „Dog.txt“, die vom Ordner „Pets“ geerbt wurden, direkt auf „Dog.txt“ angewendet, und neue Zugriffsrichtlinien, die zu „Pets“ hinzugefügt werden, ändern den Zugriff auf „Dog.txt“ nicht.

Beispiel 5: Administratoren volle Kontrolle über die Datei gewähren

$NewAcl = Get-Acl -Path "C:\Pets\Dog.txt"# Set properties$identity = "BUILTIN\Administrators"$fileSystemRights = "FullControl"$type = "Allow"# Create new rule$fileSystemAccessRuleArgumentList = $identity, $fileSystemRights, $type$fileSystemAccessRule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $fileSystemAccessRuleArgumentList# Apply new rule$NewAcl.SetAccessRule($fileSystemAccessRule)Set-Acl -Path "C:\Pets\Dog.txt" -AclObject $NewAcl

Dieser Befehl gewährt der Gruppe „BUILTIN\Administrators“ volle Kontrolle über die Datei „Dog.txt-Datei.

Der erste Befehl verwendet das Cmdlet Get-Acl, um den Sicherheitsdeskriptor der Datei „Dog.txt“ abzurufen.

Nächste Variablen werden erstellt, um der Gruppe BUILTIN\Administrators volle Kontrolle über die Datei „Dog.txt“ zu gewähren. Die Variable $identity wird auf den Namen eines Benutzerkontos gesetzt. Die Variable $fileSystemRights wird auf FullControl gesetzt und kann einer der Werte vonFileSystemRights sein, die die Art des mit der Zugriffsregel verbundenen Vorgangs spezifizieren. Die Variable $type, die auf „Allow“ gesetzt ist, gibt an, ob der Vorgang zugelassen oder verweigert werden soll. Die Variable $fileSystemAccessRuleArgumentList ist eine Argumentliste, die bei der Erstellung des neuen FileSystemAccessRule-Objekts übergeben werden muss. Dann wird ein neues FileSystemAccessRule-Objekt erstellt, und das FileSystemAccessRule-Objekt wird an die Methode SetAccessRule() übergeben, die die neue Zugriffsregel hinzufügt.

Der letzte Befehl verwendet Set-Acl, um den Sicherheitsdeskriptor von auf Dog.txt anzuwenden. Wenn der Befehl abgeschlossen ist, hat die Gruppe BUILTIN\Administratoren die volle Kontrolle über die Datei Dog.txt.

Parameter

-AclObject

Spezifiziert eine ACL mit den gewünschten Eigenschaftswerten. Set-Acl Ändert die ACL des durch den Parameter Path oder InputObject angegebenen Elements so, dass sie mit den Werten im angegebenen Sicherheitsobjekt übereinstimmt.

Sie können die Ausgabe eines Get-Acl-Befehls in einer Variablen speichern und dann den Parameter AclObject verwenden, um die Variable zu übergeben, oder einen Get-Acl-Befehl eingeben.

Typ: Objekt
Position: 1
Standardwert: Keine
Akzeptiere Pipeline-Eingang: True
Accept wildcard characters: False

-ClearCentralAccessPolicy

Entfernt die zentrale Zugriffsrichtlinie von dem angegebenen Element.

Beginnend mit Windows Server 2012 können Administratoren Active Directory und Gruppenrichtlinien verwenden, um zentrale Zugriffsrichtlinien für Benutzer und Gruppen festzulegen. Weitere Informationen finden Sie unterDynamische Zugriffssteuerung: Szenarioübersicht.

Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.

Typ: SwitchParameter
Position: Benannt
Standardwert: False
Pipelineeingabe akzeptieren: False
Accept wildcard characters: False
-Confirm

Sie werden vor der Ausführung des Cmdlets zur Bestätigung aufgefordert.

Typ: SwitchParameter
Aliases: cf
Position: Named
Standardwert: False
Accept pipeline input: False
Accept wildcard characters: False
-Exclude

Lässt die angegebenen Elemente aus. Der Wert dieses Parameters qualifiziert den Path-Parameter. Geben Sie ein Pfadelement oder Muster ein, z. B. *.txt. Wildcards sind zulässig.

Typ: Zeichenkette
Position: Benannt
Standardwert: Keine
Akzeptiere Pipelineeingabe: False
Accept wildcard characters: True
-Filter

Spezifiziert einen Filter im Format oder der Sprache des Anbieters. Der Wert dieses Parameters qualifiziert denPath -Parameter. Die Syntax des Filters, einschließlich der Verwendung von Platzhaltern, hängt vom Anbieter ab. Filter sind effizienter als andere Parameter, da der Anbieter sie beim Abrufen der Objekte anwendet, anstatt PowerShell die Objekte nach dem Abrufen filtern zu lassen.

Typ: String
Position: Benannt
Standardwert: Keine
Akzeptiere Pipelineeingabe: False
Accept wildcard characters: True
-Include

Ändert nur die angegebenen Elemente. Geben Sie ein Pfadelement oder ein Muster ein, z. B. *.txt. Wildcards sind zulässig.

Typ: Zeichenkette
Position: Benannt
Standardwert: Keine
Akzeptiere Pipelineeingabe: False
Accept wildcard characters: True
-InputObject

Ändert den Security Descriptor des angegebenen Objekts. Geben Sie eine Variable ein, die das Objekt enthält, oder einen Befehl, der das Objekt abruft.

Sie können das zu ändernde Objekt nicht über die Pipeline an Set-Acl übergeben. Verwenden Sie stattdessen den InputObject-Parameterexplizit im Befehl.

Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.

Typ: PSObject
Position: 0
Standardwert: Keine
Akzeptiere Pipelineeingabe: True
Accept wildcard characters: False
-LiteralPath

Ändert den Sicherheitsdeskriptor des angegebenen Elements. Im Gegensatz zu Path wird der Wert des ParametersLiteralPath genau so verwendet, wie er eingegeben wird. Es werden keine Zeichen als Wildcards interpretiert. Wenn der Pfad Escape-Zeichen enthält, schließen Sie ihn in einfache Anführungszeichen ein (').Einfache Anführungszeichen weisen PowerShell an, keine Zeichen als Escape-Sequenzen zu interpretieren.

Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.

Typ: String
Aliases: PSPath
Position: Benannt
Standardwert: Keine
Akzeptiere Pipeline-Eingabe: True
Accept wildcard characters: False
-Passthru

Gibt ein Objekt zurück, das die geänderte Sicherheitsbeschreibung darstellt. Standardmäßig erzeugt dieses Cmdlet keine Ausgabe.

Typ: SwitchParameter
Position: Benannt
Standardwert: Keine
Akzeptiere Pipelineeingabe: False
Accept wildcard characters: False
-Path

Ändert den Sicherheitsdeskriptor des angegebenen Elements. Geben Sie den Pfad zu einem Element ein, z. B. einen Pfad zu einer Datei oder einem Registrierungsschlüssel. Platzhalter sind zulässig.

Wenn Sie ein Sicherheitsobjekt an Set-Acl übergeben (entweder mit den Parametern AclObject oderSecurityDescriptor oder durch Übergabe eines Sicherheitsobjekts von Get-Acl an Set-Acl) und Sie den Path-Parameter (Name und Wert) weglassen, verwendet Set-Acl den Pfad, der in diesem Sicherheitsobjekt enthalten ist.

Typ: Zeichenkette
Position: 0
Standardwert: Keine
Akzeptiere Pipelineeingabe: True
Accept wildcard characters: True
-WhatIf

Zeigt an, was bei Ausführung des Cmdlets passieren würde. Das Cmdlet wird nicht ausgeführt.

Typ: SwitchParameter
Aliases: wi
Position: Named
Standardwert: False
Accept pipeline input: False
Accept wildcard characters: False

Inputs

System.Security.AccessControl.ObjectSecurity, System.Security.AccessControl.CommonSecurityDescriptor

Sie können ein ACL-Objekt oder einen Sicherheitsdeskriptor über die Pipeline an Set-Acl übergeben.

Outputs

FileSecurity

Standardmäßig erzeugt Set-Acl keine Ausgabe. Wenn Sie jedoch den Passthru-Parameter verwenden, erzeugt es ein Sicherheitsobjekt. Der Typ des Sicherheitsobjekts hängt vom Typ des Elements ab.

Hinweise

Dieses Cmdlet ist nur auf Windows-Plattformen verfügbar.

Das Cmdlet Set-Acl wird vom PowerShell-Dateisystem und den Registrierungsanbietern unterstützt. Daher können Sie damit die Sicherheitsbeschreibungen von Dateien, Verzeichnissen und Registrierungsschlüsseln ändern.

  • Get-Acl
  • FileSystemAccessRule
  • ObjectSecurity.SetAccessRuleProtection
  • FileSystemRights

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.