无论使用哪种Windows语言,如何使ICACLS命令将文件夹设置为对所有人具有完全访问权限?


9

背景

说我有这个命令

icacls C:\FullyAccessibleFolder /grant Users:(OI)(CI)F

这在Windows的英语版本中工作正常,但在法语版本中似乎不起作用,可能会出现以下错误,原因可能Users是法语有所不同。Everyone就像Tout le monde在Windows中一样被翻译,因此也不是解决方案。

Users: Le mappage entre les noms de compte et les ID de sécurité n'a pas été effectué.

Google将其翻译为

Users: The mapping between account names and security IDs was not performed.

我是否可以使用一个命令来设置一个文件夹并以递归方式设置其所有内容,从而以一种适用于Windows的不同语言版本的方式对所有用户拥有完全权限?

网络内容

此页面有很大程度上类似的问题谈如何Everyone成为Jeder德语和Tout le monde法语。


2
只需使用SID:icacls C:\FullyAccessibleFolder /grant S-1-5-32-545:(OI)(CI)F 随处可见。

2
@Ben,应该是icacls C:\folder /grant *S-1-5-32-545:(OI)(CI)F,您省略了星号。
哈里·约翰斯顿

Answers:


10

不适用于法语版本,可能是因为与Users其他版本不同

您有三个选项,详细说明如下:

  1. 使用“使用语言门户”获取翻译后的名称

  2. UsersSID 检索本地化名称

  3. UsersSID与icacls


选项1:使用语言门户(Microsoft术语的规范资源)

搜索用户返回:

本地化Microsoft产品中的翻译

    English Translation         Product
    Users   Utilisateurs        Windows 7
    Users   des utilisateurs    Windows 7
    Users   Utilisateurs        Windows 8 Modern Voice
    Users   Utilisateurs        Windows 8
    Users   Utilisateurs        Windows 8.1
    USERS   UTILISATEURS        Windows 8.1
    Users   Utilisateurs        Windows 10
    Users   des utilisateurs    Windows 10
    Users   Utilisateurs        Windows 10 Anniversary Update
    users   utilisateurs        Windows 10 Anniversary Update

这表明以下命令可能有效:

icacls C:\FullyAccessibleFolder /grant Utilisateurs:(OI)(CI)F

选项2:从UsersSID(S-1-5-32-545)中检索本地化名称

SID:S-1-5-32-545

名称:用户

说明:内置组。初始安装操作系统后,唯一的成员是Authenticated Users组。当计算机加入域时,“域用户”组将添加到计算机上的“用户”组中。

Windows操作系统中的知名安全标识符

要检索本地化的Users组名:

这个简单的脚本将为您(S-1-5-32-545)提供给定PC上“用户” 组的实际名称:

    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    Set objAccount = objWMIService.Get ("Win32_SID.SID='S-1-5-32-545'")
    Wscript.Echo objAccount.AccountName

将其放入带有vbs扩展名的文件中(假设 usersName.vbs)。

现在运行:

echo Y|for /f "delims=" %i in ('cscript -Nologo usersName.vbs') do cacls foldername /G "%i":F

来源CACLS,Windows 7的完全权限,本地名称WMZ


选项3:将UsersSID与icacls

使用以下命令:

icacls C:\FullyAccessibleFolder /grant *S-1-5-32-545:(OI)(CI)F

来源评论:Harry Johnston


我已经接受了DavidPostill的回答,因为它是以真正的命令行方式完成的,这在使用批处理或PS脚本时非常有用。最后,我实际上使用C#创建了一个小的可执行文件,该可执行文件仅包含一条路径并完全符合我的需要。它不像这里的答案那样可自定义,它需要.NET Framework,但确实非常适合我的特定目的。如果有人感兴趣,这就是我最终使用的C#代码的基础。stackoverflow.com/a/35461832/1639615
Geesh_SO

xcacls似乎是可以下载的脚本。没必要 icacls内置于Windows中,可以完成相同的工作。
哈里·约翰斯顿

@HarryJohnston正确,但是我的答案是显示如何检索...的本地化版本。Users由于我们不需要xacls引用解决方案的一部分,因此我已经弄清了答案。
DavidPostill

@HarryJohnston我还添加了icacls直接使用给您的信用。
DavidPostill

7

您不需要通过名称来指定AD组,而是通过SID号来指定。
对于“ EveryOne”,“域用户”等标准组,存在标准化的SID号,可以在MSDN页面上找到知名的安全标识符(SID)

以下是最常见的相对标识符。

在此处输入图片说明

SID的结构描述如下:

使用标准符号将SID从二进制格式转换为字符串格式时,SID的组件更易于可视化:

SRX-Y1-Y2-Yn-1-Yn

    Component                   Definition

    S                         Indicates that the string is a SID
    R                         Revision level
    X                         Identifier authority value
    Y            A series of subauthority values, where n is the number of values

例如,内置Administrators组的SID以标准化的SID表示法表示为以下字符串:

S-1-5-32-544

该SID具有四个组成部分:

  • 修订级别(1)

  • 标识符授权值(5,NT授权)

  • 域标识符(32,内置)

  • 相对标识符(544,管理员)

安全标识符如何工作


值得指出的是,默认情况下,所有用户都是用户组的一部分。因此,如果您要授予“所有用户帐户的完全访问权限,只需使用SID S-1-5-32-544,然后修改ACL以为该文件或文件夹的组授予所有权限
Ramhound17年

@Ramhound 544是管理员,545是用户。
DavidPostill

@DavidPostill-是的;复制和粘贴错误。
Ramhound

@Ramhound更好。这是我打电话时能做的最好的事情。感谢您的修改。
Tonny

3

如果您喜欢PowerShell脚本,但是在记住SID编号时遇到麻烦:

$acl = Get-Acl .\myfolder
$sid = New-Object System.Security.Principal.SecurityIdentifier ([System.Security.Principal.WellKnownSidType]::BuiltinUsersSid, $null)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule ($sid, 'FullControl', 'ObjectInherit,ContainerInherit', 'None', 'Allow')
$acl.AddAccessRule($rule)
Set-Acl .\myfolder $acl

我知道这看起来像一堆打字,但是这些长标识符是制表符完成的:

  • System.Security.Principal.SecurityIdentifiersecurityi
  • System.Security.Principal.WellKnownSidTypewellknownsi
  • System.Security.AccessControl.FileSystemAccessRulefilesystem

所有这些字符串都是.NET标识符,因此它们不会被本地化。

如果您要使用EveryoneSID,请使用WorldSid代替BuiltinUsersSid。要获取所有WellKnownSidType选项的列表,请参阅MSDN或运行以下命令:

[System.Security.Principal.WellKnownSidType].DeclaredFields | select Name

没有Sid且使用group names?的FileSystemAccessRule
Kiquenet

@Kiquenet我不确定您要问的是什么,但是如果您希望指定人类可读的组名,则该名称将不再与语言无关。如果可以,则可以删除该$sid =行,并用标识该组的字符串替换$sid$rule =行。
本N
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.