zoukankan      html  css  js  c++  java
  • powershell文件权限操作

    获取文件或文件夹访问权限

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

    修改文件访问权限

    修改文件访问权限需要用到Set-Acl命令,使用-Path参数指定要修改的文件路径,使用-AclObject参数指定一个对象,该对象相当于一个ACL模板,此ACL模板指定了用户访问资源的权限设定。该对象的设定需要调用"System.Security.AccessControl.FileSystemAccessRule"类。

    1 $account = "test01win2k8r2	est"
    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	est.txt"
    7    $acl = Get-Acl $Folder
    8    $acl.SetAccessRule($accessRule)
    9    Set-Acl -Path $Folder -AclObject $acl

    还可以通过Get-Acl获取一个文件的访问权限,然后修改另一文件使其具有同样的访问权限:

    Get-Acl "W:Test	est01.txt" | Set-Acl -Path "W:Test	est02.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	est"
     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:	est"#文件夹路径
     3 $rights="BUILTINGuests"#需要权限的用户
     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     
  • 相关阅读:
    如何在TVM上集成Codegen(上)
    CodeGen准备存储库
    CodeGen按钮循环
    CodeGen标记循环
    CodeGen结构循环回路
    CodeGen处理Synergy方法目录
    回顾6 单点登录
    回顾 five 幂等性
    回顾 four Object
    程序员的数学基础课 笔记6
  • 原文地址:https://www.cnblogs.com/binw/p/3921743.html
Copyright © 2011-2022 走看看