修改文件夹权限

Modifying folder permissions

需要一点帮助。该脚本根本没有更改权限。

我想让文件夹的名字成为拥有完整权限的文件夹的所有者。

$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
    }
}
} 

脚本的直接问题:

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

  • 你的 Add-Content 写入日志文件的调用不应该在 catch 子句中,因为它只会在 ACL 操作执行 成功。

  • 通过在 catch 子句中没有其他语句,异常实际上被 忽略

  • 您只是将文件夹 names 传递给期望 paths (Get-Acl, Set-Acl),仅当当前位置恰好是文件夹的父位置时才有效。

这里是您的脚本的重新表述,应该可以按预期工作:

$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。