Powershell ICACLS更改文件的权限

问题描述 投票:1回答:1

基本上我要做的是将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

它似乎是复制文件并且权限被重置但它不会剥离任何东西,用户仍然具有写入和特殊权限。我在这做错了什么?

windows powershell file-permissions icacls
1个回答
0
投票

/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在评论中指出的那样,最好只是禁用继承(将继承的权限转换为显式权限),然后替换User 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"
© www.soinside.com 2019 - 2024. All rights reserved.