2010-12-16 251 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

相關問題