POwershell 更改文件权限

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POwershell 更改文件权限相关的知识,希望对你有一定的参考价值。

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

#网上找的现成的高级方法来enable继承关系
function Set-NTFSInheritance {
<#    
        .SYNOPSIS
        Enable or Disable the NTFS permissions inheritance.
        .DESCRIPTION
        Enable or Disable the NTFS permissions inheritance on files and/or folders.
        .EXAMPLE
        $Folders = Get-Childitem -Path ‘e:\homedirs‘ | Where-Object {$_.Attributes -eq ‘Directory‘}
        $Folders | foreach {
            $_ | Set-NTFSInheritance -Enable
        }
        .NOTES
        Author   :  Jeff Wouters
        Date     :  8th of May 2014
#> 
    [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.SetAccessRuleProtection($false,$false)
            }
            ‘Disable‘ {
                $ACL.SetAccessRuleProtection($true,$true)
            }
        }
        try {
            $ACL | Set-Acl -Passthru
        } catch {
            $_.Exception
        }
    } end {
    }
}

#自己调用一下上面的方法,基本上就是三步走,第一个夺取所有权;第二打开继承关系;第三在最上面设置权限
function ChangePermission {
[cmdletbinding(defaultparametersetname=‘Enable‘)]
    param (
        [Parameter(Mandatory=$true)]
        [string]
        $path,
        [Parameter(Mandatory=$true)]
        [string]
        $group
    )
   #Step 1: take over ownership
    takeown.exe  /f $path /r /d Y
    #Step 2:  enable inheritance for all subfolders
    $Folders = Get-Childitem -Path $path -Recurse
    $Folders | foreach {
        $_ | Set-NTFSInheritance -Enable
    }
    #Step3:   setup NTFS Modify permission from the parent folder
    $perm2=‘:(OI)(CI)(M)‘
    write-host $path -ForegroundColor Cyan
    icacls $path /grant "$($group)$perm2"
}

#最后调用函数即可

$parent="\\syd02\Creative TRACK\CLIENT FOLDERS\WESTPAC"
Get-ChildItem  $parent | foreach {
$_.fullname
ChangePermission -path $_.FullName -group "Sydney Track Creative" 
}



本文出自 “麻婆豆腐” 博客,请务必保留此出处http://beanxyz.blog.51cto.com/5570417/1901607

以上是关于POwershell 更改文件权限的主要内容,如果未能解决你的问题,请参考以下文章

使用 powershell 更改权限不会传播给孩子

通过 PowerShell 更改 DCOM 对象权限后要重新启动啥?

如何在 ssms 中更改用户通过 powershell 连接到数据库引擎的权限?

PowerShell 登录名和权限

我可以在IIS中更改证书指纹:使用PowerShell进行SSLBindings吗?

服务器多进程powershell导致服务器瘫痪问题解决