【问题标题】:PowerShell To Set Folder PermissionsPowerShell 设置文件夹权限
【发布时间】:2023-03-28 21:40:02
【问题描述】:

我正在尝试使用“默认”选项来应用文件夹权限;我的意思是在文件夹的“属性”中使用“完全控制、写入、读取等”。

以下脚本用于添加用户,但它应用“特殊权限” - 而不是那些在文件夹的属性菜单中可见的带有复选框的用户:

$Acl = Get-Acl "\\R9N2WRN\Share"

$Ar = New-Object System.Security.AccessControl.FileSystemAccessRule ("user","FullControl","Allow")

$Acl.SetAccessRule($Ar)
Set-Acl "\\R9N2WRN\Share" $Acl

请问我做错了什么?

【问题讨论】:

    标签: file-permissions powershell-3.0


    【解决方案1】:

    FileSystemAccessRule() 构造函数中指定继承可以解决这个问题,如下面的修改代码所示(注意插入在"FullControl""Allow" 之间的两个新构造函数参数)。

    $Acl = Get-Acl "\\R9N2WRN\Share"
    
    $Ar = New-Object System.Security.AccessControl.FileSystemAccessRule("user", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow")
    
    $Acl.SetAccessRule($Ar)
    Set-Acl "\\R9N2WRN\Share" $Acl
    

    根据this topic

    "当您以您的方式创建 FileSystemAccessRule 时, InheritanceFlags 属性设置为无。在 GUI 中,这 对应于应用到框设置为“仅此文件夹”的 ACE, 并且该类型的条目必须通过高级查看 设置。”

    我已经测试了修改并且它有效,但当然功劳是由于 MVP 在该主题中发布了答案。

    【讨论】:

      【解决方案2】:

      参考Gamaliel 's answer:$args 是在运行时传递给脚本的参数数组——因此不能像 Gamaliel 那样使用它。 这实际上是有效的:

      $myPath = 'C:\whatever.file'
      # get actual Acl entry
      $myAcl = Get-Acl "$myPath"
      $myAclEntry = "Domain\User","FullControl","Allow"
      $myAccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($myAclEntry)
      # prepare new Acl
      $myAcl.SetAccessRule($myAccessRule)
      $myAcl | Set-Acl "$MyPath"
      # check if added entry present
      Get-Acl "$myPath" | fl
      

      【讨论】:

        【解决方案3】:

        另一个使用 PowerShell 设置权限(文件/目录)的示例:

        验证权限

        Get-Acl "C:\file.txt" | fl *
        

        为所有人应用完全权限

        $acl = Get-Acl "C:\file.txt"
        $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("everyone","FullControl","Allow")
        $acl.SetAccessRule($accessRule)
        $acl | Set-Acl "C:\file.txt"
        

        截图:

        希望对你有帮助

        【讨论】:

        • 这似乎不起作用 - 它最终为用户设置了“特殊权限”,而不是完全控制。
        • 感谢您的 cmets,我只想分享另一个示例,该示例可以适应设置有用的权限并且对我有用。
        • 有趣,我想知道为什么它对我不起作用——也许我做错了!
        • accessRule 行返回:找不到构造函数
        • 这是一组参数:blog.netwrix.com/2018/04/18/…
        【解决方案4】:

        如果您必须处理包含子文件夹和其他递归内容的大量子文件夹。 @Mike L'Angelo的小改进:

        $mypath = "path_to_folder"
        $myacl = Get-Acl $mypath
        $myaclentry = "username","FullControl","Allow"
        $myaccessrule = New-Object System.Security.AccessControl.FileSystemAccessRule($myaclentry)
        $myacl.SetAccessRule($myaccessrule)
        Get-ChildItem -Path "$mypath" -Recurse -Force | Set-Acl -AclObject $myacl -Verbose
        

        最后一行的详细程度是可选的

        【讨论】:

        • 谢谢。正是我需要的。不过警告,它可能需要很长时间才能运行。
        【解决方案5】:
        $path = "C:\DemoFolder"
        $acl = Get-Acl $path
        $username = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
        $Attribs = $username, "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow"
        $AccessRule = New-Object System.Security.AcessControl.FileSystemAccessRule($Attribs)
        $acl.SetAccessRule($AccessRule)
        $acl | Set-Acl $path
        Get-ChildItem -Path "$path" -Recourse -Force | Set-Acl -aclObject $acl -Verbose
        

        【讨论】:

          猜你喜欢
          • 2012-12-26
          • 1970-01-01
          • 2014-09-28
          • 1970-01-01
          • 2015-10-18
          • 2019-04-03
          • 2017-10-05
          • 2013-12-22
          • 1970-01-01
          相关资源
          最近更新 更多