powershell怎么获取文件夹与文件权限?

发布时间:2020-08-26编辑:脚本学堂
powershell如何获取文件或文件夹访问权限,本文介绍了powershell修改文件夹访问权限,powershell修改文件访问权限的实例代码,需要的朋友参考下。

一、powershell获取文件或文件夹访问权限:
 

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

二、powershell修改文件访问权限:

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

$account = "test01win2k8r2test"
$FileSystemRights = "FullControl"

$objType = [System.Security.AccessControl.AccessControlType]::Allow
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule ($account,$FileSystemRights,$objType)
$Folder = "W:Testtest.txt"
$acl = Get-Acl $Folder
$acl.SetAccessRule($accessRule)
Set-Acl -Path $Folder -AclObject $acl
 

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

Get-Acl "W:Testtest01.txt" | Set-Acl -Path "W:Testtest02.txt"

三、powershell修改文件夹访问权限:

与修改文件访问权限类似,同样应用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

代码:
 

复制代码 代码示例:
$account = "test01win2k8r2test"
$FileSystemRights = "FullControl"
$InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::ObjectInherit
$PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None
$objType = [System.Security.AccessControl.AccessControlType]::Allow
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule ($account,$FileSystemRights,$InheritanceFlag,$PropagationFlag,$objType)
$Folder = "W:Test"
$acl = Get-Acl $Folder
$acl.SetAccessRule($accessRule)
Set-Acl -Path $Folder -AclObject $acl

以上内容从网上借鉴可供参考,因项目最近经常出现一个问题就是website站点目录授予的用户权限一段时间后就会丢失,因此头让写一个判断文件夹用户权限是否存在不存在就添加上的Powershell脚本,因此开始看powershell资料,完成了本系列的学习笔记,并完成判断文件夹权限不存在就添加权限的完整脚本。

完整脚本代码:
 

复制代码 代码示例:

echo "old Rights"#显示原有文件夹权限
$path="E:test"#文件夹路径
$rights="BUILTINGuests"#需要权限的用户
(get-acl -path $path).access |Select-Object -Property IdentityReference #显示原有文件夹权限
echo ""
echo "****************************"
echo ""
echo ""
echo "result:"
echo ""
$aa=(get-acl -path $path).access  | where-object -filterscript{$_.identityreference -eq $rights}#判断是否有权限
if ($aa -eq $null){
 $account = $rights
 $FileSystemRights = "FullControl"
 $InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::ObjectInherit
 $PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None
 $objType = [System.Security.AccessControl.AccessControlType]::Allow

 $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule ($account,$FileSystemRights,$InheritanceFlag,$PropagationFlag,$objType)
 $Folder = $path
 $acl = Get-Acl $Folder
 $acl.SetAccessRule($accessRule)
 
 Set-Acl -Path $Folder -AclObject $acl
 echo "success"
}else{
 echo "Existing permissions"
}
echo ""
echo ""
echo "****************************"

echo "new Rights"#输出新的文件夹权限
echo ""
(get-acl -path $path).access |Select-Object -Property IdentityReference