Change le descripteur de sécurité d’un élément spécifié, tel qu’un fichier ou une clé de registre.
Syntaxe
Set-Acl <String> <Object> >] >]
Set-Acl <PSObject> <Object> >] >]
Set-Acl -LiteralPath <String> <Object> >] >]
Description
La cmdlet Set-Acl
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é. Ensuite, utilisez les paramètres AclObject ou SecurityDescriptor pour fournir un descripteur de sécurité qui a les valeurs que vous voulez appliquer. Set-Acl
applique le descripteur de sécurité qui est fourni. Il utilise la valeur du paramètre AclObject comme modèle et modifie les valeurs du descripteur de sécurité de l’élément pour correspondre aux valeurs du paramètre AclObject.
Exemples
Exemple 1 : Copier un descripteur de sécurité d’un fichier à 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. Lorsque les commandes se terminent, les descripteurs de sécurité des fichiers Dog.txtet Cat.txt sont identiques.
La première commande utilise le cmdlet Get-Acl
pour obtenir le 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 changer les valeurs de l’ACL de Cat.txt en valeurs dans$DogACL
.
La valeur du paramètre Path est le chemin d’accès au fichier Cat.txt. La valeur du paramètre AclObjectparameter est l’ACL du modèle, dans ce cas, l’ACL de Dog.txt telle qu’elle est enregistrée dans la variable $DogACL
.
Exemple 2 : Utiliser l’opérateur pipeline pour transmettre un descripteur
Get-Acl -Path "C:\Dog.txt" | Set-Acl -Path "C:\Cat.txt"
Cette commande est presque la même que la commande de l’exemple précédent, sauf qu’elle utilise l’opérateur apipeline (|
) pour envoyer le descripteur de sécurité d’une commande Get-Acl
à une commande Set-Acl
.
La première commande utilise la cmdlet Get-Acl
pour obtenir le descripteur de sécurité du fichier Dog.txt. L’opérateurpipeline (|
) passe un objet qui représente le descripteur de sécurité de Dog.txt à la cmdletSet-Acl
.
La deuxième commande utilise Set-Acl
pour appliquer le descripteur de sécurité de Dog.txt à Cat.txt.Lorsque la commande se termine, les ACL des fichiers Dog.txt et Cat.txt sont identiques.
Exemple 3 : Appliquer un descripteur de sécurité à plusieurs fichiers
$NewAcl = Get-Acl File0.txtGet-ChildItem -Path "C:\temp" -Recurse -Include "*.txt" -Force | Set-Acl -AclObject $NewAcl
Ces commandes appliquent les descripteurs de sécurité du fichier File0.txt à tous les fichiers texte du répertoire C:\Temp
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 variable $NewACL
.
La première commande du pipeline utilise le cmdlet Get-ChildItem pour obtenir tous les fichiers texte du répertoireC:\Temp
. Le paramètre Recurse étend la commande à tous les sous-répertoires deC:\temp
. Le paramètre Include limite les fichiers récupérés à ceux dont l’extension de nom de fichier est .txt
. Le paramètre Force récupère les fichiers cachés, qui seraient autrement exclus. (Vous ne pouvez pas utiliser c:\temp\*.txt
, car le paramètre Recurse fonctionne sur les répertoires, pas sur les fichiers.)
L’opérateur de pipeline (|
) envoie les objets représentant les fichiers récupérés à la cmdlet Set-Acl
, qui applique le descripteur de sécurité dans le paramètre AclObject à tous les fichiers dans le pipeline.
En pratique, il est préférable d’utiliser le paramètre WhatIf avec toutes les commandes Set-Acl
qui peuvent affecter plus d’un élément. Dans ce cas, la deuxième commande du pipeline seraitSet-Acl -AclObject $NewAcl -WhatIf
. Cette commande liste les fichiers qui seraient affectés par la commande. Après avoir examiné le résultat, vous pouvez exécuter à nouveau la commande sans le paramètre WhatIf.
Exemple 4 : Désactiver l’héritage et préserver 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 sont désactiveront l’héritage d’accès à partir des dossiers parents, tout en préservant les règles d’accès héritées existantes.
La première commande utilise le cmdlet Get-Acl
pour obtenir le descripteur de sécurité du fichier Dog.txt.
Puis, des 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 à ce contre l’héritage, définissez la variable $isProtected
à$true
.Pour autoriser l’héritage, définissez $isProtected
à $false
. Pour plus d’informations, voir Définir la protection des règles d’accès.La variable $preserveInheritance
définie à $true
pour préserver 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éthodeSetAccessRuleProtection().
La dernière commande utilise Set-Acl
pour appliquer le descripteur de sécurité de à Dog.txt. Lorsque la commande se termine, les ACL du Dog.txt qui ont été héritées du dossier Pets seront appliquées directement à Dog.txt, et les nouvelles politiques d’accès ajoutées à Pets ne modifieront pas l’accès à Dog.txt.
Exemple 5 : Accorder aux administrateurs le 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 le cmdlet Get-Acl
pour obtenir le descripteur de sécurité du fichier Dog.txt.
Les variables suivantes sont créées pour accorder au groupe BUILTIN\Administrateurs le contrôle total du fichier Dog.txt. La variable $identity
définie sur le nom d’un compte utilisateur. La variable $fileSystemRights
définie sur FullControl, et peut être l’une des valeurs deFileSystemRights qui spécifie le type d’opération associé à la règle d’accès. La variable $type
définie sur « Allow » pour indiquer s’il faut autoriser ou refuser l’opération. La variable $fileSystemAccessRuleArgumentList
est une liste d’arguments à passer lors de la création du nouvel objet FileSystemAccessRule. Ensuite, un nouvel objetFileSystemAccessRule est créé, et l’objet FileSystemAccessRule est passé à la méthodeSetAccessRule(), 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. Lorsque la commande se termine, le groupe BUILTIN\Administrators aura le contrôle total de Dog.txt.
Paramètres
Spécifie une ACL avec les valeurs de propriété souhaitées. Set-Acl
modifie l’ACL 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 commande Get-Acl
dans une variable et ensuite utiliser le paramètre AclObject pour passer la variable, ou taper une commande Get-Acl
.
Type: | Objet |
Position: | 1 |
Valeur par défaut: | None |
Acceptation de l’entrée pipeline : | True |
Acceptent les caractères génériques : | False |
Supprime la politique d’accès centrale de l’élément spécifié.
À partir de Windows Server 2012, les administrateurs peuvent utiliser Active Directory et la stratégie de groupe pour définir des politiques d’accès centrales pour les utilisateurs et les groupes. Pour plus d’informations, voirContrôle d’accès dynamique : Aperçu du scénario.
Ce paramètre a été introduit dans Windows PowerShell 3.0.
Type: | SwitchParameter |
Position: | Named |
Valeur par défaut: | False |
Accepter l’entrée du pipeline : | False |
Accepter les caractères génériques : | False |
Vous invite à confirmer avant d’exécuter la cmdlet.
Type: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Valeur par défaut : | False |
Acceptation de l’entrée du pipeline: | False |
Acceptation des caractères génériques : | False |
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, tel que *.txt
. Les caractères génériques sont autorisés.
Type: | Chaîne |
Position: | Nommé |
Valeur par défaut: | None |
Accepter l’entrée du pipeline : | False |
Accepter les caractères génériques: | True |
Spécifie un filtre dans le format ou la langue du fournisseur. La valeur de ce paramètre qualifie le paramètrePath. La syntaxe du filtre, y compris l’utilisation de caractères génériques, dépend du fournisseur. Les filtres sont plus efficaces que les autres paramètres, car le fournisseur les applique lors de la récupération des objets, plutôt que de demander à PowerShell de filtrer les objets après leur récupération.
Type: | String |
Position: | Nommé |
Valeur par défaut: | None |
Accepter l’entrée du pipeline : | False |
Acceptation des caractères génériques : | True |
Change uniquement les éléments spécifiés. La valeur de ce paramètre qualifie le paramètre Path.Saisissez un élément ou un motif de chemin, tel que *.txt
. Les caractères génériques sont autorisés.
Type: | Chaîne |
Position: | Nommé |
Valeur par défaut: | None |
Accepter l’entrée du pipeline : | False |
Acceptation des caractères génériques : | True |
Change le descripteur de sécurité de l’objet spécifié. Entrez une variable qui contient l’objetou une commande qui obtient l’objet.
Vous ne pouvez pas canaliser l’objet à modifier vers Set-Acl
. Au lieu de cela, utilisez le paramètre InputObject de manière explicite dans la commande.
Ce paramètre a été introduit dans Windows PowerShell 3.0.
Type: | PSObject |
Position: | 0 |
Valeur par défaut: | None |
Accepter l’entrée du pipeline : | True |
Acceptation des caractères génériques: | False |
Change le descripteur de sécurité de l’élément spécifié. Contrairement à Path, la valeur du paramètreLiteralPath est utilisée exactement comme elle est tapée. Aucun caractère n’est interprété commewildcards. Si le chemin comprend des caractères d’échappement, mettez-le entre guillemets simples ('
).Les guillemets simples indiquent à PowerShell de n’interpréter aucun caractère comme une séquence d’échappement.
Ce paramètre a été introduit dans Windows PowerShell 3.0.
Type: | Chaîne |
Alias: | PSPath |
Position : | Nommée |
Valeur par défaut: | None |
Acceptation des entrées du pipeline : | True |
Accepter les caractères génériques : | False |
Retourne un objet qui représente le descripteur de sécurité qui a été modifié. Par défaut, ce cmdletdoes ne génère aucune sortie.
Type: | SwitchParameter |
Position: | Named |
Valeur par défaut: | None |
Acceptation de l’entrée du pipeline : | False |
Acceptation des caractères génériques: | False |
Change le descripteur de sécurité de l’élément spécifié. Entrez le chemin d’accès à un élément, tel qu’un chemin vers un fichier ou une clé de registre. Les caractères génériques sont autorisés.
Si vous passez un objet de sécurité à Set-Acl
(soit en utilisant les paramètres AclObject ouSecurityDescriptor, soit en passant un objet de sécurité de Get-Acl à Set-Acl
), et que vous omettez le paramètre Path (nom et valeur), Set-Acl
utilise le chemin qui est inclus dans cet objet de sécurité.
Type: | Chaîne |
Position: | 0 |
Valeur par défaut: | None |
Acceptation de l’entrée pipeline : | True |
Acceptation des caractères génériques: | True |
Montre ce qui se passerait si la cmdlet s’exécute. La cmdlet n’est pas exécutée.
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Valeur par défaut : | False |
Acceptation de l’entrée pipeline: | False |
Acceptation des caractères génériques: | False |
Entrées
Système.Security.AccessControl.ObjectSecurity, System.Security.AccessControl.CommonSecurityDescriptor
Vous pouvez canaliser un objet ACL ou un descripteur de sécurité vers Set-Acl
.
Outputs
FileSecurity
Par défaut, Set-Acl
ne génère aucune sortie. Cependant, si vous utilisez le paramètre Passthru,il 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 cmdlet n’est disponible que sur les plateformes Windows.
La cmdlet Set-Acl
est prise en charge par le système de fichiers et les fournisseurs de registre PowerShell. À ce titre, vous pouvez l’utiliser pour modifier les descripteurs de sécurité des fichiers, des répertoires et des clés de registre.
- Get-Acl
- FileSystemAccessRule
- ObjectSecurity.SetAccessRuleProtection
- FileSystemRights
.