Set-Acl

Change le descripteur de sécurité de l'élément spécifié, par exemple un fichier ou une clé de Registre.

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>]

Description

L’applet Set-Acl de commande modifie le descripteur de sécurité d’un élément spécifié, tel qu’un fichier ou une clé de Registre, pour correspondre aux valeurs d’un descripteur de sécurité que vous fournissez.

Pour utiliser Set-Acl, utilisez le paramètre Path ou InputObject pour identifier l’élément dont vous souhaitez modifier le descripteur de sécurité. Utilisez ensuite les paramètres AclObject ou SecurityDescriptor pour fournir un descripteur de sécurité contenant les valeurs à appliquer. Set-Acl applique le descripteur de sécurité fourni. Cette applet de commande utilise la valeur du paramètre AclObject comme modèle, puis change les valeurs du descripteur de sécurité de l'élément pour qu'elles correspondent aux valeurs du paramètre AclObject.

Exemples

Exemple 1 : Copier un descripteur de sécurité d’un fichier vers un autre

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

Ces commandes copient les valeurs du descripteur de sécurité du fichier Dog.txt vers le descripteur de sécurité du fichier Cat.txt. À la fin de l'exécution des commandes, les descripteurs de sécurité des fichiers Dog.txt et Cat.txt sont identiques.

La première commande utilise l’applet de commande pour obtenir le Get-Acl descripteur de sécurité du fichier Dog.txt. L’opérateur d’affectation (=) stocke le descripteur de sécurité dans la valeur de la variable $DogACL.

La deuxième commande utilise Set-Acl pour modifier les valeurs dans la liste de contrôle d’accès de Cat.txt en valeurs dans $DogACL.

La valeur du paramètre Path correspond au chemin d'accès du fichier Cat.txt. La valeur du paramètre AclObject est l’ACL de modèle, dans ce cas, la liste de contrôle d’accès de Dog.txt comme enregistrée dans la $DogACL variable.

Exemple 2 : Utiliser l’opérateur de pipeline pour passer un descripteur

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

Cette commande est presque identique à la commande de l’exemple précédent, sauf qu’elle utilise un opérateur de pipeline (|) pour envoyer le descripteur de sécurité d’une commande à une Get-AclSet-Acl commande.

La première commande utilise l’applet de commande pour obtenir le Get-Acl descripteur de sécurité du fichier Dog.txt. L’opérateur de pipeline (|) transmet un objet qui représente le descripteur de sécurité Dog.txt à l’applet Set-Acl de commande.

La deuxième commande utilise Set-Acl pour appliquer le descripteur de sécurité de Dog.txt à Cat.txt. À la fin de l'exécution de la commande, les listes ACL des fichiers Dog.txt et Cat.txt sont identiques.

Exemple 3 : Appliquer un descripteur de sécurité à plusieurs fichiers

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

Ces commandes appliquent les descripteurs de sécurité dans le fichier File0.txt à tous les fichiers texte du C:\Temp répertoire et à tous ses sous-répertoires.

La première commande obtient le descripteur de sécurité du fichier File0.txt dans le répertoire actuel et utilise l’opérateur d’affectation (=) pour le stocker dans la $NewACL variable.

La première commande du pipeline utilise l’applet de commande Get-ChildItem pour obtenir tous les fichiers texte du C:\Temp répertoire. Le paramètre Récurse étend la commande à toutes les sous-répertoires de C:\temp. Le paramètre Include limite les fichiers récupérés à ceux avec l’extension de nom de .txt fichier. Le paramètre Force obtient les fichiers cachés, qui seraient sinon exclus. (Vous ne pouvez pas utiliser c:\temp\*.txt, car le paramètre Recurse fonctionne sur les répertoires, et non sur les fichiers.)

L’opérateur de pipeline (|) envoie les objets représentant les fichiers récupérés à l’applet Set-Acl de commande, qui applique le descripteur de sécurité dans le paramètre AclObject à tous les fichiers du pipeline.

Dans la pratique, il est préférable d’utiliser le paramètre WhatIf avec toutes les Set-Acl commandes pouvant affecter plusieurs éléments. Dans ce cas, la deuxième commande dans le pipeline serait Set-Acl -AclObject $NewAcl -WhatIf. Cette commande répertorie les fichiers affectés par la commande. Après avoir examiné le résultat, vous pouvez réexécuter la commande sans le paramètre WhatIf .

Exemple 4 : Désactiver l’héritage et conserver les règles d’accès héritées

$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

Ces commandes désactivent l’héritage d’accès à partir de dossiers parents, tout en conservant les règles d’accès héritées existantes.

La première commande utilise l’applet de commande pour obtenir le Get-Acl descripteur de sécurité du fichier Dog.txt.

Ensuite, les variables sont créées pour convertir les règles d’accès héritées en règles d’accès explicites. Pour protéger les règles d’accès associées à cet héritage, définissez la $isProtected variable sur $true.pour autoriser l’héritage, définie sur $isProtected$false. Pour plus d’informations, consultez définir la protection des règles d’accès. Variable $preserveInheritance définie pour $true conserver les règles d’accès héritées ; false pour supprimer les règles d’accès héritées. Ensuite, la protection des règles d’accès est mise à jour à l’aide de la méthode SetAccessRuleProtection().

La dernière commande utilise Set-Acl pour appliquer le descripteur de sécurité de Dog.txt. Une fois la commande terminée, les listes de contrôle d’accès des Dog.txt héritées du dossier Animaux de compagnie sont appliquées directement à Dog.txt, et les nouvelles stratégies d’accès ajoutées aux animaux ne modifient pas l’accès à Dog.txt.

