批处理脚本从管理员权限切换至非管理员权限的实现方法问询
批处理脚本从管理员权限切换至非管理员权限的实现方法问询
嘿,我来帮你捋捋这个问题!你想让正在以管理员权限运行的批处理脚本切换回普通用户权限对吧?先看看你写的这段代码为啥没成功——
你原来的代码是这样的:
@echo off :Demo CLS fltmc >nul && (echo Admin& set $A=y) || (echo Not Admin& set $A=) fltmc >nul && (echo Back to Standard?) || (echo Get Admin?) choice /m "Choose:" if %errorlevel%==2 goto :Demo if defined $A (goto :BackSTD) else (goto :GetAdmin) :GetAdmin PowerShell start -verb runas '%~0'& exit /b goto :Demo :BackSTD PowerShell start '%~0'& exit /b goto :Demo
问题出在BackSTD那段的PowerShell start '%~0'——默认情况下,用Start启动程序会继承当前进程的权限上下文,也就是你现在的管理员权限,所以新打开的脚本还是管理员身份,自然没达到切换的目的。
那怎么才能真正切回普通用户权限呢?这里给你几个可行的方案:
方案1:利用Explorer进程启动(最简便)
Explorer.exe一般是以当前登录的普通用户权限运行的,用它来启动脚本就能继承普通权限:
:BackSTD start explorer.exe "%~0" exit /b
方案2:用PowerShell指定以普通用户身份启动
如果不想依赖Explorer,可以用PowerShell明确获取当前用户的凭据来启动脚本(需要输入一次密码):
:BackSTD PowerShell -Command "$user = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name; Start-Process -FilePath '%~0' -Credential (Get-Credential -UserName $user -Message '输入密码以切换至普通用户权限')" exit /b
方案3:用runas命令指定普通用户
也可以直接用系统自带的runas命令,同样需要输入密码:
:BackSTD runas /user:%USERDOMAIN%\%USERNAME% "%~0" exit /b
把你的BackSTD段替换成上面任意一种方案,再运行试试——当脚本以管理员身份运行时,选择切换到普通用户,就能看到新启动的脚本已经是普通权限啦!
备注:内容来源于stack exchange,提问作者Mr.Key7
相关产品推荐
相关产品推荐

