PowerShell中如何筛选Get-Acl | Format-List输出里含BUILTIN的行?
解决PowerShell中Get-Acl结合筛选字符串的问题
问题原因
Format-List输出的是PowerShell的格式化显示对象,并非纯文本流,因此Select-String(别名sls)无法直接识别其中的文本内容,导致你之前的命令没有返回结果。
两种可行解决方案
方案1:直接操作ACL对象属性(推荐)
直接提取Get-Acl返回对象的Access属性,筛选其中身份引用包含BUILTIN的访问控制条目(ACE):
(Get-Acl C:).Access | Where-Object { $_.IdentityReference -like "*BUILTIN*" }
如果需要和Format-List一致的格式化输出,可追加Format-List:
(Get-Acl C:).Access | Where-Object { $_.IdentityReference -like "*BUILTIN*" } | Format-List
这种方式直接操作对象属性,效率更高,也便于后续对筛选结果进行自动化处理。
方案2:转换为文本流后筛选
如果需要基于格式化后的显示文本进行筛选,需用Out-String -Stream将格式化输出转换为逐行文本流,再用Select-String匹配:
Get-Acl C: | Format-List | Out-String -Stream | Select-String "BUILTIN"
Out-String -Stream会将Format-List的输出拆分成独立的文本行,让Select-String能够正常匹配目标内容。
内容的提问来源于stack exchange,提问作者user1443098
相关产品推荐
相关产品推荐

