windows - 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
似乎它正在复制文件并重置权限,但它并没有删除任何内容,用户仍然具有写入和特殊权限。我在这里做错了什么?
解决方案
/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"
推荐阅读
- ssl - 无法从 github 拉取,也无法更新 FC19 上的旧 TLS
- html - 如何构造一个条件匹配前一个兄弟的孩子的 XPATH
- dart - 与 Dart 的地图交互
- python - 如何仅输出唯一的基因 ID?
- javascript - 使用 ReactJS 更新标记而不更新 Google 地图中心
- python - Python:返回整个字典时遇到问题
- typescript - 尝试使用带有打字稿的 vuex getter 时得到“预期 4 个参数,但得到 1 个”
- xamarin.forms - Azure Devops 管道 - AndroidSigning 上缺少输入 APK
- azure-sql-database - ADF - 无法在链接服务中进行参数化以连接到 Azure SQL 数据库?
- c# - 由于权限不足,无法运行“dotnet ef 数据库更新”