2013-02-08 75 views
0

我在用戶目錄中有多個文件夾,這些文件夾以錯誤的ACL結尾。我想找到一種方法來使用PowerShell(或者一個常規的命令提示符,如果更簡單的話)刪除現有的ACL並將其替換爲應該從其父文件夾繼承的內容。訣竅是隻有擁有該文件夾的用戶纔有權訪問它(get-acl'。\ folder'返回「試圖執行未經授權的操作」)。這些文件夾都位於Windows Server 2003 Std系統上。使用PowerShell替換具有繼承默認值的ACL

+1

http://mattgemmell.com/2008/12/08/what-have-you-tried/ – 2013-02-08 15:32:33

+0

@CB:我已經試過一些來自我發現的其他密切相關查詢的腳本,但所有這些腳本都失敗了,因爲上面的消息有所變化。我認爲PowerShell是新事物,使用它可以更容易地完成我的任務,但正如您在下面的答案中看到的,使用舊的命令提示符會更容易。 – Caynadian 2013-02-08 16:10:46

回答

0

試試這個:

#You have a textfile with FOLDER-paths 
#$a = Get-Content d:\list.txt 
#You have an array of FOLDER-paths 
$a = @("d:\mytestfolder", "d:\my2ndtestfolder") 

$a | % { 
    #Take ownership to admin-group 
    & TAKEOWN /F $_ /A /R /D Y 
    #Reset acl to default recursively 
    & ICACLS $_ /RESET /T /C 
} 
+0

謝謝!這基本上是我最終做的,雖然我沒有打擾PowerShell。我不知道你可以「打電話」那樣的常規命令。 – Caynadian 2013-02-08 16:15:15

+0

如果使用調用操作符('&'),則將字符串的其餘部分轉換爲命令;) – 2013-02-08 16:17:54

0

事實證明,這是很容易與普通的命令提示符工具來完成。附件中的腳本做什麼,我需要在短短的幾行:

@Echo Off 
@Echo Taking ownership of files in %1 
takeown /f %1 /r /d Y /a > :nul 
@Echo Restoring default ACLs in %1 
icacls %1 /reset /t /c > :nul 
@Echo Restoring ownership of files to %2 
subinacl /file %1 /setowner=%2 > :nul 
subinacl /subdirectories %1\*.* /setowner=%2 > :nul