我运行以下脚本来获取文件权限的基本审核:
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
如何从结果中删除BUILTIN
和NT AUTHORITY\SYSTEM
?一旦数据存储在文本文件中,我就可以在Excel中解析它,但是如果我可以先将PS删除它,那么它将使报告更有效率。
答案 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'
是正则表达式文本匹配,使用|
来匹配/或。