从提升管理员权限返回至未提升权限

从提升管理员权限返回至未提升权限

使用以下方式运行批处理脚本时管理员权限,如何返回不是行政

我试过这个例子:

@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

但至今没有成功。

那可能吗?

答案1

更新

Windows 版 Sudo

微软已发布该应用程序Sudo.exe,其功能和工作方式与 Linux 的 Sudo 类似。目前,仅适用于 Windows 11 Insider Preview Build 26052 或更高版本。

CMD: where.exe sudo.exe
C:\Windows\System32\sudo.exe

获得提升:

sudo.exe <cmd.exe/ pwsh.exe/ powershell.exe>

返回非提升Exit。更多选项,输入sudo.exe控制台。


之前

返回升高未升高完全,我们可以创建一个任务计划程序并将其用作Chainloader,但此方法需要更多脚本。

方法simple and easy way是使用一个技巧:打开一个提升的新窗口,稳定地保持未提升的旧窗口,然后关闭新窗口。当新窗口运行时,旧窗口仍打开但无法访问并且不显示任何内容。
通过带PowerShell参数调用-Wait
感谢所有提供帮助的人。
下面是一个例子:

@echo off
:Test
fltmc >nul && set $A=y || set $A=
if defined $A (echo I am A.D.M.I.N) else echo I am U.S.E.R
if defined $A (echo Back to User?)  else echo Get Admin?
set ans=& set /p ans=(Enter) Yes (AnyKey) Exit :
if defined ans (if defined $A (TASKKILL /F /IM cmd.exe /T) else exit /b)
if defined $A exit /b
PowerShell Start -Verb RunAs '%~0' -Wait
CLS& goto :Test

相关内容