如何检查当前的批处理脚本是否具有管理员权限?

我知道如何用runas来调用它自己,但是不知道如何检查管理员权限。我看到的唯一解决方案是粗暴的黑客作业或使用外部程序。好吧,实际上,我不关心它是否是一项骇客的工作,只要它可以在Windows XP和更高版本上运行即可。

最佳答案

问题

AT
The AT command has been deprecated. Please use schtasks.exe instead.

The request is not supported.
%errorLevel%1

研究

因此,我去寻找其他需要提升权限的命令。 Rationallyparanoid.com有一些列表,因此我在当前Windows操作系统(XP和8)的两个相反的极端情况下运行了每个命令,希望找到一个在使用标准权限运行时将拒绝在两个OS上访问的命令。

NET SESSION
FORATWHOAMI

每一个都有其自身的安全性,可用性和可移植性问题。

测试中

我已经独立确认此方法适用于:

  • Windows XP,x86
  • Windows XP,x64
  • Windows Vista,x86
  • Windows Vista,x64
  • Windows 7,x86
  • Windows 7,x64
  • Windows 8,x86
  • Windows 8,x64

(请参阅屏幕截图2)

实施/用法

因此,要使用此解决方案,只需执行以下操作:

@echo off
goto check_Permissions

:check_Permissions
    echo Administrative permissions required. Detecting permissions...

    net session >nul 2>&1
    if %errorLevel% == 0 (
        echo Success: Administrative permissions confirmed.
    ) else (
        echo Failure: Current permissions inadequate.
    )

    pause >nul

如果您很懒惰,可以在这里使用:https://dl.dropbox.com/u/27573003/Distribution/Binaries/check_Permissions.bat

说明

因此,这是我给定实现的基本过程:

@echo offgoto check_Permissions:check_Permissionsnet session >nul 2>&1STDOUTnulSTDERRif %errorLevel% == 0%errorLevel%0else%errorLevel%0

屏幕截图

谢谢@Tilka,将您接受的答案更改为我的答案。 :)