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