首页 > 解决方案 > Powershell ICACLS 更改文件的权限

问题描述

基本上我要做的是将一个txt文件推送到远程PC列表中,然后将本地用户组对该文件的权限更改为只能读取和执行。(我放弃了在保留权限的同时尝试将文件推出)。PC 名称列在ComputerNames.txt文件的单独行中。

这是我所拥有的:

$computers = Get-Content "C:\ComputerNames.txt"
$fileToCopy = "C:\newFile.txt"
foreach ($computer in $Computers) {
    # Copy file to remote PC
    Copy-Item -Path $fileToCopy -Destination "\\$computer\C`$\HOMEWARE\"
    # Reset current permissions on file
    icacls \\$computer\C$\HOMEWARE\newFile.txt /reset
    # Grant Read / Execute
    icacls \\$computer\C$\HOMEWARE\newFile.txt /grant:r "USERS:(OI)(CI)RX"
}
pause

似乎它正在复制文件并重置权限,但它并没有删除任何内容,用户仍然具有写入和特殊权限。我在这里做错了什么?

标签: windowspowershellfile-permissionsicacls

解决方案


/grant:r只会替换给定用户或组的现有显式权限。它不会触及继承的权限。对象继承 (OI) 和容器继承 (CI) 仅在处理文件夹时才有意义。没有什么会从文件继承权限。此外,仅禁用继承 ( /inheritance:d) 是不够的,您还需要删除现有权限 ( /inheritance:r)。

这应该做你想要的:

icacls \\$computer\C$\HOMEWARE\newFile.txt /reset
icacls \\$computer\C$\HOMEWARE\newFile.txt /inheritance:r /grant "Users:rx"

请注意,这将从文件中删除所有继承的权限,这可能会禁止备份和其他系统管理操作。正如 eryksun 在评论中指出的那样,最好禁用继承(将继承的权限转换为显式权限)然后替换用户 ACE。

icacls \\$computer\C$\HOMEWARE\newFile.txt /reset
icacls \\$computer\C$\HOMEWARE\newFile.txt /inheritance:d /grant:r "Users:rx"

如果您仍然希望删除继承的权限而不是转换为显式权限,我强烈建议您另外授予管理员和 SYSTEM 访问权限。

icacls \\$computer\C$\HOMEWARE\newFile.txt /reset
icacls \\$computer\C$\HOMEWARE\newFile.txt /inheritance:r /grant "Users:rx" "Administrators:f" "system:f"

推荐阅读