POwershell 更改文件权限
今天需要给某个网络共享的大文件重新配置一个权限。这个文件夹下面有很多乱七八糟的小文件,很多创建人甚至已经离开公司了。如果一个个地目录手动修改所有者权限,再打开继承关系,这样比较麻烦,这个时候自然是用脚本比较方便了。 #网上找的现成的高级方法来enable继承关系 functionSet-NTFSInheritance{ <# .SYNOPSIS EnableorDisabletheNTFSpermissionsinheritance. .DESCRIPTION EnableorDisabletheNTFSpermissionsinheritanceonfilesand/orfolders. .EXAMPLE $Folders=Get-Childitem-Path'e:\homedirs'|Where-Object{$_.Attributes-eq'Directory'} $Folders|foreach{ $_|Set-NTFSInheritance-Enable } .NOTES Author:JeffWouters Date:8thofMay2014 #> [cmdletbinding(defaultparametersetname='Enable')] param( [parameter(mandatory=$true,position=0,valuefrompipeline=$true,parametersetname='Enable')] [parameter(mandatory=$true,position=0,valuefrompipeline=$true,parametersetname='Disable')] $Path, [parameter(mandatory=$false,parametersetname='Enable')][switch]$Enable, [parameter(mandatory=$false,parametersetname='Disable')][switch]$Disable ) begin{ }process{ $ACL=get-acl$_.FullName switch($PSCmdlet.ParameterSetName){ 'Enable'{ $ACL.SetAcce***uleProtection($false,$false) } 'Disable'{ $ACL.SetAcce***uleProtection($true,$true) } } try{ $ACL|Set-Acl-Passthru }catch{ $_.Exception } }end{ } } #自己调用一下上面的方法,基本上就是三步走,第一个夺取所有权;第二打开继承关系;第三在最上面设置权限 functionChangePermission{ [cmdletbinding(defaultparametersetname='Enable')] param( [Parameter(Mandatory=$true)] [string] $path, [Parameter(Mandatory=$true)] [string] $group ) #Step1:takeoverownership takeown.exe/f$path/r/dY #Step2:enableinheritanceforallsubfolders $Folders=Get-Childitem-Path$path-Recurse $Folders|foreach{ $_|Set-NTFSInheritance-Enable } #Step3:setupNTFSModifypermissionfromtheparentfolder $perm2=':(OI)(CI)(M)' write-host$path-ForegroundColorCyan icacls$path/grant"$($group)$perm2" } #最后调用函数即可 $parent="\\syd02\CreativeTRACK\CLIENTFOLDERS\WESTPAC" Get-ChildItem$parent|foreach{ $_.fullname ChangePermission-path$_.FullName-group"SydneyTrackCreative" }