Set-Acl

Ändert die Sicherheitsbeschreibung für ein angegebenes Element, z. B. eine Datei oder einen Registrierungsschlüssel.

Syntax

Set-Acl
   [-Path] <String[]>
   [-AclObject] <Object>
   [-ClearCentralAccessPolicy]
   [-Passthru]
   [-Filter <String>]
   [-Include <String[]>]
   [-Exclude <String[]>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
Set-Acl
   [-InputObject] <PSObject>
   [-AclObject] <Object>
   [-Passthru]
   [-Filter <String>]
   [-Include <String[]>]
   [-Exclude <String[]>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
Set-Acl
   -LiteralPath <String[]>
   [-AclObject] <Object>
   [-ClearCentralAccessPolicy]
   [-Passthru]
   [-Filter <String>]
   [-Include <String[]>]
   [-Exclude <String[]>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

Beschreibung

Dieses Cmdlet ist nur auf der Windows-Plattform verfügbar.

Das Set-Acl Cmdlet ändert die Sicherheitsdeskriptor eines angegebenen Elements, z. B. eine Datei oder einen Registrierungsschlüssel, um den Werten in einem von Ihnen bereitgestellten Sicherheitsdeskriptor zu entsprechen.

Verwenden Set-AclSie den Parameter Path oder InputObject , um das Element zu identifizieren, dessen Sicherheitsdeskriptor Sie ändern möchten. Verwenden Sie dann die Parameter AclObject oder SecurityDescriptor, um eine Sicherheitsbeschreibung mit den Werten anzugeben, die Sie anwenden möchten. Set-Acl wendet den bereitgestellten Sicherheitsdeskriptor an. Es verwendet den Wert des AclObject-Parameters als Modell und ändert die Werte in der Sicherheitsbeschreibung des Elements, sodass sie den Werten im AclObject-Parameter entsprechen.

Beispiele

Beispiel 1: Kopieren eines Sicherheitsdeskriptors 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 „Dog.txt“ in die Sicherheitsbeschreibung der Datei „Cat.txt“. Wenn die Befehle abgeschlossen sind, stimmen die Sicherheitsbeschreibungen von Dog.txt und Cat.txt überein.

Der erste Befehl verwendet das Get-Acl Cmdlet, um den Sicherheitsdeskriptor der Dog.txt-Datei abzurufen. Der Zuordnungsoperator (=) speichert den Sicherheitsdeskriptor im Wert der $DogACL Variablen.

Der zweite Befehl verwendet Set-Acl , um die Werte in der ACL von Cat.txt in die Werte in $DogACL.

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

Beispiel 2: Verwenden des Pipelineoperators zum Übergeben eines Deskriptors

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

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

Der erste Befehl verwendet das Get-Acl Cmdlet, um den Sicherheitsdeskriptor der Dog.txt-Datei abzurufen. Der Pipelineoperator (|) übergibt ein Objekt, das den Dog.txt Sicherheitsdeskriptor an das Set-Acl Cmdlet darstellt.

Der zweite Befehl verwendet Set-Acl , um den Sicherheitsdeskriptor von Dog.txt auf Cat.txt anzuwenden. Wenn der Befehl abgeschlossen ist, stimmen die ACLs von Dog.txt und Cat.txt überein.

Beispiel 3: Anwenden eines Sicherheitsdeskriptors auf mehrere Dateien

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

Diese Befehle wenden die Sicherheitsdeskriptoren in der datei File0.txt auf alle Textdateien im C:\Temp Verzeichnis und alle unterverzeichnisse an.

Der erste Befehl ruft den Sicherheitsdeskriptor der File0.txt Datei im aktuellen Verzeichnis ab und verwendet den Zuordnungsoperator (=) zum Speichern in der $NewACL Variablen.

Der erste Befehl in der Pipeline verwendet das Cmdlet Get-ChildItem, um alle Textdateien im C:\Temp Verzeichnis abzurufen. Der Parameter Recurse erweitert den Befehl auf alle Unterverzeichnisse von C:\temp. Der Parameter Include beschränkt die dateien, die mit der .txt Dateinamenerweiterung abgerufen wurden. Der Force-Parameter ruft versteckte Dateien ab, die andernfalls ausgeschlossen würden. (Sie können nicht verwenden c:\temp\*.txt, da der Recurse-Parameter in Verzeichnissen funktioniert, nicht auf Dateien.)

Der Pipelineoperator (|) sendet die Objekte, die die abgerufenen Dateien an das Set-Acl Cmdlet darstellen, wodurch der Sicherheitsdeskriptor im AclObject-Parameter auf alle Dateien in der Pipeline angewendet wird.

In der Praxis empfiehlt es sich, den WhatIf-Parameter mit allen Set-Acl Befehlen zu verwenden, die sich auf mehrere Elemente auswirken können. In diesem Fall wäre Set-Acl -AclObject $NewAcl -WhatIfder zweite Befehl in der Pipeline . Dieser Befehl listet die Dateien auf, die von dem Befehl betroffen wären. Nach der Überprüfung des Ergebnisses können Sie den Befehl erneut ohne den WhatIf-Parameter ausführen.

Beispiel 4: Vererbung deaktivieren und geerbte 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

Diese Befehle deaktivieren die Zugriffsvererbung aus übergeordneten Ordnern, während die vorhandenen geerbten Zugriffsregeln beibehalten werden.

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

Als Nächstes werden Variablen erstellt, um die geerbten Zugriffsregeln in explizite Zugriffsregeln zu konvertieren. Um die Zugriffsregeln zu schützen, die dieser Vererbung zugeordnet sind, legen Sie die $isProtected Variable auf $true. Legen Sie zum Zulassen der Vererbung $isProtected auf $false. Weitere Informationen finden Sie unter Festlegen des Zugriffsregelschutzes.

Legen Sie die $preserveInheritance Variable fest, um $true geerbte Zugriffsregeln beizubehalten oder $false geerbte Zugriffsregeln zu entfernen. Anschließend wird der Zugriffsregelschutz mithilfe der SetAccessRuleProtection() -Methode aktualisiert.

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

Beispiel 5: Vollzugriff auf administratoren der Datei erteilen

$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 vollständige Kontrolle über die Dog.txt-Datei.

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

Nächste Variablen werden erstellt, um der GRUPPE BUILTIN\Administrators die vollständige Kontrolle über die Dog.txt Datei zu erteilen. Die $identity Variable wird auf den Namen eines Benutzerkontos festgelegt. Die $fileSystemRights Variable auf FullControl festgelegt und kann eine der FileSystemRights-Werte sein, die den Typ des Vorgangs angibt, der der Zugriffsregel zugeordnet ist. Die $type Variable, die auf "Allow" festgelegt ist, gibt an, ob der Vorgang zugelassen oder verweigert werden soll. Die $fileSystemAccessRuleArgumentList Variable ist eine Argumentliste, die beim Erstellen des neuen FileSystemAccessRule-Objekts übergeben werden soll. Anschließend wird ein neues FileSystemAccessRule-Objekt erstellt, und das FileSystemAccessRule-Objekt wird an die SetAccessRule()-Methode übergeben, fügt die neue Zugriffsregel hinzu.

Der letzte Befehl verwendet Set-Acl , um den Sicherheitsdeskriptor von auf Dog.txt anzuwenden. Wenn der Befehl abgeschlossen ist, hat die GRUPPE "BUILTIN\Administrators " die vollständige Kontrolle über die Dog.txt.

Parameter

-AclObject

Gibt eine ACL mit den gewünschten Eigenschaftswerten an. Set-Acl ändert die ACL des Elements, das vom Parameter Path oder InputObject angegeben wird, um den Werten im angegebenen Sicherheitsobjekt zu entsprechen.

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

Type:Object
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-ClearCentralAccessPolicy

Entfernt die zentrale Zugriffsrichtlinie aus dem angegebenen Element.

Ab Windows Server 2012 können Administratoren Active Directory und Gruppenrichtlinie verwenden, um zentrale Zugriffsrichtlinien für Benutzer und Gruppen festzulegen. Weitere Informationen finden Sie unter dynamische Zugriffssteuerung: Szenarioübersicht.

Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Confirm

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

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required: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 *.txt. B. . Platzhalter sind zulässig.

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Filter

Gibt einen Filter im Format oder in der Sprache des Anbieters an. Der Wert dieses Parameters qualifiziert den Path-Parameter. Die Syntax des Filters einschließlich der Verwendung von Platzhaltern ist vom Anbieter abhängig. Filter sind effizienter als andere Parameter, da der Anbieter sie beim Abrufen der Objekte anwendet, anstatt powerShell nach dem Abrufen der Objekte zu filtern.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Include

Ändert nur die angegebenen Elemente. Der Wert dieses Parameters qualifiziert den Path-Parameter. Geben Sie ein Pfadelement oder -muster ein, z *.txt. B. . Platzhalter sind zulässig.

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-InputObject

Ändert die Sicherheitsbeschreibung für das angegebene Objekt. Geben Sie eine Variable ein, die das Objekt enthält, oder geben Sie einen Befehl ein, mit dem das Objekt abgerufen wird.

Sie können das Objekt nicht an die Änderung anpassen Set-Acl. Verwenden Sie stattdessen den InputObject-Parameter explizit im Befehl.

Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.

Type:PSObject
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-LiteralPath

Ändert die Sicherheitsbeschreibung für das angegebene Element. Im Gegensatz zu Path wird der Wert des LiteralPath-Parameters genauso verwendet, wie er eingegeben wurde. Es werden keine Zeichen als Platzhalter interpretiert. Wenn der Pfad Escapezeichen enthält, schließen Sie sie in einfache Anführungszeichen (') ein. Einzelne Anführungszeichen weisen PowerShell an, keine Zeichen als Escapesequenzen zu interpretieren.

Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.

Type:String[]
Aliases:PSPath
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Passthru

Gibt ein Objekt zurück, das die geänderte Sicherheitsbeschreibung darstellt. Standardmäßig wird von diesem Cmdlet keine Ausgabe generiert.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

Ändert die Sicherheitsbeschreibung für das angegebene Element. 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 (entweder mithilfe der AclObject- oder SecurityDescriptor-Parameter oder durch Übergeben eines Sicherheitsobjekts Set-Acl von Get-Acl zu Set-Acl) übergeben, und Sie lassen den Pfad (Name und Wert) Set-Acl aus, verwendet den Pfad, der im Sicherheitsobjekt enthalten ist.

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-WhatIf

Zeigt, was geschieht, wenn das Cmdlet ausgeführt wird. Das Cmdlet wird nicht ausgeführt.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Eingaben

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

Sie können ein ACL-Objekt oder einen Sicherheitsdeskriptor an Set-Acl.

Ausgaben

FileSecurity

Standardmäßig Set-Acl wird keine Ausgabe generiert. Allerdings wird bei Verwendung des Passthru-Parameters ein Sicherheitsobjekt generiert. Der Typ des Sicherheitsobjekts hängt vom Typ des Elements ab.

Hinweise

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

Das Set-Acl Cmdlet wird vom PowerShell-Dateisystem und registrierungsanbietern unterstützt. Sie können es verwenden, um die Sicherheitsbeschreibungen von Dateien, Verzeichnissen und Registrierungsschlüsseln zu ändern.