Powershell:讀取資料夾權限並列表為CSV

Update(2021/02/20) : 在程式碼最後加入 -Encoding UTF8,可以正常輸出中文。
Update(2022/08/12):在中間加入where { !$_.IsInherited },可以篩選非繼承權限的檔案

經歷過很多年代的檔案伺服器是最不容易管理的。
尤其裡面很多資料夾有的有繼承權限有的沒有,一個一個進去點開來看十分痛苦也浪費時間。所幸透過Powershell可以一次把Folder下面所有的資料夾全權一次蒐集出來匯出的CSV,這樣就可以透過Excel來打開看了。
當然Excel有資料筆數限制,所以如果大到打不開請勤勞一點拆分子資料夾蒐集。

下面是Powershell程式碼:請自行替換變數$path和$reportpath

$path = "F:\XXXX\AA\" #define path to the shared folder
$reportpath ="F:\temp\XXXX_AA_ACL.csv" #define path to export permissions report
#script scans for directories under shared folder and gets acl(permissions) for all of them
dir -Recurse $path | where { $_.PsIsContainer } | % { $path1 = $_.fullname; Get-Acl $_.Fullname | % { $_.access | Add-Member -MemberType NoteProperty '.\Application Data' -Value $path1 -passthru }} | Export-Csv $reportpath -Encoding UTF8

下面就會列出資料夾下所有的ACL,這樣是不是很方便稽核呢!

$path = "F:\BatchFile" #define path to the shared folder
$reportpath ="F:\aaa.csv" #define path to export permissions report
#script scans for directories under shared folder and gets acl(permissions) for all of them
dir -Recurse $path | where { $_.PsIsContainer } | % { $path1 = $_.fullname; Get-Acl $_.Fullname | % { $_.access | where { !$_.IsInherited } | Add-Member -MemberType NoteProperty '.\Application Data' -Value $path1 -passthru }} | Export-Csv $reportpath -Encoding UTF8

這一段與原始程式碼不同的是加了where { !$_.IsInherited }只列出非繼承的檔案權限,方便找到沒有繼承權限的檔案。IsInherited還能自行變化想要篩選的條件。歡迎自由發揮。