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還能自行變化想要篩選的條件。歡迎自由發揮。
Hi Neo,
真的是很棒的script,簡潔好用喔,先謝了!
另外請教一個小小疑問,當目錄名稱裡有中文字匯出CSV時會變成??,是否有解呢.非常感謝!
在最後面加入 -Encoding UTF8 就可以正常輸出中文了。
文章一併更新了。
請問有辦法從程式碼直接把繼承上層資料夾權限的清單篩選掉嗎?謝謝!
試試下面這一串
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 }