Powershell Get ACL | Select Access的意外输出 Get ACL | Select Access的意外输出

Powershell Get ACL | Select Access的意外输出 Get ACL | Select Access的意外输出,powershell,acl,Powershell,Acl,如果我没有选择访问属性,则内容将按我的要求显示。e、 g.内置\管理员允许完全控制 但是如果我选择Access属性,则会显示某种类型的对象类型(System.Security.AccessControl.FileSystemAccessRule): PS C:\tmp> Get-Acl .\test | Format-List Path : Microsoft.PowerShell.Core\FileSystem::C:\tmp\test Owner : EXAMPLE\sjob

如果我没有
选择
访问
属性,则内容将按我的要求显示。e、 g.
内置\管理员允许完全控制

但是如果我
选择
Access
属性,则会显示某种类型的对象类型(
System.Security.AccessControl.FileSystemAccessRule
):

PS C:\tmp> Get-Acl .\test | Format-List


Path   : Microsoft.PowerShell.Core\FileSystem::C:\tmp\test
Owner  : EXAMPLE\sjobs
Group  : EXAMPLE\Domain Users
Access : BUILTIN\Administrators Allow  FullControl
         BUILTIN\Administrators Allow  268435456
         NT AUTHORITY\SYSTEM Allow  FullControl
         NT AUTHORITY\SYSTEM Allow  268435456
         BUILTIN\Users Allow  ReadAndExecute, Synchronize
         NT AUTHORITY\Authenticated Users Allow  Modify, Synchronize
         NT AUTHORITY\Authenticated Users Allow  -536805376
Audit  :
Sddl   : REDACTED



PS C:\tmp> Get-Acl .\test | Select Access | Format-List


Access : {System.Security.AccessControl.FileSystemAccessRule, System.Security.AccessControl.FileSystemAccessRule,
     System.Security.AccessControl.FileSystemAccessRule, System.Security.AccessControl.FileSystemAccessRule...}

我对bash比对PowerShell更熟悉。但我知道PowerShell倾向于传递对象而不是字符串

为什么这两种访问方式的显示方式不同?


更重要的是,如何根据需要仅显示
Access
属性?

如果查看对象类型,它会提供一些线索

PS C:\Users\jacob> $acl = get-acl

PS C:\Users\jacob> $acl.GetType()

IsPublic IsSerial Name                                     BaseType                                                                                              
-------- -------- ----                                     --------                                                                                              
True     False    DirectorySecurity                        System.Security.AccessControl.FileSystemSecurity                                                      

PS C:\Users\jacob> ($acl | select access).getType()

IsPublic IsSerial Name                                     BaseType                                                                                              
-------- -------- ----                                     --------                                                                                              
True     False    PSCustomObject                           System.Object  
使用
PSCustomObject
可以使用
.psobject.Properties.value
符号访问属性值

因此,如果我们隔离acesss对象
$access=$acl |选择access
,然后访问属性值,我们将获得所需的信息

PS C:\Users\jacob> $access.PSObject.Properties.Value


FileSystemRights  : FullControl
AccessControlType : Allow
IdentityReference : NT AUTHORITY\SYSTEM
IsInherited       : False
InheritanceFlags  : ContainerInherit, ObjectInherit
PropagationFlags  : None

FileSystemRights  : FullControl
AccessControlType : Allow
IdentityReference : BUILTIN\Administrators
IsInherited       : False
InheritanceFlags  : ContainerInherit, ObjectInherit
PropagationFlags  : None

FileSystemRights  : FullControl
AccessControlType : Allow
IdentityReference : SURFACE\jacob
IsInherited       : False
InheritanceFlags  : ContainerInherit, ObjectInherit
PropagationFlags  : None
一行:

get-acl .\test | select access | % { $_.PSObject.Properties.Value }
或者我们可以把它缩小到

get-acl .\test | select access | % { $_.Access }
或者最后:

(get-acl .\test | select access).access

如果查看对象类型,它会提供一些线索

PS C:\Users\jacob> $acl = get-acl

PS C:\Users\jacob> $acl.GetType()

IsPublic IsSerial Name                                     BaseType                                                                                              
-------- -------- ----                                     --------                                                                                              
True     False    DirectorySecurity                        System.Security.AccessControl.FileSystemSecurity                                                      

PS C:\Users\jacob> ($acl | select access).getType()

IsPublic IsSerial Name                                     BaseType                                                                                              
-------- -------- ----                                     --------                                                                                              
True     False    PSCustomObject                           System.Object  
使用
PSCustomObject
可以使用
.psobject.Properties.value
符号访问属性值

因此,如果我们隔离acesss对象
$access=$acl |选择access
,然后访问属性值,我们将获得所需的信息

PS C:\Users\jacob> $access.PSObject.Properties.Value


FileSystemRights  : FullControl
AccessControlType : Allow
IdentityReference : NT AUTHORITY\SYSTEM
IsInherited       : False
InheritanceFlags  : ContainerInherit, ObjectInherit
PropagationFlags  : None

FileSystemRights  : FullControl
AccessControlType : Allow
IdentityReference : BUILTIN\Administrators
IsInherited       : False
InheritanceFlags  : ContainerInherit, ObjectInherit
PropagationFlags  : None

FileSystemRights  : FullControl
AccessControlType : Allow
IdentityReference : SURFACE\jacob
IsInherited       : False
InheritanceFlags  : ContainerInherit, ObjectInherit
PropagationFlags  : None
一行:

get-acl .\test | select access | % { $_.PSObject.Properties.Value }
或者我们可以把它缩小到

get-acl .\test | select access | % { $_.Access }
或者最后:

(get-acl .\test | select access).access