Tốt nhất là tạo script Powershell sau và thực hiện đặt schedule task để chạy lại sau một số khoảng thời gian.
# Yêu cầu quyền Administrator
# if (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
# {
# Write-Warning "Script này cần quyền Administrator. Vui lòng chạy PowerShell với quyền Administrator!"
# Break
# }
Add-Type -AssemblyName System.Runtime.WindowsRuntime
# Tìm phương thức AsTask cho Generic
$asTaskGeneric = ([System.WindowsRuntimeSystemExtensions].GetMethods() | Where-Object {
$_.Name -eq 'AsTask' -and
$_.GetParameters().Count -eq 1 -and
$_.GetParameters()[0].ParameterType.Name -eq 'IAsyncOperation`1'
})[0]
# Function đợi kết quả từ Windows Runtime Async Operation
Function Await($WinRtTask, $ResultType) {
try {
$asTask = $asTaskGeneric.MakeGenericMethod($ResultType)
$netTask = $asTask.Invoke($null, @($WinRtTask))
# Đợi task hoàn thành
$completed = $netTask.Wait(30000) # Timeout 30 giây
if (-not $completed) {
throw "Operation timed out after 30 seconds"
}
# Kiểm tra lỗi
if ($netTask.IsFaulted) {
throw $netTask.Exception.InnerException
}
return $netTask.Result
}
catch {
Write-Error "Await error: $($_.Exception.Message)"
throw
}
}
# Function đợi hoàn thành Windows Runtime Async Action
Function AwaitAction($WinRtAction) {
try {
$asTask = ([System.WindowsRuntimeSystemExtensions].GetMethods() | Where-Object {
$_.Name -eq 'AsTask' -and
$_.GetParameters().Count -eq 1 -and
!$_.IsGenericMethod
})[0]
$netTask = $asTask.Invoke($null, @($WinRtAction))
# Đợi task hoàn thành
$completed = $netTask.Wait(30000) # Timeout 30 giây
if (-not $completed) {
throw "Operation timed out after 30 seconds"
}
# Kiểm tra lỗi
if ($netTask.IsFaulted) {
throw $netTask.Exception.InnerException
}
}
catch {
Write-Error "AwaitAction error: $($_.Exception.Message)"
throw
}
}
try {
# Load Windows Runtime assemblies
[Windows.Networking.Connectivity.NetworkInformation, Windows.Networking.Connectivity, ContentType = WindowsRuntime] | Out-Null
[Windows.Networking.NetworkOperators.NetworkOperatorTetheringManager, Windows.Networking.NetworkOperators, ContentType = WindowsRuntime] | Out-Null
# Lấy connection profile
$connectionProfile = [Windows.Networking.Connectivity.NetworkInformation]::GetInternetConnectionProfile()
if ($null -eq $connectionProfile) {
Write-Error "Không tìm thấy kết nối Internet. Vui lòng kiểm tra kết nối mạng của bạn."
Break
}
# Tạo tethering manager
$tetheringManager = [Windows.Networking.NetworkOperators.NetworkOperatorTetheringManager]::CreateFromConnectionProfile($connectionProfile)
# Kiểm tra khả năng tethering
# if ($tetheringManager.TetheringCapability -ne 0) {
# Write-Warning "Hotspot không khả dụng trên thiết bị này. Lý do: $($tetheringManager.TetheringCapability)"
# Break
# }
# Kiểm tra trạng thái hiện tại
if ($tetheringManager.TetheringOperationalState -eq 1) {
Write-Host "Hotspot đang bat! Đang khoi dong lai..." -ForegroundColor Yellow
# Tắt hotspot
$stopResult = Await ($tetheringManager.StopTetheringAsync()) ([Windows.Networking.NetworkOperators.NetworkOperatorTetheringOperationResult])
if ($stopResult.Status -eq 0) {
Write-Host "Da bat lai hotspot thanh cong." -ForegroundColor Green
Start-Sleep -Seconds 2
# Bật lại hotspot
$startResult = Await ($tetheringManager.StartTetheringAsync()) ([Windows.Networking.NetworkOperators.NetworkOperatorTetheringOperationResult])
if ($startResult.Status -eq 0) {
Write-Host "Da bat lai hotspot thanh cong !" -ForegroundColor Green
} else {
Write-Error "Không thể bật lại hotspot. Mã lỗi: $($startResult.Status)"
}
} else {
Write-Error "Không thể tắt hotspot. Mã lỗi: $($stopResult.Status)"
}
}
else {
Write-Host "Hotspot đang tat! Đang bat len..." -ForegroundColor Yellow
# Bật hotspot
$startResult = Await ($tetheringManager.StartTetheringAsync()) ([Windows.Networking.NetworkOperators.NetworkOperatorTetheringOperationResult])
if ($startResult.Status -eq 0) {
Write-Host "Da bat hotspot thanh cong!" -ForegroundColor Green
} else {
Write-Error "Không thể bật hotspot. Mã lỗi: $($startResult.Status)"
}
}
}
catch {
Write-Error "Đã xảy ra lỗi: $($_.Exception.Message)"
Write-Host "`nGợi ý khắc phục:" -ForegroundColor Cyan
Write-Host "1. Chạy PowerShell với quyền Administrator" -ForegroundColor White
Write-Host "2. Kiểm tra xem thiết bị có hỗ trợ Mobile Hotspot không" -ForegroundColor White
Write-Host "3. Đảm bảo có kết nối mạng hoạt động (Ethernet hoặc Wi-Fi)" -ForegroundColor White
Write-Host "4. Kiểm tra Windows Update và driver mạng" -ForegroundColor White
}