Jef*_*eff 86 windows command-line cmd
从批处理文件中,我想测试我是否使用Administrator /提升权限运行.
选择"以管理员身份运行"时,用户名不会更改,因此不起作用.
如果有一个普遍可用的命令,它没有任何效果,但需要管理权限,那么我可以运行它并检查错误代码以测试权限.到目前为止,我还没有找到这样的命令.我发现的命令似乎返回一个非特定的错误代码,它可以指示任何内容,并且由于各种原因它们很容易出错.
我只关心Windows 7,虽然支持早期的操作系统会很好.
Amb*_*ung 77
这个技巧只需要一个命令:输入net session命令提示符.
如果您不是管理员,则会收到拒绝访问的消息.
来自MS Technet:
如果不使用参数,net session将显示有关与本地计算机的所有会话的信息.
Rus*_*hyo 58
附录:对于Windows 8,这不起作用; 反而看到这个优秀的答案.
在这里找到这个解决方案:http://www.robvanderwoude.com/clevertricks.php
AT > NUL
IF %ERRORLEVEL% EQU 0 (
ECHO you are Administrator
) ELSE (
ECHO you are NOT Administrator. Exiting...
PING 127.0.0.1 > NUL 2>&1
EXIT /B 1
)
Run Code Online (Sandbox Code Playgroud)
假设这不起作用,因为我们正在谈论Win7,你可以在Powershell中使用以下内容,如果这是合适的:
$principal = new-object System.Security.Principal.WindowsPrincipal([System.Security.Principal.WindowsIdentity]::GetCurrent())
$principal .IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)
Run Code Online (Sandbox Code Playgroud)
如果不是(也可能不是,因为您明确提出批处理文件),那么您可以在.NET中编写上述内容,并根据您要使用的批处理文件的结果从exe返回退出代码.
Har*_*ton 25
我喜欢Rushyo建议使用AT,但这是另一种选择:
whoami /groups | findstr /b BUILTIN\Administrators | findstr /c:"Enabled group" && goto :isadministrator
Run Code Online (Sandbox Code Playgroud)
如果您愿意,此方法还允许您区分非管理员和非高级管理员.非提升管理员仍然在组列表中具有BUILTIN\Administrators,但未启用.
但是,这不适用于某些非英语语言系统.相反,试试吧
whoami /groups | findstr /c:" S-1-5-32-544 " | findstr /c:" Enabled group" && goto :isadministrator
Run Code Online (Sandbox Code Playgroud)
(这应该适用于Windows 7,但我不确定早期版本.)
gee*_*_01 18
几乎是其他人之前提出的,但作为一个可以放在批处理命令开头的单线程.(好吧,通常在@echo关闭之后.)
net.exe session 1>NUL 2>NUL || (Echo This script requires elevated rights. & Exit /b 1)
Run Code Online (Sandbox Code Playgroud)
小智 11
在Vista,Win 7及更高版本上执行此操作的最简单方法是枚举令牌组并查找当前的完整性级别(或管理员sid,如果只有组成员很重要):
检查我们是否正在升级:
whoami /groups | find "S-1-16-12288" && Echo I am running elevated, so I must be an admin anyway ;-)
Run Code Online (Sandbox Code Playgroud)
检查我们是否属于本地管理员:
whoami /groups | find "S-1-5-32-544" && Echo I am a local admin
Run Code Online (Sandbox Code Playgroud)
检查我们是否属于域管理员:
whoami /groups | find "-512 " && Echo I am a domain admin
Run Code Online (Sandbox Code Playgroud)
以下文章列出了Windows使用的完整性级别:http://msdn.microsoft.com/en-us/library/bb625963.aspx
这是对哈利答案的略微修改,侧重于提升地位; 我在install.bat文件的开头使用它:
set IS_ELEVATED=0
whoami /groups | findstr /b /c:"Mandatory Label\High Mandatory Level" | findstr /c:"Enabled group" > nul: && set IS_ELEVATED=1
if %IS_ELEVATED%==0 (
echo You must run the command prompt as administrator to install.
exit /b 1
)
Run Code Online (Sandbox Code Playgroud)
这绝对对我有用,原则似乎是合理的; 来自MSFT的Chris Jackson:
当您运行提升时,您的令牌包含一个名为Mandatory Label\High Mandatory Level的ACE.
小智 7
解决方案:
at >nul
if %ErrorLevel% equ 0 ( echo Administrator ) else ( echo NOT Administrator )
Run Code Online (Sandbox Code Playgroud)
在Windows 10下不起作用
对于所有版本的Windows都可以这样做:
openfiles >nul 2>&1
if %ErrorLevel% equ 0 ( echo Administrator ) else ( echo NOT Administrator )
Run Code Online (Sandbox Code Playgroud)
我读了很多(大多数?)响应,然后开发了一个在Win 8.1中适合我的bat文件.以为我会分享它.
setlocal
set runState=user
whoami /groups | findstr /b /c:"Mandatory Label\High Mandatory Level" > nul && set runState=admin
whoami /groups | findstr /b /c:"Mandatory Label\System Mandatory Level" > nul && set runState=system
echo Running in state: "%runState%"
if not "%runState%"=="user" goto notUser
echo Do user stuff...
goto end
:notUser
if not "%runState%"=="admin" goto notAdmin
echo Do admin stuff...
goto end
:notAdmin
if not "%runState%"=="system" goto notSystem
echo Do admin stuff...
goto end
:notSystem
echo Do common stuff...
:end
Run Code Online (Sandbox Code Playgroud)
希望有人发现这个有用:)
| 归档时间: |
|
| 查看次数: |
105567 次 |
| 最近记录: |