将组“Everyone”添加到目录及其所有子目录中

11
我目前使用的是Vista 32位系统。如何添加Windows安全组“Everyone”,并且给予一个目录及其所有子目录和文件完全控制权限?是否有我可以使用的PowerShell脚本?
谢谢!
3个回答

16

我对martona的代码片段进行了扩展,成功地访问了所有文件夹和子文件夹。这是我的代码 -

$FilesAndFolders = gci "c:\data" -recurse | % {$_.FullName}
foreach($FileAndFolder in $FilesAndFolders)
{
    #using get-item instead because some of the folders have '[' or ']' character and Powershell throws exception trying to do a get-acl or set-acl on them.
    $item = gi -literalpath $FileAndFolder 
    $acl = $item.GetAccessControl() 
    $permission = "Everyone","FullControl","Allow"
    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
    $acl.SetAccessRule($rule)
    $item.SetAccessControl($acl)
}

谢谢这个。运行良好,如果有人想知道,“Get-Item -LiteralPath”适用于UNC路径,这意味着您可以将权限应用于远程计算机。 - Patrick

8
有时候,用"本地"的PowerShell方法并不一定是最好的方法。对于像这样的情况,我仍然会使用icacls.exe。请记住,好用的exes在PowerShell中也非常好用。只需要cd到你想要设置的目录并执行以下命令:
icacls $pwd /grant "Everyone":(OI)(CI)F

这将为所有人提供当前目录向下的完全访问权限(通过权限继承)。 只要目录结构中没有对“所有人”进行明确拒绝,这就应该可以工作。

1
使用下面的脚本添加了“everyone”帐户,但没有赋予它们任何权限。这种方法适合我... - BrianH
如果我知道这些神奇代码的含义,我会使用它。(OI)(CF) 我是一名开发人员,试图帮助进行DevOps,而不是尝试自动化事物的管理员,因此与下面的“读取”或“完全控制”PowerShell相比,这样的魔法令人感到恐惧。 - yzorg

5
$acl = Get-Acl c:\mydir
$permission = "Everyone","FullControl","Allow"
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
$acl.SetAccessRule($rule)
$acl | Set-Acl c:\mydir

谢谢,但它只将“Everyone”组添加到顶层文件夹,并且“FullControl”复选框未被选中。我错过了什么? - tempid
这可能不是对问题的一个好回答,但我今天发现这个例子很有用,所以投票支持它。 - yzorg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接