PowerShell的 - 如何从删除系统帐户GET-ChildItem搜索

问题描述:

我运行下面的脚本来获取文件权限的基本审计:PowerShell的 - 如何从删除系统帐户GET-ChildItem搜索

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先删除它们,那么报告就会更有效率。

一般来说,不要通过输出格式化程序(Format-...)运行某些东西,并希望以后能够对它们进行有用的处理,它们真的是在屏幕上显示信息的最后一步 - 而且很容易截断田地,包裹它们,一般也不适合喂养其他项目。

Excel读取的CSV相当不错,所以我改变了这种分裂的ACL起来,先过滤内建和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'是使用|匹配或者或者的正则表达式文本匹配。

+1

这很完美,谢谢!我想我必须停止输出所有的输出,并且实际写出真正的代码,以根据需要使其正常工作。 – Tensigh