将结果从get-acl导出到.csv

时间:2013-05-17 22:28:31

标签: powershell-v2.0

我正在尝试使用以下powershell脚本将结果输出到.csv中。创建.csv文件,但没有数据,我做错了什么?

$rootfolder = Get-ChildItem -recurse -Path [PATH] | where {$_.Attributes -eq 'Directory'} 
foreach ($userdir in $rootfolder) { 
$userdir.FullName 
get-acl $userdir.FullName | foreach {write-host "The owner is : " $_.Owner -Foregroundcolor Green } | export-csv c:\powershell\test.csv
Write-Host "`n" 
} 

1 个答案:

答案 0 :(得分:0)

您无法以您尝试的方式在管道中进一步发送foreach的输出;您需要单独导出每个项目。修改过的脚本(请注意,我还修改了where-object以测试PSIsContainer返回的每个项目的gci属性:

$rootfolder = Get-ChildItem -recurse -Path [path] | where {$_.PSIsContainer} 
foreach ($userdir in $rootfolder) { 
get-acl -path $userdir.FullName | export-csv c:\powershell\test.csv -NoTypeInformation -Append
}

但是,我认为你会对结果感到失望。 get-acl生成一组对象,而不是基本字符串的集合。例如,如果我在个人资料目录中运行get-acl,我会得到:

PS C:\Users\ME> get-acl .|select-object access|fl *


Access : {System.Security.AccessControl.FileSystemAccessRule, System.Security.AccessControl.FileSystemAccessRule,
         System.Security.AccessControl.FileSystemAccessRule}

运行上面的脚本,我在CSV的Access列中看到的只有System.Security.AccessControl.AuthorizationRuleCollection - 因为这就是所产生的,一个集合。要获取完整 ACL,您需要执行其他处理以提取该集合的每个元素。重复其他也返回集合的字段。