【问题标题】:How to check if a user is an administator? [duplicate]如何检查用户是否是管理员? [复制]
【发布时间】:2013-04-12 02:56:32
【问题描述】:

由于我经常使用批处理脚本,我花费了大量时间在网上搜索纯批处理实现,不依赖于错误级别读取,以检查管理员权限当前或指定的用户。

如何检查用户是否为管理员?

注意:这个问题不是重复的,因为我不想依赖错误级别的读数。

【问题讨论】:

  • 我想我有一个脚本在工作,用一个班轮检查管理员权限。如果我找到它,我会在早上发布答案。我认为这类似于检查使用 icacls 读取 system32 权限的通过或失败。
  • @rojo:期待您的回答! :)
  • @Christian.K:我一直在寻找一种通用且非单一的命令/错误级别依赖的解决方案,该解决方案仅以批处理方式编写......

标签: batch-file cmd


【解决方案1】:

没有找到不尝试将文件写入系统目录或依赖errorlevel 的批处理脚本,我编写了以下脚本以在其他脚本中使用或作为独立工具使用。

您可以更改代码以在脚本中工作,或将用户名传递给程序以确定用户是否为管理员。如果没有指定用户名,程序会检查当前用户的管理员身份。

@echo off
setlocal EnableDelayedExpansion
if "%~1" == "" (set user=%username%) ELSE (set user=%~1)
net user %user% | find "Local Group Memberships">temp.tmp
for /f %%a in ('findstr /i "Administrators" temp.tmp') do (
    echo.
    echo %user% is Admin...
    echo.
    set isadmin=y
    del temp.tmp
    pause
    goto:eof
)
echo.
echo %user% is not Admin...
echo.
set isadmin=n
del temp.tmp
pause
goto:eof

【讨论】:

  • @Danny Beckett:感谢您的更正!
  • 没问题!欢迎来到堆栈溢出! :) 请记住,将您的问题和答案分开;)
  • @Danny Beckett:谢谢!我会尽力而为。 :)
  • 对不起。您应该将此代码放在“这就是我现在拥有的”下的问题中;否则,可能会被误认为是答案! (如果他/她已经有了答案,为什么还要发布问题?)
  • @Aacini:好吧,我出于礼貌向使用批处理的其他人发布了这个,因为我找不到批处理实现来确定用户是否是管理员。当您发布问题时,您可以选中“回答您自己的问题”复选框...
【解决方案2】:

有一种简单的方法可以检查管理员权限。只需使用 OPENFILES 命令并检查状态。它需要管理员权限,因此您可以将输出通过管道传输到 nul 并检查结果。我建议您使用 2>nul ,因为 2012 Server 和 Windows 8 返回 ERRORLEVEL 0 但输出“错误:无法检索数据”。这对我来说似乎是错误的(没有错误;但仍然是错误消息),但是...

OPENFILES >nul 2>nul
IF ERRORLEVEL 1 (
   ECHO.Right click on this file and select 'Run as administrator'.
   PAUSE
   GOTO :eof
   )

【讨论】:

  • 这似乎是一个有效的答案,并且不会像我的脚本那样创建临时文件...
  • 这看起来很整洁,但我担心它可能会对启用了“维护对象列表”标志的繁忙系统造成性能影响。 (至少我不会冒险)
  • 我在输入 bat 文件时会执行一次...不是每次需要管理员的操作都执行一次。所以我不认为有任何明显的性能影响。
猜你喜欢
  • 1970-01-01
  • 2018-02-02
  • 2022-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
相关资源
最近更新 更多