使用以下方式运行批处理脚本时管理员权限,如何返回不是行政?
我试过这个例子:
@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