powershell - 使用 ICACLS 将文件权限设置为 'read-only'

标签 powershell batch-file command-line chmod icacls

关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

4年前关闭。




Improve this question




我有一段时间从简单、直观的转移 chmod 400尝试使用 ICACLS 在 Windows 命令提示符中做同样的事情.与 UNIX/LINUX chmod 的圆滑的八进制表示相比, ICACLS似乎是一场复杂的噩梦。

我有一个 SSH .pem key ,我正在尝试将其设为只读。我想用这个新的只读权限替换当前的旧权限。我最接近找到答案的是以下内容:
ICACLS "D:\Folder A\Another Folder\File Name Here.ext" /GRANT:R "DOMAIN\USERNAME":R(在这里找到:https://www.experts-exchange.com/questions/27624477/What-command-can-give-user-read-only-permission.html)

相信:R最后允许我替换当前的权限,这就是我想要的。但我不知道该放什么给 "DOMAIN\USERNAME"部分。有什么建议吗?

最佳答案

Unix 和 Windows 中的权限以不同的方式工作。在 Windows 中,默认情况下您具有继承权,并且权限更加细化,因为您拥有 ACE(每个身份的权限),而不仅仅是所有者/组/其他。所有者的权限仅在创建时授予。如果稍后更改所有者,则需要在所有者修改文件之前手动更新 ACE。
因此,您需要知道要向谁授​​予权限。如果你只想给你登录的用户授予读权限,你可以使用 $env:username在 PowerShell 或 %USERNAME% 中在 cmd 中。
使用 PowerShell 的示例:

$path = ".\test.txt"
#Reset to remove explict permissions
icacls.exe $path /reset
#Give current user explicit read-permission
icacls.exe $path /GRANT:R "$($env:USERNAME):(R)"
#Disable inheritance and remove inherited permissions
icacls.exe $path /inheritance:r
如果你想设置它等于 chmod 400 ,您可以检查谁是所有者并为该帐户分配权限。请注意,这也可以是像管理员这样的组:
$path = ".\test.txt"
icacls.exe $path /reset
icacls.exe $path /GRANT:R "$((Get-Acl -Path $path).Owner):(R)"
icacls.exe $path /inheritance:r
或者您可以使用 PowerShell 中的内置 cmdlet:
$path = ".\test.txt"

#Get current ACL to file/folder
$acl = Get-Acl $path

#Disable inheritance and remove inherited permissions
$acl.SetAccessRuleProtection($true,$false)

#Remove all explict ACEs
$acl.Access | ForEach-Object { $acl.RemoveAccessRule($_) }

#Create ACE for owner with read-access. You can replace $acl.Owner with $env:UserName to give permission to current user
$ace = New-Object System.Security.AccessControl.FileSystemAccessRule -ArgumentList $acl.Owner, "Read", "Allow"
$acl.AddAccessRule($ace)

#Save ACL to file/folder
Set-Acl -Path $path -AclObject $acl

关于powershell - 使用 ICACLS 将文件权限设置为 'read-only',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43312953/

相关文章:

powershell - 安排 powershell 脚本每 20 分钟运行一次

powershell - 返回远程计算机上指定注册表项的 LastWriteTime

batch-file - 删除批处理变量中的非字母数字字符

.net - 用于安装或卸载 .NET Windows 服务的批处理脚本

linux - 如何将用户名附加到文件名中

mobile - 从命令行使用 Azure 移动服务进行测试

azure - 是否可以使用 Azure Graph API 更改 PIM 中的通知

object - 解析一个对象,为每个成员添加一个成员属性

batch-file - 如何通过批处理cmd合并两个文件夹

windows - 为什么在管理员模式下运行时不能使用批处理 XCOPY?