powershell文件權限操作


獲取文件或文件夾訪問權限

Get-Acl -Path <File or Folder Path> | Format-List

 

修改文件訪問權限

修改文件訪問權限需要用到Set-Acl命令,使用-Path參數指定要修改的文件路徑,使用-AclObject參數指定一個對象,該對象相當於一個ACL模板,此ACL模板指定了用戶訪問資源的權限設定。該對象的設定需要調用"System.Security.AccessControl.FileSystemAccessRule"類。

1 $account = "test01win2k8r2\test"
2    $FileSystemRights = "FullControl"
3 
4    $objType = [System.Security.AccessControl.AccessControlType]::Allow
5    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule ($account,$FileSystemRights,$objType)
6    $Folder = "W:\Test\test.txt"
7    $acl = Get-Acl $Folder
8    $acl.SetAccessRule($accessRule)
9    Set-Acl -Path $Folder -AclObject $acl

 

還可以通過Get-Acl獲取一個文件的訪問權限,然后修改另一文件使其具有同樣的訪問權限:

Get-Acl "W:\Test\test01.txt" | Set-Acl -Path "W:\Test\test02.txt"

 

修改文件夾訪問權限

與修改文件訪問權限類似,同樣應用Set-Acl命令,只是在調用FileSystemAccessRule時可以多指定參數InheritanceFlags和PropagationFlags來指定訪問權限的設定是否被子文件或子文件夾繼承:

http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.inheritanceflags.aspx

http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.propagationflags.aspx

 

 1  $account = "test01win2k8r2\test"
 2    $FileSystemRights = "FullControl"
 3    $InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::ObjectInherit
 4    $PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None
 5    $objType = [System.Security.AccessControl.AccessControlType]::Allow
 6    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule ($account,$FileSystemRights,$InheritanceFlag,$PropagationFlag,$objType)
 7    $Folder = "W:\Test\"
 8    $acl = Get-Acl $Folder
 9    $acl.SetAccessRule($accessRule)
10    Set-Acl -Path $Folder -AclObject $acl

 


以上內容從網上借鑒可供參考,因項目最近經常出現一個問題就是website站點目錄授予的用戶權限一段時間后就會丟失,因此頭讓寫一個判斷文件夾用戶權限是否存在不存在就添加上的Powershell腳本,因此開始看powershell資料,完成了本系列的學習筆記,並完成判斷文件夾權限不存在就添加權限的完整腳本,完整腳本代碼如下:
 1 echo "old Rights"#顯示原有文件夾權限
 2 $path="E:\test\"#文件夾路徑
 3 $rights="BUILTIN\Guests"#需要權限的用戶
 4 (get-acl -path $path).access |Select-Object -Property IdentityReference #顯示原有文件夾權限
 5 echo ""
 6 echo "****************************"
 7 echo ""
 8 echo ""
 9 echo "result:"
10 echo ""
11 $aa=(get-acl -path $path).access  | where-object -filterscript{$_.identityreference -eq $rights}#判斷是否有權限
12 if ($aa -eq $null){
13     $account = $rights
14     $FileSystemRights = "FullControl"
15     $InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::ObjectInherit
16     $PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None
17     $objType = [System.Security.AccessControl.AccessControlType]::Allow
18       
19     $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule ($account,$FileSystemRights,$InheritanceFlag,$PropagationFlag,$objType)
20     $Folder = $path
21     $acl = Get-Acl $Folder
22     $acl.SetAccessRule($accessRule)
23      
24     Set-Acl -Path $Folder -AclObject $acl
25     echo "success"
26 }else{
27  echo "Existing permissions" 
28 }
29 echo ""
30 echo ""
31 echo "****************************"
32 
33 echo "new Rights"#輸出新的文件夾權限
34 echo ""
35 (get-acl -path $path).access |Select-Object -Property IdentityReference
36     
37     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM