Set-Acl
Ändert die Sicherheitsbeschreibung eines angegebenen Elements, 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 cmdlet Set-Acl
ändert den Sicherheitsdeskriptor eines angegebenen Elements, z. B. einer Datei oder eines Registrierungsschlüssels, um die Werte in einem von Ihnen bereitgestellten Sicherheitsdeskriptor abzugleichen.
Um Set-Acl
zu verwenden, verwenden Sie den Path oder InputObject Parameter, um das Element zu identifizieren, dessen Sicherheitsdeskriptor Sie ändern möchten. Verwenden Sie dann die AclObject oder SecurityDescriptor Parameter, um einen Sicherheitsdeskriptor mit den werten zu liefern, die Sie anwenden möchten.
Set-Acl
wendet den bereitgestellten Sicherheitsdeskriptor an. Er verwendet den Wert des AclObject--Parameters als Modell und ändert die Werte im Sicherheitsdeskriptor des Elements so, dass sie den Werten im AclObject--Parameter entsprechen.
Beispiele
Beispiel 1: Kopieren einer Sicherheitsbeschreibung aus 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 dem Sicherheitsdeskriptor der Dog.txt
Datei in den Sicherheitsdeskriptor der Cat.txt Datei. Nach Abschluss der Befehle sind die Sicherheitsdeskriptoren der Dog.txt
und Cat.txt Dateien identisch.
Der erste Befehl verwendet das Cmdlet Get-Acl
, 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
zu ändern.
Der Wert des Path Parameters ist der Pfad zur Cat.txt Datei. Der Wert des AclObject-Parameters ist die 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 ist fast identisch mit 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 Cmdlet Get-Acl
, um den Sicherheitsdeskriptor der Dog.txt
-Datei abzurufen.
Der Pipelineoperator (|
) übergibt ein Objekt, das den Dog.txt
Sicherheitsdeskriptor an das Cmdlet Set-Acl
darstellt.
Der zweite Befehl verwendet Set-Acl
, um die Sicherheitsbeschreibung von Dog.txt
auf Cat.txtanzuwenden.
Nach Abschluss des Befehls sind die ACLs der Dog.txt
und Cat.txt Dateien identisch.
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 File0.txt Datei 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 (=
), um sie in der $NewACL
Variablen zu speichern.
Der erste Befehl in der Pipeline verwendet das Cmdlet Get-ChildItem, um alle Textdateien im verzeichnis C:\Temp
abzurufen. Der parameter Recurse erweitert den Befehl auf alle Unterverzeichnisse von C:\temp
. Die Include Parameter beschränkt die dateien, die mit der Dateinamenerweiterung .txt
abgerufen wurden. Der parameter "Force" ruft ausgeblendete Dateien ab, die andernfalls ausgeschlossen werden. (Sie können c:\temp\*.txt
nicht verwenden, da der Recurse Parameter in Verzeichnissen und nicht in Dateien funktioniert.)
Der Pipelineoperator (|
) sendet die Objekte, die die abgerufenen Dateien an das Cmdlet Set-Acl
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 der zweite Befehl in der Pipeline Set-Acl -AclObject $NewAcl -WhatIf
. Dieser Befehl listet die Dateien auf, die vom Befehl betroffen wären. Nach der Überprüfung des Ergebnisses können Sie den Befehl erneut ohne den WhatIf Parameter ausführen.
Beispiel 4: Deaktivieren der Vererbung und Beibehalten von geerbten Zugriffsregeln
$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 weiterhin die vorhandenen geerbten Zugriffsregeln beibehalten werden.
Der erste Befehl verwendet das Cmdlet Get-Acl
, um den Sicherheitsdeskriptor der Dog.txt
-Datei abzurufen.
Als Nächstes werden Variablen erstellt, um die geerbten Zugriffsregeln in explizite Zugriffsregeln zu konvertieren. Legen Sie die $isProtected
Variable auf $true
fest, um die dieser zugehörigen Zugriffsregeln vor der Vererbung zu schützen. Um die Vererbung zuzulassen, legen Sie $isProtected
auf $false
fest. Weitere Informationen finden Sie unter Festlegen des Zugriffsregelschutzes.
Legen Sie die $preserveInheritance
Variable auf $true
fest, um geerbte Zugriffsregeln beizubehalten, oder $false
, um geerbte Zugriffsregeln zu entfernen. Anschließend wird der Zugriffsregelschutz mithilfe der SetAccessRuleProtection()-Methode aktualisiert.
Der letzte Befehl verwendet Set-Acl
, um die Sicherheitsbeschreibung von auf Dog.txt
anzuwenden. Nach Abschluss des Befehls 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 die Datei durch Administratoren 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
$newParams = @{
TypeName = 'System.Security.AccessControl.FileSystemAccessRule'
ArgumentList = $fileSystemAccessRuleArgumentList
}
$fileSystemAccessRule = New-Object @newParams
# Apply new rule
$NewAcl.SetAccessRule($fileSystemAccessRule)
Set-Acl -Path "C:\Pets\Dog.txt" -AclObject $NewAcl
Mit diesem Befehl wird der BUILTIN\Administrators Gruppe "Vollzugriff" der Dog.txt
Datei gewährt.
Der erste Befehl verwendet das Cmdlet Get-Acl
, um den Sicherheitsdeskriptor der Dog.txt
-Datei abzurufen.
Nächste Variablen werden erstellt, um die BUILTIN\Administrators Gruppen vollzugriff auf die Dog.txt
Datei zu gewähren. Die $identity
Variable wird auf den Namen eines Benutzerkontosfestgelegt. Die $fileSystemRights
Variable, die auf FullControl festgelegt ist, und kann eine der FileSystemRights- Werte sein, die den Typ des Vorgangs angibt, der der Zugriffsregel zugeordnet ist. Die $type
Variable, die auf "Zulassen" festgelegt ist, gibt an, ob der Vorgang zugelassen oder verweigert werden soll. Die $fileSystemAccessRuleArgumentList
Variable ist eine Argumentliste, die übergeben werden soll, wenn das neue FileSystemAccessRule-Objekt erstellt wird. 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 die Sicherheitsbeschreibung von auf Dog.txt
anzuwenden. Nach Abschluss des Befehls haben die BUILTIN\Administrators Gruppe 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 durch den Path oder InputObject Parameter 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 Get-Acl
Befehl ein.
Typ: | Object |
Position: | 1 |
Standardwert: | None |
Erforderlich: | True |
Pipelineeingabe akzeptieren: | True |
Platzhalterzeichen akzeptieren: | False |
-ClearCentralAccessPolicy
Entfernt die zentrale Zugriffsrichtlinie aus dem angegebenen Element.
Ab Windows Server 2012 können Administratoren Active Directory und Gruppenrichtlinien 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.
Typ: | SwitchParameter |
Aliase: | PSPath, LP |
Position: | Named |
Standardwert: | False |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Confirm
Fordert Sie vor dem Ausführen des Cmdlets zur Bestätigung auf.
Typ: | SwitchParameter |
Aliase: | cf |
Position: | Named |
Standardwert: | False |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Exclude
Lässt die angegebenen Elemente aus. Der Wert dieses Parameters qualifiziert den parameter Path. Geben Sie ein Pfadelement oder Muster ein, z. B. *.txt
. Platzhalter sind zulässig.
Typ: | String[] |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | True |
-Filter
Gibt einen Filter im Format oder in der Sprache des Anbieters an. Der Wert dieses Parameters qualifiziert den parameter Path. Die Syntax des Filters, einschließlich der Verwendung von Wildcards, hängt vom Anbieter ab. Filter sind effizienter als andere Parameter, da der Anbieter sie beim Abrufen der Objekte anwendet, anstatt powerShell nach dem Abrufen der Objekte zu filtern.
Typ: | String |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | True |
-Include
Ändert nur die angegebenen Elemente. Der Wert dieses Parameters qualifiziert den parameter Path.
Geben Sie ein Pfadelement oder Muster ein, z. B. *.txt
. Platzhalter sind zulässig.
Typ: | String[] |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | True |
-InputObject
Ändert die Sicherheitsbeschreibung des angegebenen Objekts. Geben Sie eine Variable ein, die das Objekt enthält, oder einen Befehl, der das Objekt abruft.
Sie können das Objekt nicht an Set-Acl
ändern. Verwenden Sie stattdessen den parameter InputObject explizit im Befehl.
Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.
Typ: | PSObject |
Position: | 0 |
Standardwert: | None |
Erforderlich: | True |
Pipelineeingabe akzeptieren: | True |
Platzhalterzeichen akzeptieren: | False |
-LiteralPath
Ändert die Sicherheitsbeschreibung des angegebenen Elements. Im Gegensatz zu Path wird der Wert des LiteralPath-Parameters genau so verwendet, wie er eingegeben wurde. Es werden keine Zeichen als Wildcards interpretiert. Wenn der Pfad Escapezeichen enthält, schließen Sie ihn in einfache Anführungszeichen ('
) ein.
Einfache Anführungszeichen weisen PowerShell an, keine Zeichen als Escapesequenzen zu interpretieren.
Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.
Typ: | String[] |
Aliase: | PSPath |
Position: | Named |
Standardwert: | None |
Erforderlich: | True |
Pipelineeingabe akzeptieren: | True |
Platzhalterzeichen akzeptieren: | False |
-PassThru
Gibt ein Objekt zurück, das den geänderten Sicherheitsdeskriptor darstellt. Standardmäßig generiert dieses Cmdlet keine Ausgabe.
Typ: | SwitchParameter |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Path
Ändert die Sicherheitsbeschreibung 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 mithilfe des AclObject- oder SecurityDescriptor Parameter oder durch Übergeben eines Sicherheitsobjekts von Get-Acl
an Set-Acl
), und Sie geben den Path Parameter (Name und Wert) weg), Set-Acl
verwendet den Pfad, der im Sicherheitsobjekt enthalten ist.
Typ: | String[] |
Position: | 0 |
Standardwert: | None |
Erforderlich: | True |
Pipelineeingabe akzeptieren: | True |
Platzhalterzeichen akzeptieren: | True |
-WhatIf
Zeigt, was passiert, wenn das Cmdlet ausgeführt wird. Das Cmdlet wird nicht ausgeführt.
Typ: | SwitchParameter |
Aliase: | wi |
Position: | Named |
Standardwert: | False |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
Eingaben
Sie können ein ACL-Objekt an dieses Cmdlet weiterleiten.
Sie können einen Sicherheitsdeskriptor an dieses Cmdlet weiterleiten.
Ausgaben
None
Standardmäßig gibt dieses Cmdlet keine Ausgabe zurück.
Wenn Sie den parameter PassThru verwenden, gibt dieses Cmdlet ein Sicherheitsobjekt zurück. 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 registrierungsanbieter unterstützt. So können Sie sie verwenden, um die Sicherheitsbeschreibungen von Dateien, Verzeichnissen und Registrierungsschlüsseln zu ändern.