基本上,我要做的是将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 "\$computerC`$HOMEWARE"
# Reset current permissions on file
icacls \$computerC$HOMEWAREnewFile.txt /reset
# Grant Read / Execute
icacls \$computerC$HOMEWAREnewFile.txt /grant:r "USERS:(OI)(CI)RX"
}
pause
似乎它正在复制文件并重置权限,但它不会剥离任何内容,用户仍然具有写入和特殊权限。 我在这里做错了什么?
/grant:r
只会替换给定用户或组的现有显式权限。它不会触及继承的权限。对象继承 (OI( 和容器继承 (CI( 仅在处理文件夹时才有意义。没有任何东西会从文件继承权限。此外,仅禁用继承(/inheritance:d
(是不够的,您还需要删除现有权限(/inheritance:r
(。
这应该做你想要的:
icacls \$computerC$HOMEWAREnewFile.txt /reset
icacls \$computerC$HOMEWAREnewFile.txt /inheritance:r /grant "Users:rx"
请注意,这将删除文件中的所有继承权限,这可能会禁止备份和其他系统管理操作。正如 eryksun 在评论中指出的那样,最好只禁用继承(将继承的权限转换为显式权限(,然后替换用户 ACE。
icacls \$computerC$HOMEWAREnewFile.txt /reset
icacls \$computerC$HOMEWAREnewFile.txt /inheritance:d /grant:r "Users:rx"
如果您仍然希望删除继承的权限而不是转换为显式权限,我强烈建议您额外授予管理员和系统的访问权限。
icacls \$computerC$HOMEWAREnewFile.txt /reset
icacls \$computerC$HOMEWAREnewFile.txt /inheritance:r /grant "Users:rx" "Administrators:f" "system:f"