Уровень сигнала Wi-Fi влияет на качество вашего интернет подключения. В Windows вы можете определить текущее значение уровня сигнала Wi-Fi подключения несколькими способами. Я попробовал разобраться, как с помощью PowerShell определить текущий уровень сигнала Wi-Fi; вывести уведомление, если качество сигнала упало; и вывести список всех доступных беспроводных сетей с их техническими параметрами.
Обычный пользователь Windows 10 может оценить уровень сигнала Wi-Fi для текущего подключения по иконке беспроводной сети в таскбаре. Щелкните по иконке и перед вами появится список доступных Wi-Fi сетей.
У каждой Wi-Fi сети есть иконка с полосками. Чем больше полосок, тем лучше уровень сигнала точки доступа. Три полоски говорят о том, что уровень качества сигнала находится в диапазоне от 75 до 100%. Если у подключения две полоски, значит качество приема сигнала Wi-Fi между 50 и 75%, и т.д.
Вы можете получить более точное значение качества сигнала из командой строки. Все параметры текущего беспроводного подключения можно вывести с помощью команды:
netsh wlan show interfaces
На скриншоте выделен уровень сигнала подключения к Wi-Fi точке доступа (Signal: 72%).
С помощью PowerShell можно получить только значение уровня сигнала в процентах:
(netsh wlan show interfaces) -Match '^\s+Signal' -Replace '^\s+Signal\s+:\s+',''
С помощью простого PowerShell скрипта можно вывести всплывающее уведомление пользователю, если уровень Wi-Fi сигнала стал менее 30%.
$cur_strength=(netsh wlan show interfaces) -Match '^\s+Signal' -Replace '^\s+Signal\s+:\s+','' | Out-String
If ($cur_strength.replace('%','') –le 30)
{
Add-Type -AssemblyName System.Windows.Forms
$global:balmsg = New-Object System.Windows.Forms.NotifyIcon
$path = (Get-Process -id $pid).Path
$balmsg.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path)
$balmsg.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon]::Warning
$balmsg.BalloonTipText = “Уровень Wi-Fi сигнала менее $cur_strength Вернитесь к точке доступа!”
$balmsg.BalloonTipTitle = "Внимание $Env:USERNAME"
$balmsg.Visible = $true
$balmsg.ShowBalloonTip(10000)
}
Такой PowerShell цикл можно запустить в бесконечном цикле и проверять состояние сигнала раз в 10 секунд, или сделать из него службу Windows, чтобы она уведомляла вас об плохом Wi-Fi подключении.
Также с помощью netsh вы можете вывести список всех доступных беспроводных сетей в зоне действия вашего беспроводного адаптера (а не только список сохраненных wi-fi сетей). Для этого используется команда:
netsh wlan show network mode=bssid
Следующий PowerShell скрипт сканирует все доступные Wi-Fi сети (в том числе точки доступа на Windows), выводит их имена, уровень сигнала, каналы (полезно для поиска свободных каналов), и стандарты (802.11n, 802.11ac, 802.11g и т.д.), на которых они работают.
$logs=@()
$date=Get-Date
$cmd=netsh wlan show networks mode=bssid
$n=$cmd.Count
For($i=0;$i -lt $n;$i++)
{
If($cmd[$i] -Match '^SSID[^:]+:.(.*)$')
{
$ssid=$Matches[1]
$i++
$bool=$cmd[$i] -Match 'Type[^:]+:.(.+)$'
$Type=$Matches[1]
$i++
$bool=$cmd[$i] -Match 'Authentication[^:]+:.(.+)$'
$authent=$Matches[1]
$i++
$bool=$cmd[$i] -Match 'Cipher[^:]+:.(.+)$'
$chiffrement=$Matches[1]
$i++
While($cmd[$i] -Match 'BSSID[^:]+:.(.+)$')
{
$bssid=$Matches[1]
$i++
$bool=$cmd[$i] -Match 'Signal[^:]+:.(.+)$'
$signal=$Matches[1]
$i++
$bool=$cmd[$i] -Match 'Type[^:]+:.(.+)$'
$radio=$Matches[1]
$i++
$bool=$cmd[$i] -Match 'Channel[^:]+:.(.+)$'
$Channel=$Matches[1]
$i=$i+2
$logs+=[PSCustomObject]@{date=$date;ssid=$ssid;Authentication=$authent;Cipher=$chiffrement;bssid=$bssid;signal=$signal;radio=$radio;Channel=$Channel}
}
}
}
$cmd=$null
$logs|Out-GridView -Title 'Scan Wifi Script'
Перед вами должна появится вот такая таблица Out-GridView с информацией о параметрах всех доступных беспроводных сетях.
На это скриншоте видно, что в моем окружении популярен 13 канал, поэтому мне не стоит запускать свою точку доступа на этом канале.