使用PowerShell将ACL替换为继承的默认值

使用PowerShell将ACL替换为继承的默认值,powershell,windows-server-2003,acl,Powershell,Windows Server 2003,Acl,我在用户目录中有许多文件夹最终使用了错误的ACL。我想找到一种方法,使用PowerShell(或常规命令提示符,如果更容易的话)删除现有ACL,并将其替换为应该从其父文件夹继承的ACL。诀窍在于,只有拥有该文件夹的用户才能访问它(获取acl)。\folder返回“试图执行未经授权的操作”。)。这些文件夹都位于Windows Server 2003 Std系统上。请尝试以下操作: #You have a textfile with FOLDER-paths #$a = Get-Content d:

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

请尝试以下操作:

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

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

@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

@C.B.:我试过从我发现的其他密切相关的查询中得到的一些脚本,但都失败了,上面的消息有些变化。我假设PowerShell是新事物,使用它可以更容易地完成我的任务,但正如我在下面的回答中所看到的,使用旧的命令提示符更容易。谢谢!这就是我最终要做的,尽管我没有为PowerShell操心。我不知道你可以像那样“调用”常规命令。如果你使用call操作符(
&
),它会将字符串的其余部分转换为命令;)