首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修改文件夹权限

修改文件夹权限
EN

Stack Overflow用户
提问于 2016-02-06 02:55:06
回答 1查看 258关注 0票数 1

需要一点帮助。脚本根本不更改权限。

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

代码语言:javascript
复制
$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
    }
}
} 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-06 03:40:25

脚本当前的问题是:

  • 传递给New-Object System.Security.AccessControl.FileSystemAccessRule的第一个参数应该是$name,而不是$user
  • 写入日志文件的Add-Content调用不应该在catch子句中,因为只有当catch操作没有成功时,它才会进行日志记录。
  • 如果在catch子句中没有其他语句,异常就会被有效地忽略。
  • 您将仅将文件夹名称传递给期望路径(Get-AclSet-Acl)的cmdlet,只有在当前位置恰好是文件夹的父位置时才能工作。

下面是您的脚本的重新设计,它应该按照预期工作:

代码语言:javascript
复制
$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...命令):

代码语言:javascript
复制
$userIdentity = New-Object System.Security.Principal.NTAccount $user
$acl.SetOwner($userIdentity)

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35236816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档