修改文件夹权限

时间:2016-02-06 02:55:07

标签: powershell powershell-v3.0 powershell-v4.0

需要一些帮助。该脚本根本不会更改权限。

我想让文件夹的名称成为具有完全权限的文件夹的所有者。

$foldernames = (Get-ChildItem \\knesmbmdc001\profiles).Name
$user = "$foldernames"
$usercount = 0
foreach($name in $foldernames)
{
If ($usercount -le 5)
{
    Try
    {

        $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($user,"FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
        $acl = get-acl $name
        $acl.AddAccessRule($rule)
        Set-acl $name $acl
    }
    catch
    {
    Add-Content C:\user_done.txt $name
    }
}
} 

1 个答案:

答案 0 :(得分:3)

您的脚本存在直接问题:

  • 传递给New-Object System.Security.AccessControl.FileSystemAccessRule的第一个参数应该是$name,而不是$user

  • 您的Add-Content调用日志文件的调用不应该在catch子句中,因为它只会记录ACL操作不是成功。

  • 如果您的catch子句中没有其他声明,则有效忽略

  • 您只是将文件夹名称传递给期望路径Get-AclSet-Acl)的cmdlet,这只适用于当前位置恰好是文件夹的父位置。

以下是您的脚本的重新制定,应该按预期工作:

$dir = '\\knesmbmdc001\profiles'
$logFile = 'C:\user_done.txt'
Get-ChildItem -Directory $dir | % {
    $user = $_.Name
    $acl = Get-Acl -LiteralPath $_
    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule $user, FullControl, "ContainerInherit, ObjectInherit", None, Allow
    $acl.AddAccessRule($rule)
    Set-Acl -LiteralPath $_ -AclObject $acl
    Add-Content $logFile $user
 }

但请注意,虽然此会向目标用户提供完全控制 ,但不会使他们成为所有者 的文件夹。

要实际更改所有权,请尝试以下操作(替换$rule=...$acl.AddAccessRule...命令):

$userIdentity = New-Object System.Security.Principal.NTAccount $user
$acl.SetOwner($userIdentity)

在使用提升的权限运行时,这对我使用本地用户帐户,但YMMV。