IT Knowledge Base

~ Without sacrifice, there can be no victory ~

發佈日期:

如何利用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. 但問題是,那些連系統管理也沒有權限的資料夾要如何處理呢?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *