检查用户是否可以从命令提示符

时间:2015-11-09 17:09:09

标签: windows batch-file command-prompt

如果用户有权访问,我正在编写一个批处理文件来映射给定帐户的两个驱动器。如果用户没有访问权限,我不希望弹出错误消息,我希望它无声地失败并继续前进。所有帐户都可以访问第一个驱动器,这样一个人就可以了,但只有一些用户可以访问第二个驱动器。

这是实际映射驱动器的命令,变量是不言自明的:

net use h: \\ipaddress\share "%password%" /user:%usern% /persistent:no > nul 2> nul

如果我无论用户是否具有访问权限都运行此操作,则会打开一个单独的窗口,其中显示用户无权访问的错误。如果用户没有访问权限,则net use 不会设置errorlevel - 它会映射驱动器,但Explorer会在尝试打开时抛出错误。第一个驱动器检查是否正确输入了用户的凭据;如果凭据不正确,则设置errorlevel

域控制器未运行AD Web服务,运行该脚本的计算机未安装RSAT。

如何检查给定用户(批处理文件中的提示提供的凭据)是否可以访问驱动器是AD组的成员,以便我可以确定是否映射在批处理文件中驱动该用户?

1 个答案:

答案 0 :(得分:0)

我能够弄清楚这一点。首先,获取用户帐户的可分辨名称并将其存储在变量中。 dsquery user用于实现此目的。

for /f "tokens=* USEBACKQ" %%f in (`dsquery user -samid %usern%`) do (
    set DN=%%f
)

接下来,使用dsget user列出用户所属的组并将其传递给文件。

dsget user %DN% -memberof > tmp.txt

接下来,使用findstr在文件中搜索组的名称。如果找不到字符串,findstr会将errorlevel设置为1,如果找到,则0设置为nul。输出通过管道传输到findstr /c:"H DRIVE MAPPING" tmp.txt > nul 2> nul ,以防止在提示中显示任何内容。

del

由于设置了errorlevel,这是可能的。 errorlevel也设置errorlevel,因此必须在删除文件之前检查if errorlevel 1 ( echo not in group del tmp.txt exit ) echo in group del tmp.txt 的值

{{1}}