![如何使用 powershell 和 set-acl 跨文件夹结构和特定扩展复制权限?](https://linux22.com/image/1604025/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20powershell%20%E5%92%8C%20set-acl%20%E8%B7%A8%E6%96%87%E4%BB%B6%E5%A4%B9%E7%BB%93%E6%9E%84%E5%92%8C%E7%89%B9%E5%AE%9A%E6%89%A9%E5%B1%95%E5%A4%8D%E5%88%B6%E6%9D%83%E9%99%90%EF%BC%9F.png)
Windows 中有一组文件夹和子文件夹,其中包含 *.dxf(多个)、*.add(多个)和 shapes.dat(每个文件夹 1 个)文件。这些是软件所需的文件夹结构的一部分。
我需要递归地将所有 *.dxf 和 *.add 的权限设置为只读,同时保留单个 shapes.dat 文件的写入权限。
在下文中关联所描述的内容似乎有帮助,但我看不到重构或启用我的操作的方法。
建议的命令是:
$newacl = get-acl "c:\yourfolder\samplefile.dxf"
get-childitem "C:\folder\folder\client files\" -Recurse -include "*.dxf" | set-acl -aclobject $newacl
我还发现了几个相关的问题:我尝试解决这个问题,但收效甚微(必须删除并从备份中恢复)。
任何尝试都将受到赞赏。
答案1
我认为您几乎已经了解了,因为我不太确定到底是什么出了问题,您应该修改您的Get-ChildItem
语句。根据您的要求:
我需要递归地将所有 *.dxf 和 *.add 的权限设置为只读,同时保留单个 shapes.dat 文件的写入权限。
假设文件“samplefile.dxf”具有正确的权限,您的代码应该如下所示:
$newacl = Get-Acl "c:\yourfolder\samplefile.dxf"
Get-ChildItem -Path "C:\folder\folder\client files\" -Recurse -Include "*.dxf", "*.add" -Force | Set-Acl -AclObject $newacl
为了指出变化,我-Path
在目标路径和-Force
参数之前添加了参数,并添加了额外的"*.add"
文件扩展名。您应该在 PowerShell 的管理会话中运行此操作以防止权限错误,这可能是根本问题。有关使用多个字符串作为命令过滤器的更多信息,Get-ChildItem
请参阅此文章。如果这不起作用,请将-Verbose
参数添加到命令中Set-Acl
以查看失败的原因。