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
我怎样才能去掉从结果BUILTIN
和NT 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'
是使用|
匹配或者或者的正则表达式文本匹配。
这很完美,谢谢!我想我必须停止输出所有的输出,并且实际写出真正的代码,以根据需要使其正常工作。 – Tensigh