首页 > 代码库 > powershell文件权限操作
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]::Allow5 $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule ($account,$FileSystemRights,$objType)6 $Folder = "W:\Test\test.txt"7 $acl = Get-Acl $Folder8 $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 = $rights14 $FileSystemRights = "FullControl"15 $InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::ObjectInherit16 $PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None17 $objType = [System.Security.AccessControl.AccessControlType]::Allow18 19 $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule ($account,$FileSystemRights,$InheritanceFlag,$PropagationFlag,$objType)20 $Folder = $path21 $acl = Get-Acl $Folder22 $acl.SetAccessRule($accessRule)23 24 Set-Acl -Path $Folder -AclObject $acl25 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 IdentityReference36 37
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。