【问题标题】:Replace ACLs with Inherited Defaults using PowerShell使用 PowerShell 将 ACL 替换为继承的默认值
【发布时间】:2013-02-08 13:46:56
【问题描述】:

我在用户目录中有许多文件夹,这些文件夹最终使用了错误的 ACL。我想找到一种方法来使用 PowerShell(或者更简单的常规命令提示符)来删除现有的 ACL 并将其替换为它应该从其父文件夹继承的内容。诀窍是只有拥有该文件夹的用户才能访问它(get-acl '.\folder' 返回“尝试执行未经授权的操作。”)。这些文件夹都位于 Windows Server 2003 Std 系统上。

【问题讨论】:

  • @C.B.:我尝试了一些我发现的其他密切相关的查询中的一些脚本,但所有这些脚本都因上述消息的一些变体而失败。我认为 PowerShell 是新事物,使用它来完成我的任务会更容易,但正如您在下面的回答中看到的那样,使用旧的命令提示符会容易得多。

标签: powershell windows-server-2003 acl


【解决方案1】:

试试这个:

#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
}

【讨论】:

  • 谢谢!这基本上就是我最终做的事情,尽管我没有使用 PowerShell。我不知道你可以像那样“调用”常规命令。
  • 如果你使用调用操作符(&),它将把字符串的其余部分变成一个命令;)
【解决方案2】:

事实证明,使用常规命令提示符工具更容易做到这一点。附加的脚本只用了几行就完成了我需要的操作:

@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

【讨论】:

    猜你喜欢
    • 2015-06-17
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多