Get-Acl

获取某个资源(如文件或注册表项)的安全描述符。

语法

Get-Acl
   [[-Path] <String[]>]
   [-Audit]
   [-Filter <String>]
   [-Include <String[]>]
   [-Exclude <String[]>]
   [<CommonParameters>]
Get-Acl
   -InputObject <PSObject>
   [-Audit]
   [-Filter <String>]
   [-Include <String[]>]
   [-Exclude <String[]>]
   [<CommonParameters>]
Get-Acl
   [-LiteralPath <String[]>]
   [-Audit]
   [-Filter <String>]
   [-Include <String[]>]
   [-Exclude <String[]>]
   [<CommonParameters>]

说明

此 cmdlet 仅在 Windows 平台上可用。

Get-Acl cmdlet 可获取表示文件或资源的安全描述符的对象。 安全描述符包含资源的访问控制列表 (ACL)。 ACL 可指定用户和用户组访问资源所需的权限。

从 Windows PowerShell 3.0 开始,可以使用 Get-Acl 的 InputObject 参数来获取不具有路径的对象的安全描述符。

示例

示例 1 - 获取文件夹的 ACL

此示例获取 C:\Windows 目录的安全描述符。

Get-Acl C:\Windows

示例 2 - 使用通配符获取文件夹的 ACL

此示例将获取 C:\Windows 目录中所有名称以 s 开头的 .log 文件的 PowerShell 路径和 SDDL。

Get-Acl C:\Windows\s*.log | Format-List -Property PSPath, Sddl

该命令使用 Get-Acl cmdlet 获取表示每个日志文件的安全描述符的对象。 该命令使用管道运算符 (|) 将结果发送给 Format-List cmdlet。 该命令使用 Format-List 的 Property 参数以仅显示每个安全描述符对象的 PsPath 和 SDDL 属性

在 PowerShell 中将经常使用列表,因为较长的值在表中可能会被截断。

SDDL 值对系统管理员很有价值,因为它们是包含安全描述符中所有信息的简单文本字符串。 正因如此,它们易于传递和存储,并且可在需要时对它们进行分析。

示例 3 - 获取 ACL 的审核条目计数

此示例获取 C:\Windows 目录中名称以 s 开头的 .log 文件的安全描述符。

Get-Acl C:\Windows\s*.log -Audit | ForEach-Object { $_.Audit.Count }

它使用 Audit 参数从安全描述符中的 SACL 获取审核记录。 然后使用 ForEach-Object cmdlet 计算与每个文件关联的审核记录的数目。 结果是一个表示每个日志文件的审核记录数的数字列表。

示例 4 - 获取注册表项的 ACL

此示例使用 Get-Acl cmdlet 获取注册表的控制子项 (HKLM:\SYSTEM\CurrentControlSet\Control) 的安全描述符。

Get-Acl -Path HKLM:\System\CurrentControlSet\Control | Format-List

Path 参数指定 Control 子项。 管道运算符 (|) 将 Get-Acl 获取的安全描述符传递到 Format-List 命令,该命令将安全描述符的属性格式设置为列表,以便易于读取这些属性。

示例 5 - 使用 InputObject 获取 ACL****

此示例使用 Get-Acl 的 InputObject 参数来获取存储子系统对象的安全描述符。

Get-Acl -InputObject (Get-StorageSubSystem -Name S087)

参数

-Audit

从系统访问控制列表 (SACL) 获取安全描述符的审核数据。

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

-Exclude

忽略指定项。 此参数值使 Path 参数有效。 请输入路径元素或模式,例如 *.txt。 允许使用通配符。

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

-Filter

以提供程序的格式或语言指定筛选器。 此参数值使 Path 参数有效。 筛选器的语法(包括通配符的使用)取决于提供程序。 筛选器比其他参数更有效,因为提供程序是在获取对象时应用筛选器,而不是在检索对象后再由 PowerShell 筛选对象。

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

-Include

仅获取指定项。 此参数值使 Path 参数有效。 请输入路径元素或模式,例如 *.txt。 允许使用通配符。

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

-InputObject

获取指定对象的安全描述符。 请输入包含对象的变量或可获取该对象的命令。

不能通过管道将对象(而非路径)传递给 Get-Acl。 而应在命令中显式使用 InputObject 参数。

此参数是在 Windows PowerShell 3.0 中引入的。

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

-LiteralPath

指定资源的路径。 与 Path 不同,LiteralPath 参数的值严格按照所键入的形式使用。 不会将任何字符解释为通配符。 如果路径包括转义符,请将其括在单引号中。 单引号告知 PowerShell 不要将任何字符解释为转义序列。

此参数是在 Windows PowerShell 3.0 中引入的。

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

-Path

指定资源的路径。 Get-Acl 获取路径所指示的资源的安全描述符。 允许使用通配符。 如果省略 Path 参数,则 Get-Acl 将获取当前目录的安全描述符。

参数名(“Path”)为可选项。

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

输入

String

可以通过管道将包含路径的字符串传递给此 cmdlet。

输出

FileSecurity

DirectorySecurity

RegistrySecurity

此 cmdlet 返回一个表示它所获取的 ACL 的对象。 对象类型取决于 ACL 类型。

备注

此 cmdlet 仅在 Windows 平台上可用。

默认情况下,Get-Acl 显示资源的 PowerShell 路径 (<provider>::<resource-path>)、资源的所有者以及“Access”(资源的自由访问控制列表 (DACL) 中的访问控制项的列表或数组)。 DACL 列表由资源所有者控制。

将结果的格式设置为列表 (Get-Acl | Format-List) 后,除了路径、所有者和访问列表之外,PowerShell 还显示以下属性和属性值:

  • Group:所有者的安全组。
  • Audit:系统访问控制列表 (SACL) 中项的列表(数组)。 SACL 指定 Windows 为其生成审核记录的访问尝试的类型。
  • Sddl:在单个文本字符串中以安全描述符定义语言格式显示的资源的安全描述符。 PowerShell 使用安全描述符的 GetSddlForm 方法来获取此数据

由于文件系统和注册表提供程序支持 Get-Acl,因此可以使用 Get-Acl 来查看文件系统对象(如文件和目录)和注册表对象(如注册表项和条目)的 ACL。