Set-Acl
更改指定资源(例如文件或注册表项)的安全描述符。
语法
Set-Acl [-Path] <string[]> [-AclObject] <ObjectSecurity> [-Exclude <string[]>] [-Filter <string>] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]
说明
Set-Acl cmdlet 更改指定资源(例如文件或注册表项)的安全描述符以便与您所提供的安全描述符中的值相匹配。
要使用 Set-Acl,请使用 Path 参数标识希望更改其安全描述符的资源,并使用 AclObject 参数提供一个包含您要应用的值的安全描述符。Set-Acl 使用 AclObject 参数的值作为模型,并更改资源安全描述符中的值,以便与 AclObject 参数中的值相匹配。
参数
-AclObject <ObjectSecurity>
指定具有所需属性值的 ACL。Set-Acl 将更改由 Path 参数所指定资源的 ACL,使其与指定的安全对象中的值相匹配。
可以将 Get-Acl 命令的输出保存为变量,然后使用 AclObject 参数传递该变量,或者键入 Get-Acl 命令。
是否为必需? |
true |
位置? |
2 |
默认值 |
|
是否接受管道输入? |
true (ByValue) |
是否接受通配符? |
false |
-Exclude <string[]>
忽略指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式,例如“*.txt”。允许使用通配符。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-Filter <string>
以提供程序的格式或语言指定筛选器。此参数的值对 Path 参数进行限定。筛选器的语法(包括通配符的使用)取决于提供程序。筛选器比其他参数更有效,因为提供程序是在检索对象时应用筛选器,而不是在检索对象后再由 Windows PowerShell 筛选对象。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-Include <string[]>
只更改指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式,例如“*.txt”。允许使用通配符。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-PassThru
返回表示安全描述符的对象。默认情况下,此 cmdlet 将不产生任何输出。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-Path <string[]>
标识要更改其安全描述符的资源。请输入资源的路径,例如指向文件或注册表项的路径。允许使用通配符。
如果向 Set-Acl 传递安全对象(通过使用 AclObject 参数或从 Get-Acl 向 Set-Acl 传递对象),并省略 Path 参数(名称和值),则 Set-Acl 将使用安全对象中所包括的路径。
是否为必需? |
true |
位置? |
1 |
默认值 |
|
是否接受管道输入? |
true (ByPropertyName) |
是否接受通配符? |
false |
-Confirm
在执行命令之前提示您进行确认。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-WhatIf
描述如果执行该命令会发生什么情况(无需实际执行该命令)。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-UseTransaction
将命令包含在活动事务中。仅当正在执行事务时,此参数才有效。有关详细信息,请参阅 about_Transactions。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
<CommonParameters>
此 cmdlet 支持通用参数:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息,请参阅 about_Commonparameters.
输入和输出
输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。
输入 |
System.Security.AccessControl.ObjectSecurity 可以通过管道将安全描述符传递给 Set-Acl。 |
输出 |
“无”或安全对象 默认情况下,Set-Acl 不生成任何输出。但是,如果使用 -Passthru 参数,则生成安全对象。安全对象的类型取决于资源的类型。 |
说明
Windows PowerShell 文件系统和注册表提供程序支持 Set-Acl cmdlet。同样,可使用该 cmdlet 更改文件、目录和注册表项的安全描述符。
在为一个参数指定多个值时,请使用逗号分隔这些值。例如,“<参数名> <值 1>, <值 2>”。
示例 1
C:\PS>$DogACL = get-acl c:\dog.txt
C:\PS>set-acl -path C:\cat.txt -AclObject $DogACL
说明
-----------
这些命令将 Dog.txt 文件的安全描述符中的值复制到 Cat.txt 文件的安全描述符。在完成这些命令之后,Dog.txt 和 Cat.txt 文件的安全描述符将完全相同。
第一个命令使用 Get-Acl cmdlet 来获取 Dog.txt 文件的安全描述符。赋值运算符 (=) 将把该安全描述符存储在 $DogACL 变量的值中。
第二个命令使用 Set-Acl 将 Cat.txt 的 ACL 中的值更改为 $DogACL 中的值。
Path 参数的值为指向 Cat.txt 文件的路径。AclObject 参数的值为模型 ACL,在此示例中,即为 $DogACL 变量中保存的 Dog.txt 的 ACL。
示例 2
C:\PS>get-acl c:\dog.txt | set-acl -path C:\cat.txt
说明
-----------
此命令与上一示例中的命令几乎相同,不同的是此命令使用管道运算符将在 Get-Acl 命令中检索到的安全描述符发送给 Set-Acl 命令。
第一个命令使用 Get-Acl cmdlet 来获取 Dog.txt 文件的安全描述符。管道运算符 (|) 将表示 Dog.txt 安全描述符的对象传递给 Set-Acl 命令。
第二个命令使用 Set-Acl 将 Dog.txt 的安全描述符应用到 Cat.txt 中。在完成该命令之后,Dog.txt 和 Cat.txt 文件的 ACL 将完全相同。
示例 3
C:\PS>$newACL = get-acl file0.txt
C:\PS>get-childitem 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 命令,该命令将 AclObject 参数中的安全描述符应用到管道中的所有文件。
实际上,最好将 Whatif 参数与可以影响多个资源的所有 Set-Acl 命令一起使用。在此示例中,管道中的第二个命令将为“set-acl -aclobject $newacl -whatif”。此命令列出将受该命令影响的文件。在检索结果之后,可以不带 Whatif 参数再次运行该命令。