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 参数再次运行该命令。





另请参阅

概念

Get-Acl