【发布时间】:2014-08-28 19:45:51
【问题描述】:
这真的是 PowerShell 101,我意识到,但我被卡住了。
我正在尝试遍历文件夹树,获取每个子文件夹名称和文件数。没有问题。
新的要求是获取每个子文件夹的 ACL。所有这些数据都需要作为 CSV 文件输出,其中一行包含每个文件夹名称、文件计数和 CSV 一个字段中单个字符串中的 ACL(我打算用分号分隔它们)。
如果可以在 Excel 中查看数据,我愿意导出为 XML。
我遇到困难的部分是将 ACL 信息放入 CSV 的单个字符串中。
每个目录上的Get-ACL 显示数据如下(我正在做Select 只是为了获取IdentityReference 和FileSystemRights,这是我们感兴趣的全部内容):
IdentityReference FileSystemRights
----------------- ----------------
BUILTIN\Users ReadAndExecute, Synchronize
BUILTIN\Users AppendData
BUILTIN\Users CreateFiles
我希望输出文件格式为每个子目录一行,类似于
#filecount,folder,perms
51,C:\temp,BUILTIN\Users:ReadAndExecute,Synchronize;BUILTIN\Users:AppendData...
但是,我无法让任何类型的join 以这种方式呈现它。我不关心使用什么分隔符组合(同样,必须在 Excel 中可读)。
脚本如下。输出文件的数据行附加在它遍历的每个目录中。我确信这不是很有效,但我也不希望进程消耗所有服务器内存。我无法弄清楚的位以###开头。
(Get-ChildItem C:\temp -recurse | Where-Object {$_.PSIsContainer -eq $True}) | foreach {
$a = ($_.GetFiles().Count)
$f = $_.FullName
$p = (get-acl $_.FullName).Access | select-object identityreference,filesystemrights
### do something with $p?
Out-File -FilePath c:\outfile.csv -Append -InputObject $a`,$f`,###$p?
}
【问题讨论】:
标签: string powershell csv