Set-Acl
Ändert die Sicherheitsbeschreibung eines angegebenen Elements, z. B. eine Datei oder einen Registrierungsschlüssel.
Syntax
ByPath (Standard)
Set-Acl
[-Path] <String[]>
[-AclObject] <Object>
[-ClearCentralAccessPolicy]
[-PassThru]
[-Filter <String>]
[-Include <String[]>]
[-Exclude <String[]>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
ByInputObject
Set-Acl
[-InputObject] <PSObject>
[-AclObject] <Object>
[-PassThru]
[-Filter <String>]
[-Include <String[]>]
[-Exclude <String[]>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
ByLiteralPath
Set-Acl
[-AclObject] <Object>
-LiteralPath <String[]>
[-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 den Sicherheitsdeskriptor eines angegebenen Elements, z. B. einer Datei oder eines Registrierungsschlüssels, um die Werte in einem von Ihnen bereitgestellten Sicherheitsdeskriptor abzugleichen.
Verwenden Sie zum Verwenden Set-Aclden Parameter "Path " oder " InputObject ", um das Element zu identifizieren, dessen Sicherheitsdeskriptor Sie ändern möchten. Verwenden Sie dann die Parameter "AclObject" oder "SecurityDescriptor ", 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 er den Werten im AclObject-Parameter entspricht.
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 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 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, mit der Ausnahme, 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 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 (=) 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 Parameter Force ruft ausgeblendete Dateien ab, die andernfalls ausgeschlossen werden. (Sie können nicht verwenden C:\temp\*.txt, da der Recurse-Parameter in Verzeichnissen und nicht in Dateien funktioniert.)
Der Pipelineoperator (|) sendet die Objekte, die die abgerufenen Dateien an das Set-Acl Cmdlet darstellen, wodurch der Sicherheitsdeskriptor im Parameter "AclObject " 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 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 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. Legen Sie $isProtected die Variable auf " fest, um $truedie zugriffsregeln zu schützen, die dieser Vorvererbung zugeordnet sind. Um die Vererbung zuzulassen, legen Sie den Satzes $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 auf Dog.txt. Wenn der Befehl abgeschlossen ist, werden die ACLs der Dog.txt vom Ordner "Haustiere" geerbten AcLs direkt Dog.txtangewendet, und neue Zugriffsrichtlinien, die Zu Haustiere hinzugefügt wurden, ändern nicht den Zugriff auf Dog.txt.
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
Dieser Befehl gewährt der Gruppe BUILTIN\Administrators die 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 gewähren. Die $identity Variable wird auf den Namen eines Benutzerkontos festgelegt. Die $fileSystemRights Variable wird auf FullControl festgelegt und kann eine der FileSystemRights-Werte sein, die den Typ des Vorgangs angibt, der der Zugriffsregel zugeordnet ist. Die $type Variable wird auf "Allow" festgelegt, um anzugeben, 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 verwendetSet-Acl, um den Sicherheitsdeskriptor von auf .Dog.txt Nach Abschluss des Befehls hat die Gruppe BUILTIN\Administratoren 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 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 einen Get-Acl Befehl eingeben.
Parametereigenschaften
| Typ: | Object |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
(All)
| Position: | 1 |
| Obligatorisch.: | True |
| Wert aus Pipeline: | True |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | 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 Dynamic Access Control: Scenario Overview.
Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.
Parametereigenschaften
| Typ: | SwitchParameter |
| Standardwert: | False |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
| Aliase: | PSPath, EP |
Parametersätze
ByPath
| Position: | Named |
| Obligatorisch.: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
ByLiteralPath
| Position: | Named |
| Obligatorisch.: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
-Confirm
Fordert Sie zur Bestätigung auf, bevor Sie das Cmdlet ausführen.
Parametereigenschaften
| Typ: | SwitchParameter |
| Standardwert: | False |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
| Aliase: | Cf |
Parametersätze
(All)
| Position: | Named |
| Obligatorisch.: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | 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. Wildcards sind zulässig.
Parametereigenschaften
| Typ: | String[] |
| Standardwert: | None |
| Unterstützt Platzhalter: | True |
| Nicht anzeigen: | False |
Parametersätze
(All)
| Position: | Named |
| Obligatorisch.: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
-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.
Parametereigenschaften
| Typ: | String |
| Standardwert: | None |
| Unterstützt Platzhalter: | True |
| Nicht anzeigen: | False |
Parametersätze
(All)
| Position: | Named |
| Obligatorisch.: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
-Include
Ändert nur die angegebenen Elemente. Der Wert dieses Parameters qualifiziert den parameter Path.
Geben Sie ein Pfadelement oder Muster ein, z. B. *.txt. Wildcards sind zulässig.
Parametereigenschaften
| Typ: | String[] |
| Standardwert: | None |
| Unterstützt Platzhalter: | True |
| Nicht anzeigen: | False |
Parametersätze
(All)
| Position: | Named |
| Obligatorisch.: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
-InputObject
Ändert die Sicherheitsbeschreibung des angegebenen Objekts. Geben Sie eine Variable ein, die das Objekt enthält, oder einen Befehl, der das Objekt abruft.
Das Objekt kann nicht weitergeleitet werden, in das geändert Set-Aclwerden soll. Verwenden Sie stattdessen den InputObject-Parameter explizit im Befehl.
Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.
Parametereigenschaften
| Typ: | PSObject |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
ByInputObject
| Position: | 0 |
| Obligatorisch.: | True |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | True |
| Wert aus verbleibenden Argumenten: | 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 signalisieren PowerShell, dass keine Zeichen als Escapesequenzen interpretiert werden sollen.
Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.
Parametereigenschaften
| Typ: | String[] |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
| Aliase: | PSPath |
Parametersätze
ByLiteralPath
| Position: | Named |
| Obligatorisch.: | True |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | True |
| Wert aus verbleibenden Argumenten: | False |
-PassThru
Gibt ein Objekt zurück, das den geänderten Sicherheitsdeskriptor darstellt. Standardmäßig generiert dieses Cmdlet keine Ausgabe.
Parametereigenschaften
| Typ: | SwitchParameter |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
(All)
| Position: | Named |
| Obligatorisch.: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | 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. Wildcards sind zulässig.
Wenn Sie ein Sicherheitsobjekt Set-Acl an (entweder mithilfe der Parameter "AclObject" oder " SecurityDescriptor " oder durch Übergeben eines Sicherheitsobjekts von Get-Acl an Set-Acl) übergeben und den Path-Parameter (Name und Wert) weglassen, Set-Acl wird der Pfad verwendet, der im Sicherheitsobjekt enthalten ist.
Parametereigenschaften
| Typ: | String[] |
| Standardwert: | None |
| Unterstützt Platzhalter: | True |
| Nicht anzeigen: | False |
Parametersätze
ByPath
| Position: | 0 |
| Obligatorisch.: | True |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | True |
| Wert aus verbleibenden Argumenten: | False |
-WhatIf
Zeigt, was passiert, wenn das Cmdlet ausgeführt wird. Das Cmdlet wird nicht ausgeführt.
Parametereigenschaften
| Typ: | SwitchParameter |
| Standardwert: | False |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
| Aliase: | Wi |
Parametersätze
(All)
| Position: | Named |
| Obligatorisch.: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
CommonParameters
Dieses Cmdlet unterstützt die allgemeinen Parameter -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction und -WarningVariable. Weitere Informationen findest du unter about_CommonParameters.
Eingaben
ObjectSecurity
Sie können ein ACL-Objekt an dieses Cmdlet weiterleiten.
CommonSecurityDescriptor
Sie können einen Sicherheitsdeskriptor an dieses Cmdlet weiterleiten.
Ausgaben
None
Standardmäßig gibt dieses Cmdlet keine Ausgabe zurück.
FileSecurity
Wenn Sie den PassThru-Parameter 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 Set-Acl Cmdlet wird von den PowerShell FileSystem- und Registrierungsanbietern unterstützt. So können Sie sie verwenden, um die Sicherheitsbeschreibungen von Dateien, Verzeichnissen und Registrierungsschlüsseln zu ändern.