2010-12-16 247 views

回答

8

我已经扩展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) 
} 
+0

谢谢你。运行良好,如果有人想知道“Get-Item -LiteralPath”在UNC路径上工作,这意味着您可以将权限应用于远程计算机。 – Patrick 2013-02-11 12:13:44

4
$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 
+0

谢谢,但它仅将Everyone组添加到顶层文件夹,并且FullControl复选框未被选中。我错过了什么? – tempid 2010-12-16 21:10:19

+0

这可能不是一个很好的答案,但我今天发现这个例子很有用,所以给它投票。 – yzorg 2013-02-04 17:07:26

3

有时“本地”PowerShell方式不一定是最好的方式。对于这样的事情,我仍然会使用icacls.exe。请记住,在PowerShell中,好的工作方式非常好。只是cd到你想要设置和执行该目录:

icacls $pwd /grant "Everyone":(OI)(CI)F 

这将让每个人都完全访问到当前目录下(通过权限继承)。只要没有明确否认dir结构中的每个人,这应该起作用。

+0

使用下面的脚本添加了everyone账户,但没有给他们任何权限。这种方法适用于我... – BrianH 2012-07-10 15:45:02

+0

如果我知道魔术代码的含义,我会使用它。 '(OI)(CF)'我是一个试图帮助devops的开发者,而不是管理员试图自动化的东西,所以像下面的“Read”或“FullControl”powershell相比,这样的魔法是可怕的。 – yzorg 2013-02-04 17:09:11

相关问题