Batch file 如何检查当前登录的用户是否在特定组中?

Batch file 如何检查当前登录的用户是否在特定组中?,batch-file,active-directory,Batch File,Active Directory,我正在尝试创建一个批处理脚本,用于更改用户是否在Active Directory的特定组中。我知道如何通过这一行获取用户所在组的列表: whoami \groups 我不知道的是如何查询该列表,并根据某个组是否在该列表中运行命令。我正在寻找以下线索: set %groups% whoami \groups if foo in %groups% echo run 这不会运行(显然),但如果名为foo的组在whoami\groups获得的组列表中,我希望输出为“run”: @echo off s

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

whoami \groups
我不知道的是如何查询该列表,并根据某个组是否在该列表中运行命令。我正在寻找以下线索:

set %groups% whoami \groups
if foo in %groups% echo run
这不会运行(显然),但如果名为foo的组在
whoami\groups

获得的组列表中,我希望输出为“run”:

@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%
)

我在这段代码上运行了更多的测试。当我将它设置为一个我不属于的组时,它不会以“我不在该组”来响应。相反,它的响应是“我不在组中”。我通过Active Directory和whoami\groups手动确认我不在组中。我编辑了此答案,将
\>
包含在末尾,以标记单词的结尾(这还需要在
组中转义任何反斜杠以检查
)。否则,这将与组的子字符串匹配。例如,如果
groupToCheck
BUILTIN\Admin
,它将与
BUILTIN\Administrators
匹配,并会报告您在
BUILTIN\Admin
中,即使您不是。在我自己进行了更多实验之后,我发现可以用硬编码组名来代替变量进行检查,而且效果很好。这是否会遇到与您指出的管理员与管理员相同的问题?这取决于您如何做到这一点。如果您硬编码组名,请确保转义任何斜杠(只需放入双斜杠),并在末尾使用
\>
,如下所示:
findstr/B“BUILTIN\\Administrators\>”