【问题标题】:powershell add user permission to a folder in windows serverpowershell将用户权限添加到Windows服务器中的文件夹
【发布时间】:2017-12-15 13:46:01
【问题描述】:

所以我有了下一条路径:C:\folder1\folder2\fileName。查看 C:\folder1 上的安全选项卡,可以看到具有 完全权限Alice 用户名。但是去 C:\folder1\folder2\fileName Alice 还不在那里。如何使用 powershell v2 Alice 成员 递归 在 C:\folder1 中插入,以便根 C:\folder1 下的所有文件也将具有相同的 Alice 用户名设置和完全权限。


我试过了:

$acl = Get-Acl C:\folder1
$permission = "domain\Alice","FullControl","Allow"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
$acl.SetAccessRule($accessRule)
$acl | Set-Acl C:\folder1

但它似乎不适用于 C:\folder1\folder1\fileName。猜猜我正在尝试为 Alice 申请权限,这在最后一个 fileName 项中尚不存在。

【问题讨论】:

    标签: powershell permissions acl


    【解决方案1】:

    正如您在FileSystemAccessRule 文档中所见,该类具有继承属性。 您必须将该属性添加到您的$permission

    $permission = "domain\Alice", 
    "FullControl",  
    [System.Security.AccessControl.InheritanceFlags]"ContainerInherit", 
    [system.security.accesscontrol.PropagationFlags]"None",
    "Allow"
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
    

    【讨论】:

    • 出了点问题... PS C:\> $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission New-Object : 找不到“FileSystemAccessRule”的重载和参数计数: “4”。在 line:1 char:25 + $accessRule = New-Object
    • 已修复。根据需要自行调整传播标志。
    【解决方案2】:

    您还可以递归地添加权限,方法是使用Get-ChildItems cmdlet 获取所有子项并将它们通过管道传送到Set-Acl cmdlet,就像他们在此处的 microsoft 站点文档中的示例中所做的那样:Set-Acl。查看“示例 3:将安全描述符应用于多个文件”或阅读以下内容(从页面复制):

    PS C:\> $NewAcl = Get-Acl File0.txt
    PS C:\> Get-ChildItem -Path "C:\temp" -Recurse -Include "*.txt" -Force | Set-Acl - AclObject $NewAcl
    

    这些命令将 File0.txt 文件中的安全描述符应用于 C:\Temp 目录及其所有子目录中的所有文本文件。

    第一个命令获取当前目录中 File0.txt 文件的安全描述符,并使用赋值运算符 (=) 将其存储在 $NewACL 变量中。

    管道中的第一个命令使用Get-ChildItem cmdlet 来获取C:\Temp 目录中的所有文本文件。 Recurse 参数将命令扩展到 C:\temp 的所有子目录。 Include 参数将检索到的文件限制为具有“.txt”文件扩展名的文件。 Force 参数获取隐藏文件,否则将被排除。 (您不能使用“c:\temp*.txt”,因为-Recurse 参数适用于目录,而不适用于文件。)

    管道运算符 (|) 将表示检索到的文件的对象发送到 Set-Acl cmdlet,后者将 AclObject 参数中的安全描述符应用于管道中的所有文件。

    在实践中,最好将 Whatif 参数与所有可能影响多个项目的 Set-Acl 命令一起使用。在这种情况下,管道中的第二个命令将是“Set-Acl -AclObject $NewAcl -WhatIf”。此命令列出将受该命令影响的文件。查看结果后,您可以不带Whatif 参数再次运行该命令。

    这是一个使用“.txt”文件的示例,但也可以修改以应用于目录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-01
      • 2014-12-07
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多