Powershell - 如何从Get-ChildItem搜索中删除系统帐户

时间:2016-09-14 02:40:17

标签: powershell powershell-v3.0

我运行以下脚本来获取文件权限的基本审核:

Get-ChildItem -Directory E:\*,E:\*\*,E:\*\*\* |
Get-acl|
format-list @{N="Path";E={convert-path $_.Path}},AccessToString

在结果中,我获得了系统帐户以及创建的帐户:

Path           : E:\Path\To\Files
AccessToString : BUILTIN\Administrators Allow  FullControl
                 NT AUTHORITY\SYSTEM Allow  FullControl
                 <Domain>\<Group1> Allow  FullControl
                 <Domain>\<Group2>  Allow  FullControl

如何从结果中删除BUILTINNT AUTHORITY\SYSTEM?一旦数据存储在文本文件中,我就可以在Excel中解析它,但是如果我可以先将PS删除它,那么它将使报告更有效率。

1 个答案:

答案 0 :(得分:2)

一般情况下,不要通过输出格式化程序(Format-...)运行,并期望能够在之后对它们做任何有用的事情,它们确实是显示信息的最后一步在屏幕上 - 并且容易截断字段,包裹它们,并且通常也不适合馈送到其他程序中。

Excel可以很好地读取CSV,因此我已将此更改为拆分ACL,首先过滤BUILTIN和NT AUTHORITY行,然后按ACL输出每个路径一次:

Get-ChildItem -Directory E:\*,E:\*\*,E:\*\*\* | Get-Acl | ForEach-Object { 

    $path = Convert-Path $_.Path;

    $AccessStrings = ($_.AccessToString -split "`n") | Where-Object { $_ -notmatch 'BUILTIN|NT AUTHORITY' }

    $AccessStrings | Select-Object @{Name='Path';Expression={$Path}},
                                   @{Name='AccessToString';Expression={$_}}

} | Export-Csv -Path out.csv -NoTypeInformation

输出格式应为:

Path,AccessToString
"e:\file1.txt","DOMAIN\group1 fullcontrol"
"e:\file1.txt","DOMAIN\group2 fullcontrol"

所以这些路径会多次出现,因为它似乎更符合Excel形状。

'BUILTIN|NT AUTHORITY'是正则表达式文本匹配,使用|来匹配/或。