Exemple 5 : Accorder aux administrateurs un contrôle total du fichier

$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

Cette commande accordera au groupe BUILTIN\Administrateurs le contrôle total du fichier Dog.txt.

La première commande utilise l’applet de commande pour obtenir le Get-Acl descripteur de sécurité du fichier Dog.txt.

Les variables suivantes sont créées pour accorder au groupe BUILTIN\Administrateurs un contrôle total du fichier Dog.txt. Variable $identity définie sur le nom d’un compte d’utilisateur. La $fileSystemRights variable définie sur FullControl et peut être une des valeurs FileSystemRights qui spécifie le type d’opération associé à la règle d’accès. La $type variable définie sur « Autoriser » spécifie s’il faut autoriser ou refuser l’opération. La $fileSystemAccessRuleArgumentList variable est une liste d’arguments à transmettre lors de la création de l’objet FileSystemAccessRule . Ensuite, un nouvel objet FileSystemAccessRule est créé et l’objet FileSystemAccessRule est passé à la méthode SetAccessRule(), ajoute la nouvelle règle d’accès.

La dernière commande utilise Set-Acl pour appliquer le descripteur de sécurité de Dog.txt. Une fois la commande terminée, le groupe BUILDIN\Administrateurs aura le contrôle total de l'Dog.txt.

Paramètres

-AclObject

Spécifie une liste de contrôle d'accès (ACL, Access-Control List) avec les valeurs de propriété souhaitées. Set-Acl modifie la liste de contrôle d’accès de l’élément spécifié par le paramètre Path ou InputObject pour correspondre aux valeurs de l’objet de sécurité spécifié.

Vous pouvez enregistrer la sortie d’une Get-Acl commande dans une variable, puis utiliser le paramètre AclObject pour transmettre la variable ou taper une Get-Acl commande.

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

-ClearCentralAccessPolicy

Supprime la stratégie d'accès centralisée de l'élément spécifié.

À compter de Windows Server 2012, les administrateurs peuvent utiliser Active Directory et stratégie de groupe pour définir des stratégies d’accès centralisées pour les utilisateurs et les groupes. Pour plus d’informations, consultez Contrôle d'accès dynamique : Vue d’ensemble du scénario.

Ce paramètre a été introduit dans Windows PowerShell 3.0.

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

-Confirm

Vous demande une confirmation avant d’exécuter l’applet de commande.

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

-Exclude

Omet les éléments spécifiés. La valeur de ce paramètre qualifie le paramètre Path. Entrez un élément ou un modèle de chemin d’accès, par exemple *.txt. Les caractères génériques sont autorisés.

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

-Filter

Spécifie un filtre dans le format ou le langage du fournisseur. La valeur de ce paramètre qualifie le paramètre Path. La syntaxe du filtre, notamment l'utilisation de caractères génériques, dépend du fournisseur. Les filtres sont plus efficaces que d’autres paramètres, car le fournisseur les applique lors de la récupération des objets, plutôt que d’avoir PowerShell filtrer les objets une fois qu’ils sont récupérés.

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

-Include

Modifie uniquement les éléments spécifiés. La valeur de ce paramètre qualifie le paramètre Path. Entrez un élément ou un modèle de chemin d’accès, par exemple *.txt. Les caractères génériques sont autorisés.

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

-InputObject

Change le descripteur de sécurité de l'objet spécifié. Entrez une variable qui contient l'objet ou tapez une commande permettant d'obtenir cet objet.

Vous ne pouvez pas faire passer l’objet à Set-Acl. Utilisez plutôt le paramètre InputObject explicitement dans la commande.

Ce paramètre a été introduit dans Windows PowerShell 3.0.

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

-LiteralPath

Change le descripteur de sécurité de l'élément spécifié. Contrairement au paramètre Path, la valeur du paramètre LiteralPath est utilisée exactement telle qu'elle est tapée. Aucun caractère n’est interprété en tant que caractère générique. Si le chemin inclut des caractères d’échappement, placez-le entre guillemets simples ('). Les guillemets simples indiquent à PowerShell de ne pas interpréter les caractères comme séquences d’échappement.

Ce paramètre a été introduit dans Windows PowerShell 3.0.

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

-Passthru

Retourne un objet qui représente le descripteur de sécurité modifié. Par défaut, cette applet de commande ne génère aucun résultat.

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

-Path

Change le descripteur de sécurité de l'élément spécifié. Entrez le chemin d'accès d'un élément, par exemple le chemin d'accès d'un fichier ou d'une clé de Registre. Les caractères génériques sont autorisés.

Si vous transmettez un objet Set-Acl de sécurité (à l’aide des paramètres AclObject ou SecurityDescriptor ou en transmettant un objet de sécurité de Get-Acl à Set-Acl), et que vous omettez le paramètre Path (nom et valeur), Set-Acl utilisez le chemin d’accès inclus dans l’objet de sécurité.

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

-WhatIf

Montre ce qui se passe en cas d’exécution de l’applet de commande. L’applet de commande n’est pas exécutée.

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

Entrées

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

Vous pouvez diriger un objet ACL ou un descripteur de sécurité vers Set-Acl.

Sorties

FileSecurity

Par défaut, Set-Acl ne génère aucune sortie. Toutefois, si vous utilisez le paramètre Passthru, elle génère un objet de sécurité. Le type de l'objet de sécurité dépend du type de l'élément.

Notes

Cette applet de commande est disponible uniquement sur les plateformes Windows.

L’applet Set-Acl de commande est prise en charge par le système de fichiers PowerShell et les fournisseurs de registre. Ainsi, vous pouvez l'utiliser pour changer les descripteurs de sécurité des fichiers, des répertoires et des clés de Registre.