2013-05-17 185 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,您需要執行額外的處理來提取該集合的每個元素。重複其他也返回集合的字段。