【发布时间】:2014-03-06 18:44:48
【问题描述】:
我正在尝试使用Get-ACL 函数扫描目录中的子文件夹。我正在修改在这里找到的工作脚本,它将输出转换为.csv 文件。如果我能获得输出,这样每一行都包含 all 每个文件夹的 IdentityReference 值,那就太好了。然而,我的最佳尝试导致了这个错误:
方法调用失败,因为 [System.Security.Principal.NTAccount] 不包含名为“op_Addition”的方法。
代码如下:
$OutFile = "C:\Admin\Permissions.csv"
$Header = "FolderPath,IdentityReference,AccessControlType,IsInherited,InheritanceFlags,PropagationFlags"
Del $OutFile
Add-Content -Value $Header -Path $OutFile
$RootPath = "I:\Users\ES"
$Folders = GCI $RootPath\* | where {$_.psiscontainer -eq $true}
foreach ($Folder in $Folders){
$ACLs = get-acl $Folder.fullname | ForEach-Object { $_.Access }
Foreach ($ACL in $ACLs){
$OutIR = $ACL.IdentityReference
$OutIR += ","
}
$OutInfo = $Folder.Fullname + "," + $OutIR + "," + $ACL.AccessControlType + "," + $ACL.IsInherited + "," + $ACL.InheritanceFlags + "," + $ACL.PropagationFlags
Add-Content -Value $OutInfo -Path $OutFile
}
我尝试使用变量$OutIR 捕获所有IdentityReferences,然后将$OutIR 添加到最后的结果中。将列出每个文件夹并在同一行上显示所有IdentityReference。
已更新> 非常感谢您迄今为止的所有帮助!两种代码都有效(太棒了!),但我真的很想调整输出。顺便说一句,这是我第一次在这里寻求帮助,让真正的脚本编写者真正看到这个真是太棒了!
我在 Windows 2012 R2 机器上使用 Powershell 4.0。
我得到的输出示例是:
"I:\Users\ES\aalvarez","NT AUTHORITY\SYSTEM","Allow","False","ContainerInherit, ObjectInherit","None"
"I:\Users\ES\aalvarez","BUILTIN\Administrators","Allow","False","ContainerInherit, ObjectInherit","None"
"I:\Users\ES\aalvarez","XXX\aralvare","Allow","False","ContainerInherit, ObjectInherit","None"
我想要的输出是:
"I:\Users\ES\aalvarez","NT AUTHORITY\SYSTEM","BUILTIN\Administrators","XXX\aralvare","Allow","False","ContainerInherit, ObjectInherit","None"
我的想法是我可以将我的 1000 多个用户放在一个电子表格中,然后快速比较他们的文件夹 ACL。再次感谢!
【问题讨论】:
-
尝试将所有输出变量转换为字符串,即
$Folder.Fullname.ToString() -
你使用的是什么版本的 Powershell?
-
您能否提供一个示例,说明您希望输出的样子?
-
我包含了我的 Powershell 版本和所需输出的示例 - 谢谢!
-
类型、继承和标志在同一 ACL 的 ACE 中可能不同。
标签: powershell format acl export-to-csv