發佈日期:
如何利用PowerShell指令‧一次性取得網絡磁碟內資料夾的存取權限
01. 公司Compliance部門同事問到一個正常問題,當有人離開公司,IT會將那人的Windows帳戶關閉,那人就不可以再存取網絡磁碟(Network drive)上的資料夾/檔案。但如果那人只是調職呢?要知道公司網絡磁碟資料夾,並不是只按Windows的Security Group來控制,有些資料夾是根據使用者來加入權限,有些資料夾不是繼承上一層資料夾的權限,更有些是系統管理員也沒有權限去存取。
02. 要查看一兩個資料夾權限,當然可以在Windows中的Security看到,但要查看大量的資料夾權限,PowerShell似乎是唯一的出路。
03. 在網上很快就找到相關的PowerShell Script。
Get-childitem -path "folder_path" -recurse | where{$_.PSIsContainer} | Get-Acl | % { $path = $_.Path $_.Access | % { New-Object PSObject -Property @{ Folder = $path.Replace("Microsoft.PowerShell.Core\FileSystem::","") Access = $_.FileSystemRights Control = $_.AccessControlType User = $_.IdentityReference Inheritance = $_.IsInherited } } } | select-object -Property User, Access, Folder | export-csv "outfile.csv"
04. 程式很快就找到相關資料夾的使用者權限,但問題是當有個資料夾連系統管理處沒有權限時,就會出現Access Denied錯誤,而程式也因此停止再執行。
05. 一直苦惱如在Get-childitem指令做手腳,但就算加入不同參數似乎也沒有幫助。終之一遇到資料夾連系統管理處沒有權限時,就會出現Access Denied錯誤。
06. 改一改方法,用dir指令去做。
dir -Recurse "folder_path" | where { $_.PsIsContainer } | % { $path1 = $_.fullname; Get-Acl $_.Fullname | % { $_.access | Add-Member -MemberType NoteProperty '.\Application Data' -Value $path1 -passthru } } | select-object -Property ".\Application Data", FileSystemRights, AccessControlType, IdentityReference, IsInherited | export-csv "outfile.csv"
07. 這次似乎成功了,當資料夾連系統管理處沒有權限時,一樣會出現Access Denied錯誤,但程式就會繼續將其他有存取權限的資料夾數據,輸出到CSV檔案。
08. 但問題是,那些連系統管理也沒有權限的資料夾要如何處理呢?
發佈留言