使用javascript以管理员身份运行批处理的简单方法

我想导出一种简单可靠的方法来自动提升正在运行的批处理,而无需使用其他线程中建议的额外的VBS文件或提升的快捷方式.通过javascript从批处理调用UAC对话框可确保简短的简单代码.

在对话框中选择“是”,但错误对话框弹出时(在Cmd窗口外部)“ Windows找不到’test.bat’”,下面的脚本自动将用户正确提升为管理员权限.是因为文件路径包含空格吗?如何修复代码或抑制此错误弹出窗口?

@echo off
:: test admin rights
>nul 2>&1 net file
echo '%errorlevel%'
MSHTA "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute("%~nx0", '', '', 'runas', 1);close();"
:: test admin rights
>nul 2>&1 net file
echo '%errorlevel%'
if !errorlevel! equ 0 echo Hello >%temp%\tst.txt
exit /b

解决方法:

我修复了脚本,现在运行良好.根据我的研究,这是在任何地方发布的运行批处理中,在该Cmd会话持续时间内动态地向普通用户管理员授予特权的最简单可靠的方法.

它不需要使用功能,混合批处理和VBS结构,额外的文件或提升的快捷方式.它是Windows固有的.用户可以在:usercode部分添加自己的任务代码,以按批次运行.

@echo off
setlocal EnableDelayedExpansion
:: test and acquire admin rights
cd /d %~dp0 & echo/
if not "%1"=="UAC" (
    >nul 2>&1 net file && echo Got admin rights || (echo No admin rights & ^
MSHTA "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute("%~snx0", 'UAC', '', 'runas', 1);close();"))
:: re-test admin rights
echo/ & >nul 2>&1 net file && (echo Got admin rights & echo/) || (echo No admin rights. Exiting... & goto :end)

:usercode
:: add your code here
echo Performing admin tasks
echo Hello >C:\test.txt

:end
timeout /t 5 >nul
exit /b

相关文章

1.小程序的优缺点优点:不需下载、卸载使用方便缺点:嵌套在...
端口类型-HybridHybrid端口是交换机上既可以连接用户主机,又...
不同vlan同段IP通信LSW1vlan1vlan2vlan3interfaceEthernet0/...
VLAN中access、Trunk和Hybrid三种端口区别:acesss:1、发送...
这系列文章内容包括:STP、RSTP、MSTP、VLAN、LACP、SuperVL...