今天需要给某个网络共享的大文件重新配置一个权限。这个文件夹下面有很多乱七八糟的小文件,很多创建人甚至已经离开公司了。如果一个个地目录手动修改所有者权限,再打开继承关系,这样比较麻烦,这个时候自然是用脚本比较方便了。

#网上找的现成的高级方法来enable继承关系functionSet-NTFSInheritance{<#.SYNOPSISEnableorDisabletheNTFSpermissionsinheritance..DESCRIPTIONEnableorDisabletheNTFSpermissionsinheritanceonfilesand/orfolders..EXAMPLE$Folders=Get-Childitem-Path'e:\homedirs'|Where-Object{$_.Attributes-eq'Directory'}$Folders|foreach{$_|Set-NTFSInheritance-Enable}.NOTESAuthor:JeffWoutersDate: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$_.FullNameswitch($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:takeoverownershiptakeown.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-ForegroundColorCyanicacls$path/grant"$($group)$perm2"}#最后调用函数即可$parent="\\syd02\CreativeTRACK\CLIENTFOLDERS\WESTPAC"Get-ChildItem$parent|foreach{$_.fullnameChangePermission-path$_.FullName-group"SydneyTrackCreative"}