如何实现开机自动打开移动热点(windows11 24H2)
如何实现开机自动打开移动热点(windows11 24H2)
1.背景
办公室经常需要电脑开热点给手机和平板连接,每次都要手动开启,因此想找脚本实现开机启动移动热点的功能.
2.需求
开机打开移动热点,热点的名称和密码就不用变化,我之前已经手动配置好了.脚本最终实现的效果就跟我手动点了一下移动热点图标一样.
3.步骤
- 3.1 先实现脚本开启热点的功能;
- 3.2 实现脚本开机启动;
4.具体代码
4.1 PowerShell脚本开启移动热点
代码如下,将代码复制到记事本中,脚本另存名称为Open_Hotspot.ps1文件,并将编码设置为UTF-8 BOM格式.
# 本脚本编码为带BOM的UTF-8脚本,避免在不同powershell脚本中输出信息乱码,保存文件时注意选择编码格式
# 检查 PowerShell 版本
$version = $PSVersionTable.PSVersion.Major
if ($version -eq 7) {
Write-Host "此脚本不支持 PowerShell 7,请使用 Windows PowerShell 5 运行" -ForegroundColor Red
exit 1 # 非零退出代码表示异常终止
}
elseif ($version -eq 5) {
Write-Host "正在 Windows PowerShell 5 环境中运行脚本..." -ForegroundColor Green
# 这里是脚本的主要逻辑
}
else {
Write-Host "不支持的 PowerShell 版本:$version" -ForegroundColor Yellow
exit 2
}
# 以下脚本从stackoverflow网站以下问题链接的回复中获取
# https://stackoverflow.com/questions/45833873/enable-windows-10-built-in-hotspot-by-cmd-batch-powershell
# 脚本的功能是切换移动热点的开关,之前已开启就关闭,之前是关闭就开启。
############################################################################################################################################################
# Ben N.'s await for IAsyncOperation:
[Windows.System.UserProfile.LockScreen, Windows.System.UserProfile, ContentType = WindowsRuntime] | Out-Null
Add-Type -AssemblyName System.Runtime.WindowsRuntime
$asTaskGeneric = ([System.WindowsRuntimeSystemExtensions].GetMethods() | ? { $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and $_.GetParameters()[0].ParameterType.Name -eq 'IAsyncOperation`1' })[0]
Function Await($WinRtTask, $ResultType) {
$asTask = $asTaskGeneric.MakeGenericMethod($ResultType)
$netTask = $asTask.Invoke($null, @($WinRtTask))
$netTask.Wait(-1) | Out-Null
$netTask.Result
}
Function AwaitAction($WinRtAction) {
$asTask = ([System.WindowsRuntimeSystemExtensions].GetMethods() | ? { $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and !$_.IsGenericMethod })[0]
$netTask = $asTask.Invoke($null, @($WinRtAction))
$netTask.Wait(-1) | Out-Null
}
#################################################################################################################################################################
$connectionProfile = [Windows.Networking.Connectivity.NetworkInformation, Windows.Networking.Connectivity, ContentType = WindowsRuntime]::GetInternetConnectionProfile()
$tetheringManager = [Windows.Networking.NetworkOperators.NetworkOperatorTetheringManager, Windows.Networking.NetworkOperators, ContentType = WindowsRuntime]::CreateFromConnectionProfile($connectionProfile)
# Be sure to include Ben N.'s await for IAsyncOperation:
# https://superuser.com/questions/1341997/using-a-uwp-api-namespace-in-powershell
# Check whether Mobile Hotspot is enabled
$tetheringManager.TetheringOperationalState
# Start Mobile Hotspot
Await ($tetheringManager.StartTetheringAsync()) ([Windows.Networking.NetworkOperators.NetworkOperatorTetheringOperationResult])

尝试运行脚本
保存脚本之后,手动右键菜单中使用PowerShell运行,没有意外的话,就可以打开移动热点开关了.
如果无法运行,有可能是因为PowerShell脚本运行被系统限制的原因.需要以管理员身份打开powershell终端运行以下命令修改系统策略,
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
设置为RemoteSigned模式,允许运行本地的脚本而不要求数字签名.
另外需要注意的是,这个脚本只能使用PowerShell 5(程序名为powershell.exe)运行,而不支持Powershell 7(程序名为pwsh.exe).
下面我们来自动化这个操作.
4.2 实现脚本开机启动
启动文件夹,一般在以下路径的Startup文件夹下,放入某.exe程序的快捷方式,就可实现该.exe程序的开启启动.
%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup
原理就是电脑在开机的时候以系统设置的默认打开方式运行了一下快捷方式,相当于进行了一次双击,所以对于.exe程序来说就是启动了.
但是如果放入文本文件的快捷方式,就只是以默认的编辑器打开该文本.
对于PowerShell脚本来说,系统是默认以文本格式处理的,所以如果直接将powershell脚本的快捷方式放入startup文件夹,只是打开编辑器编辑,不是执行代码.
因此需要通过bat脚本调用PowerShell脚本的方式中转下, .bat文件的默认打开方式就是运行代码.
将以下代码复制到记事本中,另存为Open_Hotspot.bat,编码为UTF-8 BOM格式的文件.
@echo off
:: 使用bat调用powershell 5运行同目录下的powershell脚本;
powershell -File "%~dp0Open_Hotspot.ps1"
.bat脚本和.ps1脚本放在同一个目录下
└─自动开启移动热点
└─Open_Hotspot.bat
└─Open_Hotspot.ps1
然后将bat脚本右键,发送快捷方式到桌面,再将快捷方式复制到Startup文件夹下.
└─%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup
└─Open_Hotspot.bat.lnk
至此,我们完成了设置,可以重启电脑查看是否达到开启移动热点的效果.
4.3 脚本下载链接
为便于小白操作,将编辑好的脚本下载链接放在下边.下载之后需要自行生成快捷方式,并放到Startup文件夹下.

浙公网安备 33010602011771号