Set-Acl
更改指定项(如文件或注册表项)的安全描述符。
语法
Set-Acl
[-Path] <String[]>
[-AclObject] <Object>
[[-CentralAccessPolicy] <String>]
[-ClearCentralAccessPolicy]
[-Passthru]
[-Filter <String>]
[-Include <String[]>]
[-Exclude <String[]>]
[-WhatIf]
[-Confirm]
[-UseTransaction]
[<CommonParameters>]
Set-Acl
[-InputObject] <PSObject>
[-AclObject] <Object>
[-Passthru]
[-Filter <String>]
[-Include <String[]>]
[-Exclude <String[]>]
[-WhatIf]
[-Confirm]
[-UseTransaction]
[<CommonParameters>]
Set-Acl
-LiteralPath <String[]>
[-AclObject] <Object>
[[-CentralAccessPolicy] <String>]
[-ClearCentralAccessPolicy]
[-Passthru]
[-Filter <String>]
[-Include <String[]>]
[-Exclude <String[]>]
[-WhatIf]
[-Confirm]
[-UseTransaction]
[<CommonParameters>]
说明
Set-Acl
cmdlet 更改指定项(如文件或注册表项)的安全描述符,以匹配你提供的安全描述符中的值。
若要使用 Set-Acl
,请使用 Path 或 InputObject 参数来标识要更改其安全描述符的项。
然后,使用 AclObject 或 SecurityDescriptor 参数来提供具有要应用的值的安全描述符。
Set-Acl
应用提供的安全描述符。
它使用 AclObject 参数的值作为模型,并更改项的安全描述符中的值以匹配 AclObject 参数中的值。
示例
示例 1:将安全描述符从一个文件复制到另一个文件
$DogACL = Get-Acl -Path "C:\Dog.txt"
Set-Acl -Path "C:\Cat.txt" -AclObject $DogACL
这些命令将 Dog.txt 文件的安全描述符中的值复制到 Cat.txt 文件的安全描述符。 命令完成后,Dog.txt 和 Cat.txt 文件的安全描述符是相同的。
第一个命令使用 Get-Acl cmdlet 来获取 Dog.txt 文件的安全描述符。 赋值运算符 (=) 将安全描述符存储在$DogACL变量的值中。
第二个命令使用 Set-Acl
将 ACL 中 Cat.txt 的值更改为$DogACL中的值。
Path 参数的值是 Cat.txt 文件的路径。 AclObject 参数的值是模型 ACL,在本例中,Dog.txt 的 ACL 保存在$DogACL变量中。
示例 2:使用管道运算符传递描述符
Get-Acl -Path "C:\Dog.txt" | Set-Acl -Path "C:\Cat.txt"
此命令与上一示例中的命令几乎相同,只不过它使用管道运算符将安全描述符从 Get-Aclcommand 发送到 Set-Acl
命令。
第一个命令使用 Get-Acl cmdlet 来获取 Dog.txt 文件的安全描述符。
管道运算符 (|) 将表示 Dog.txt 安全描述符的对象传递给 Set-Acl
cmdlet。
第二个命令使用 Set-Acl
将 Dog.txt 的安全描述符应用于 Cat.txt。
命令完成后,Dog.txt 和 Cat.txt 文件的 ACL 相同。
示例 3:将安全描述符应用于多个文件
$NewAcl = Get-Acl File0.txt
Get-ChildItem -Path "C:\temp" -Recurse -Include "*.txt" -Force | Set-Acl -AclObject $NewAcl
这些命令将 File0.txt 文件中的安全描述符应用于 C:\Temp 目录及其所有子目录中的所有文本文件。
第一个命令获取当前目录中 File0.txt 文件的安全描述符,并使用赋值运算符(=)将其存储在$NewACL变量中。
管道中的第一个命令使用 Get-ChildItem cmdlet 获取 C:\Temp 目录中的所有文本文件。 Recurse 参数将命令扩展到 C:\temp 的所有子目录。Include 参数将检索到的文件限制为文件扩展名为“.txt”的文件。 Force 参数将获取隐藏文件,否则将排除这些文件。 (不能使用“c:\temp*.txt”,因为 Recurse 参数适用于目录,不适用于文件。
管道运算符 (|) 将表示检索的文件的对象发送到 Set-Acl
cmdlet,该 cmdlet 将 AclObject 参数中的安全描述符应用于管道中的所有文件。
在实践中,最好将 WhatIf 参数与可能影响多个项的所有 Set-Acl
命令一起使用。
在这种情况下,管道中的第二个命令将为“Set-Acl -AclObject $NewAcl -WhatIf
”。
此命令列出受该命令影响的文件。
查看结果后,无需 WhatIf 参数即可再次运行该命令。
参数
-AclObject
指定具有所需属性值的 ACL。
Set-Acl
更改由 Path 或 InputObject 参数指定的项的 ACL,以匹配指定安全对象中的值。
可以在变量中保存 Get-Acl 命令的输出,然后使用 AclObject 参数传递变量,或键入 Get-Acl 命令。
类型: | Object |
Position: | 1 |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
-CentralAccessPolicy
建立或更改项目的中央访问策略。 在计算机上输入中央访问策略的 CAP ID 或友好名称。
从 Windows Server 2012 开始,管理员可以使用 Active Directory 和组策略为用户和组设置中央访问策略。 有关详细信息,请参阅 动态访问控制:方案概述。
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | String |
Position: | 2 |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-ClearCentralAccessPolicy
从指定项中删除中央访问策略。
从 Windows Server 2012 开始,管理员可以使用 Active Directory 和组策略为用户和组设置中央访问策略。 有关详细信息,请参阅 动态访问控制:方案概述。
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
Position: | Named |
默认值: | False |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Confirm
在运行 cmdlet 之前,提示你进行确认。
类型: | SwitchParameter |
别名: | cf |
Position: | Named |
默认值: | False |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Exclude
省略指定的项。 此参数的值限定 Path 参数。 输入路径元素或模式,例如“*.txt”。 允许通配符。
类型: | String[] |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | True |
-Filter
以提供程序的格式或语言指定筛选器。 此参数的值限定 Path 参数。 筛选器的语法(包括通配符的使用)取决于提供程序。 筛选器比其他参数更有效,因为提供程序在检索对象时应用它们,而不是在检索对象后让 PowerShell 筛选对象。
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | True |
-Include
仅更改指定的项。 此参数的值限定 Path 参数。 输入路径元素或模式,例如“*.txt”。 允许通配符。
类型: | String[] |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | True |
-InputObject
更改指定对象的安全描述符。 输入包含对象或获取对象的命令的变量。
无法通过管道将对象更改为 Set-Acl。 而是在命令中显式使用 InputObject 参数。
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | PSObject |
Position: | 0 |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
-LiteralPath
更改指定项的安全描述符。 与 Path不同,LiteralPath 参数的值与键入时完全相同。 不会将任何字符解释为通配符。 如果路径包含转义字符,请将它括在单引号中。 单引号告知 PowerShell 不要将任何字符解释为转义序列。
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | String[] |
别名: | PSPath |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
-Passthru
返回一个对象,该对象表示已更改的安全描述符。 默认情况下,此 cmdlet 不生成任何输出。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Path
更改指定项的安全描述符。 输入项的路径,例如文件或注册表项的路径。 允许通配符。
如果将安全对象传递给 Set-Acl
(通过使用 AclObject 或 SecurityDescriptor 参数或将安全对象从 Get-Acl 传递到 Set-Acl
),并且省略了 Path 参数(名称和值),Set-Acl
使用安全对象中包含的路径。
类型: | String[] |
Position: | 0 |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | True |
-UseTransaction
在活动事务中包含该命令。 此参数仅在事务正在进行时有效。 有关详细信息,请参阅about_Transactions。
类型: | SwitchParameter |
别名: | usetx |
Position: | Named |
默认值: | False |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-WhatIf
显示 cmdlet 运行时会发生什么情况。 cmdlet 未运行。
类型: | SwitchParameter |
别名: | wi |
Position: | Named |
默认值: | False |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
输入
System.Security.AccessControl.ObjectSecurity, System.Security.AccessControl.CommonSecurityDescriptor
可以通过管道将 ACL 对象或安全描述符传递给 Set-Acl
。
输出
默认情况下,Set-Acl
不会生成任何输出。
但是,如果使用 Passthru 参数,则会生成安全对象。
安全对象的类型取决于项的类型。
备注
PowerShell 文件系统和注册表提供程序支持 Set-Acl
cmdlet。 因此,可以使用它更改文件、目录和注册表项的安全描述符。