【问题标题】:How to get possible ACL roles/rights on a folder using CMD?如何使用 CMD 获取文件夹上可能的 ACL 角色/权限?
【发布时间】:2016-10-19 09:08:04
【问题描述】:

我想知道如何使用 cmd 获取文件夹的可能权限?

我会尝试更多地解释我的需求,以便您理解我的问题:

我正在使用 icacls 更改 MyFolder 上的 ACL。

我正在使用这样的命令:

icacls "%ProgramFiles(x86)%\MyFolder" /grant:r Administrators:F

或

icacls "%ProgramFiles(x86)%\MyFolder" /grant:r Users:(OI)(CI)F /t /c

问题是,如果我在法国计算机上运行它,它会给我一个类似的认可错误:“此工作站和主域之间的信任关系失败”......

在进行了一些测试后,我了解到问题在于我使用的是管理员并且我必须使用管理员(在法语 Windows 上运行我的脚本时)。

“用户”也是如此,我应该在命令中使用“Utilisateurs”而不是“用户”,这样它才能正常工作。

我需要知道windows是否使用了一个变量来帮助我进行本地化,使用cmd自动获取角色,用这个变量替换“Administrators”,“Users”,这样我的代码就可以工作了任何 Windows 无论是什么语言...

我需要的是这样的:

icacls "%ProgramFiles(x86)%\MyFolder" /grant:r %Admin%:F


icacls "%ProgramFiles(x86)%\MyFolder" /grant:r %Users%:F

这样 %Admin% 将在英语计算机上由管理员自动替换,在法语计算机上由管理员自动替换,依此类推。

我实际使用的完整语法是:

icacls "%ProgramFiles(x86)%\MYFOLDER" /grant:r Administrators:F /grant:r SYSTEM:F /grant Users:(OI)(CI)F /t /c

【问题讨论】:

    标签: batch-file cmd scripting localization acl


    【解决方案1】:

    您可以使用well known SID string constants

    icacls "%ProgramFiles(x86)%\MyFolder" /grant:r *BA:F
    

    如果名称需要用于其他用途,那么您可以向 WMI 询问所需信息

    @echo off
        setlocal enableextensions disabledelayedexpansion
    
        for /f "tokens=2 delims==" %%a in ('
            wmic    path WIN32_UserAccount
            where   ( 
                        LocalAccount^="True" 
                        And SID Like "S-1-5-21-%%-500"
                    ^)
            get Name /value
        ') do for /f delims^=^ eol^= %%b in ("%%a") do set "adminName=%%b"
    
        echo Local administrator account = [%adminName%]
    
    
        for /f "tokens=2 delims==" %%a in ('
            wmic    path WIN32_Group
            where   (
                        SID Like "S-1-5-32-544"
                    ^)
            get     Name /value
        ') do for /f delims^=^ eol^= %%b in ("%%a") do set "adminGroup=%%b"
    
        echo Local administrators group  = [%adminGroup%]
    
    
        for /f "tokens=2 delims==" %%a in ('
            wmic    path WIN32_Group
            where   (
                        SID Like "S-1-5-32-545"
                    ^)
            get     Name /value
        ') do for /f delims^=^ eol^= %%b in ("%%a") do set "usersGroup=%%b"
    
        echo Local users group           = [%usersGroup%]
    

    【讨论】:

    • 感谢您的帮助....任何其他方法可以通过 cmd 获取值 Administrator 或 Administrateur 并放入变量?您的回答可能对 icacls 示例有所帮助,但它并不能完全回答我的问题,即我是否可以根据本地化获得角色的价值……您是否有与“BA”相等的东西,可以让我做某事比如:echo %BA% 并在英语计算机上获取“Administrator”,在法语计算机上获取“Administrateur”?
    • 非常感谢 MC ND,我会尝试两种方法并告诉您结果,我也需要系统,请您将其添加到上面的脚本中吗?它可能会帮助我并帮助其他有一天会阅读您的帖子的人。顺便问一下,你拿到 SID 了吗?有任何微软链接吗?还是根据您的经验?为了使 thinkgs 清晰,这正是我正在使用的行,这就是为什么我需要管理员、系统和用户 icacls "%ProgramFiles(x86)%\MYFOLDER" /grant:r Administrators:F /grant:r SYSTEM:F /grant用户:(OI)(CI)F /t /c 再次感谢 MC ND
    • @JustGreat,我没有看到任何不能使用SYSTEM 来引用本地系统的语言环境。您是否尝试过并遇到错误?您可以运行wmic sysaccount where sid='S-1-5-18' get name,sid 来查看帐户名称。 SID 编号以与 SID 字符串相同的方式记录(例如KB243330)。
    • 我唯一尝试并得到错误的是整个语法:icacls "%ProgramFiles(x86)%\MYFOLDER" /grant:r Administrators:F /grant:r SYSTEM:F /grant Users :(OI)(CI)F /t /c 当我收到错误并知道它与法语版本的 Windows 有关时,我知道我必须通过管理员等更改管理员......我认为 SYTEM 应该是也被 SYSTEME 取代,但我可能错了,因为我没有单独尝试过 SYSTEM....会试一试,让你知道
    • @ MC ND,我刚刚进行了测试,我向您确认问题不是系统,而是用户...系统在法语 Windows 上运行,但用户无法运行,应该替换为实用主义者。无论如何,非常感谢您的帮助,我将测试您提供的两种解决方案,并让您知道现在是否一切正常。
    猜你喜欢
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 2018-07-06
    • 2013-09-09
    相关资源
    最近更新 更多