2013-05-17 214 views
0

我想要获得以下PowerShell脚本以将结果输出到.csv中。 .csv文件已创建,但没有数据,我做错了什么?将get-acl的结果导出到.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" 
} 
+0

您正在尝试写入循环中的同一文件,而没有附加。这可能不是唯一的错误,但它绝对不会帮助你。 – alroc

回答

0

您不能发送foreach的输出进一步在你尝试的方式,管道;您需要单独导出每个项目。修订后的脚本(请注意,我还修正你where-object测试通过gci返回的每个项目的PSIsContainer属性):

$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,您需要执行额外的处理来提取该集合的每个元素。重复其他也返回集合的字段。