权限的获取
- 我自己写了几个程序,涉及到服务的自动化控制和代理控制,在语言内实现这几个服务的控制是比较难的,所以就用批处理写好了脚本,要用直接调用一下就行了,但是出现了权限的问题
- 有些脚本中的命令需要管理员权限,导致每次打开bat文件都会被提示以管理员启动cmd,导致调用的过程就很难受,但事实上有两种办法可以解决这个问题
- 方法1:bat脚本获取管理权限
@echo off&color 17
if exist "%SystemRoot%\SysWOW64" path %path%;%windir%\SysNative;%SystemRoot%\SysWOW64;%~dp0
bcdedit >nul
if '%errorlevel%' NEQ '0' (goto UACPrompt) else (goto UACAdmin)
:UACPrompt
%1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
exit /B
:UACAdmin
cd /d "%~dp0"
echo 当前运行路径是:%CD%
echo 已获取管理员权限
不管后面要干什么,脚本开头加入这段代码就可以以管理员启动了
- 方法2:把bat文件打包成exe并设置exe只能以管理员的身份启动的属性(推荐)
- 这里使用Bat_To_Exe_Converter来实现bat转exe
- 网上下好程序后,不用安装直接打开,先将菜单栏的language设置为中文再说🤔
- 点击右方的uac选项:需要管理员权限,这样转换成的exe每次启动时就会自动以管理员身份运行了
- 软件还有一些其他的生成选项,比如密码保护,写入开发者信息,加壳,是否输出到cmd等
ip代理控制
@echo off
for /f "tokens=1,2,* " %%i in ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable ^| find /i "ProxyEnable"') do (set /A ProxyEnableValue=%%k)
if %ProxyEnableValue% equ 0 (
echo offed
echo=
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f >nul 2>nul
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /d "代理服务器ip:服务端口" /f >nul 2>nul
echo opening...
) else if %ProxyEnableValue% equ 1 (
echo opened
echo=
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f >nul 2>nul
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /d "" /f >nul 2>nul
echo closing
)
pause>nul
- 在代理开启时运行脚本会自动关闭代理,在代理打开后运行脚本会自动关闭代理
- 把代理服务器ip和服务端口改成你拥有的即可
dns代理
- 注意:因为dns代理控制需要管理员权限,所以默认加入提权代码,功能实现代码只有最后一句
- 以下脚本实现dns的代理开启
@echo off&color 17
if exist "%SystemRoot%\SysWOW64" path %path%;%windir%\SysNative;%SystemRoot%\SysWOW64;%~dp0
bcdedit >nul
if '%errorlevel%' NEQ '0' (goto UACPrompt) else (goto UACAdmin)
:UACPrompt
%1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
exit /B
:UACAdmin
cd /d "%~dp0"
echo 当前运行路径是:%CD%
echo 已获取管理员权限
netsh interface ip set dns "网络适配器名字" static 你的dns代理服务器ip
- 需要将dns代理服务器ip填入"你的dns代理服务器ip",还需填入网络适配器名字,比如wifi默认是WLAN,宽带默认是本地连接
- 以下脚本实现dns的代理关闭
@echo off&color 17
if exist "%SystemRoot%\SysWOW64" path %path%;%windir%\SysNative;%SystemRoot%\SysWOW64;%~dp0
bcdedit >nul
if '%errorlevel%' NEQ '0' (goto UACPrompt) else (goto UACAdmin)
:UACPrompt
%1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
exit /B
:UACAdmin
cd /d "%~dp0"
echo 当前运行路径是:%CD%
echo 已获取管理员权限
netsh interface ip set dns "WLAN" dhcp
- 需要填入网络适配器名字,比如wifi默认是WLAN,宽带默认是本地连接
- 这俩脚本因为编码的问题,中文显示出来可能是乱码
- 至于dot和doh的控制,,,,呵呵🙃