如何检查当前登录用户是否属于特定组?

4

我正在尝试创建一个批处理脚本,更改Active Directory中用户是否属于特定组。我知道如何使用以下命令获取用户所在的组列表:

whoami \groups

我不知道的是如何查询该列表并根据某个特定组是否在该列表中运行命令。我正在寻找类似于以下内容的东西:

set %groups% whoami \groups
if foo in %groups% echo run

这段代码并不能运行(显然),但是如果我在通过whoami \groups获取到的组列表中有一个名为foo的组,那么预期输出结果是“run”。

1个回答

4

请试试这样做:

@echo off
set "groupToCheck=BUILTIN\Administrators"

whoami /groups | findstr /B "%groupToCheck:\=\\%\>" >nul 2>&1 && (
  echo I'm in %groupToCheck%
) || (
  echo I'm NOT in %groupToCheck%
)

我对这段代码进行了更多的测试。当我将其设置为一个我不属于的组时,它无法响应“我不在notGroup中”。相反,它会响应“我在notGroup中”。 - Brandon Olson
我通过Active Directory和whoami \groups手动确认我不在该组中。 - Brandon Olson
3
我编辑了这个答案,包括在结尾处加上\>来标记单词的结束(这还需要转义groupToCheck中的任何反斜杠)。否则,这将匹配到组的子字符串。例如,如果groupToCheckBUILTIN\Admin,它将匹配到BUILTIN\Administrators,并报告您在BUILTIN\Admin中,即使您实际上不在其中。 - Gabriel Luci
经过我的进一步实验,我发现可以在变量的位置上硬编码要检查的组名称,这样也能正常工作。但是,这会遇到您指出的“Admin”与“Administrators”之间相同的问题吗? - Brandon Olson
这取决于你如何操作。如果你硬编码组名,那么请确保转义任何斜杠(只需输入双斜杠),并在末尾使用\>,就像这样:findstr /B "BUILTIN\\Administrators\>" - Gabriel Luci

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接