如果用户有权访问,我正在编写一个批处理文件来映射给定帐户的两个驱动器。如果用户没有访问权限,我不希望弹出错误消息,我希望它无声地失败并继续前进。所有帐户都可以访问第一个驱动器,这样一个人就可以了,但只有一些用户可以访问第二个驱动器。
这是实际映射驱动器的命令,变量是不言自明的:
net use h: \\ipaddress\share "%password%" /user:%usern% /persistent:no > nul 2> nul
如果我无论用户是否具有访问权限都运行此操作,则会打开一个单独的窗口,其中显示用户无权访问的错误。如果用户没有访问权限,则net use
不会设置errorlevel
- 它会映射驱动器,但Explorer会在尝试打开时抛出错误。第一个驱动器检查是否正确输入了用户的凭据;如果凭据不正确,则设置errorlevel
。
域控制器未运行AD Web服务,运行该脚本的计算机未安装RSAT。
如何检查给定用户(批处理文件中的提示提供的凭据)是否可以访问驱动器或是AD组的成员,以便我可以确定是否映射在批处理文件中驱动该用户?
答案 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}}