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 den Sicherheitsdeskriptor eines angegebenen Elements, z. B. einer Datei oder eines Registrierungsschlüssels, an die Werte in einem von Ihnen angegebenen Sicherheitsdeskriptor.
Um zu verwenden Set-Acl
, verwenden Sie den Path - oder InputObject-Parameter , 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 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 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 Zuweisungsoperator (=
) speichert den Sicherheitsdeskriptor im Wert der variablen $DogACL.
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 Datei „Cat.txt“. 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 entspricht fast 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 darstellt, an das Set-Acl
Cmdlet.
Der zweite Befehl verwendet Set-Acl
, um die Sicherheitsbeschreibung 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 Sicherheitsbeschreibungen in der datei File0.txt auf alle Textdateien im C:\Temp
Verzeichnis und alle zugehörigen Unterverzeichnisse an.
Der erste Befehl ruft den Sicherheitsdeskriptor der File0.txt-Datei im aktuellen Verzeichnis ab und verwendet den Zuweisungsoperator (=
), um ihn in der $NewACL
Variablen zu speichern.
Der erste Befehl in der Pipeline verwendet das Cmdlet Get-ChildItem, um alle Textdateien im C:\Temp
Verzeichnis abzurufen. Der Recurse-Parameter erweitert den Befehl auf alle Unterverzeichnisse von C:\temp
. Der Include-Parameter beschränkt die abgerufenen Dateien auf dateien mit der .txt
Dateinamenerweiterung. 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 und nicht in Dateien funktioniert.)
Der Pipelineoperator (|
) sendet die Objekte, die die abgerufenen Dateien darstellen, an das Set-Acl
Cmdlet, das den Sicherheitsdeskriptor im AclObject-Parameter auf alle Dateien in der Pipeline anwendet.
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 -WhatIf
der zweite Befehl in der Pipeline . Dieser Befehl listet die Dateien auf, die von dem Befehl betroffen wären. Nach dem Überprüfen des Ergebnisses können Sie den Befehl ohne den WhatIf-Parameter erneut ausführen.
Beispiel 4: Deaktivieren der Vererbung und Beibehalten geerbter 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
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 diesem zugeordneten Zugriffsregeln vor Vererbung zu schützen, legen Sie die $isProtected
Variable auf fest $true
. Legen Sie zum Zulassen der Vererbung auf fest $isProtected
$false
. Weitere Informationen finden Sie unter Festlegen des Zugriffsregelschutzes.
Legen Sie die $preserveInheritance
Variable auf fest $true
, um 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 die Sicherheitsbeschreibung 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 die neuen Zugriffsrichtlinien, die Zu Haustieren hinzugefügt wurden, ändern den Zugriff auf Dog.txt nicht.
Beispiel 5: Gewähren von Vollzugriff auf die Datei durch Administratoren
$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 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.
Als Nächstes werden Variablen erstellt, um der Gruppe BUILTIN\Administrators volle Kontrolle über die Dog.txt-Datei zu gewähren. Die $identity
Variable, die auf den Namen eines Benutzerkontos festgelegt ist. Die $fileSystemRights
Auf FullControl festgelegte Variable kann einer der FileSystemRights-Werte sein, der den Typ des Vorgangs angibt, der der Zugriffsregel zugeordnet ist. Die $type
auf "Allow" festgelegte Variable 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 und fügt die neue Zugriffsregel hinzu.
Der letzte Befehl verwendet Set-Acl
, um die Sicherheitsbeschreibung von auf Dog.txt anzuwenden. Nach Abschluss des Befehls 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 durch den Path - oder InputObject-Parameter angegebene ACL des 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 AclObject-Parameter verwenden, um die Variable zu übergeben, oder einen Get-Acl
Befehl eingeben.
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 Access Control: Übersicht über das Szenario.
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 Path-Element 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 die Objekte nach dem Abrufen von PowerShell filtern zu lassen.
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 Path-Element 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 zu ändernde Objekt nicht an übergeben 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 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.
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 an Set-Acl
übergeben (entweder mithilfe der Parameter AclObject oder SecurityDescriptor oder durch Übergeben eines Sicherheitsobjekts von Get-Acl an Set-Acl
) und den Path-Parameter (Name und Wert) weglassen, Set-Acl
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
Sie können ein ACL-Objekt an dieses Cmdlet übergeben.
Sie können einen Sicherheitsdeskriptor an dieses Cmdlet übergeben.
Ausgaben
None
Standardmäßig gibt dieses Cmdlet keine Ausgabe zurück.
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-Dateisystem- und Registrierungsanbietern unterstützt. Sie können es verwenden, um die Sicherheitsbeschreibungen von Dateien, Verzeichnissen und Registrierungsschlüsseln zu ändern.