Обычно все операции по настройке и выводу информации о сигналах Wi-Fi устройств в системе Windows происходят через окна, то есть графический интерфейс. Сегодня же рассмотрим, как можно применить командную строку PowerShell для отображения такой же и другой информации. И пусть вас не смущает что в большинстве случаев будут использованы вызовы netsh-команд, которые по сути не являются командлетами PowerShell.
По правде говоря материал почти полностью заимствован из журнала "Системный администратор" №11 за 2021-й год у Сергея Болдина. Но подобное я находил и на других ресурсах сети.
Проверка уровня Wi-Fi сигнала
Определить уровень сигнала сети (SSID) графически легко – посмотреть на иконку с полосками. Выполнив несложные команды в среде PowerShell, можно получить “цифровой” результат.
Видимость 3-х полосок на иконке Wi-Fi сигнала говорит о хорошем качестве сигнала (уровень 75 до 100%), 2 полоски – качество среднего уровня (между 50 и 75%), 1 – плохой сигнал (ниже 50 %). Здесь не отображаются значения в виде цифр, зато такое точное значение можно получить с помощью команды:
netsh wlan show interfaces
Если же нужно видеть только значение уровня сигнала, то другую информацию можно не выводить, указав соответствующие параметры:
(netsh wlan show interfaces) -Match '^\s+Signal' -Replace '^\s+Signal\s+:\s+',''
С помощью скрипта PowerShell можно для пользователя выводить всплывающее окно с уведомлением уровня сигнала, например, менее 25%:
$c_level=(netsh wlan show interfaces) -Match '^\s+Signal' -Replace '^\s+Signal\s+:\s+','' | Out-String
If ($c_level.replace('%','') –le 25)
{
Add-Type -AssemblyName System.Windows.Forms
$global:msg = New-Object System.Windows.Forms.NotifyIcon
$path = (Get-Process -id $pid).Path
$msg.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path)
$msg.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon]::Warning
$msg.BalloonTipText = “Уровень Wi-Fi сигнала менее $c_level,
Рекомендуем вернуться к точке доступа!”
$msg.BalloonTipTitle = "Внимание $Env:USERNAME"
$msg.Visible = $true
$msg.ShowBalloonTip(10000)
}
Замечание: рекомендация пользователю вернуться к точке доступа может прозвучать странно ибо ему не всегда известно где же та АР находится.) Тут на ваше усмотрение.
Вывод доступных беспроводных сетей
С помощью команд в консоли PowerShell можно вывести список всех доступных ноутбуку беспроводных сетей с их характеристиками. Несложный вариант отображения списка доступных беспроводных сетей состоит из одной команды netsh с несколькими ключами и параметрами:
netsh wlan show network mode=bssid
Можно пойти дальше и выполнить более сложный вариант – скрипт, который просканирует все доступные Wi-Fi сети, выведет их имена, уровень сигнала, номера каналов, стандарты и представит результат в табличном виде (для наглядного результата мы специально перешли в другое место с большим количеством точек доступа).
Увидеть пароли к Wi-Fi сетям
В ОС Windows пароль для Wi-Fi сети может сохраниться (по желанию пользователя), чтобы потом автоматически подключаться к этой сети без дополнительного запроса на ввод пароля.
С помощью командной строки PowerShell можно вывести не только пароль к текущему беспроводному соединению (как это делается с через графические окна), но и вообще все пароли Wi-Fi сетей, к которым когда-либо подключался ваш ноутбук. При подключении к Wi-Fi сети ОС Windows создает для нее WLAN-профиль, содержащий имя (SSID), пароль (ключ безопасности) и другие параметры для подключения к точке доступа. Windows хранит профили Wi-Fi сетей в каталоге %ProgramData%\Microsoft\Wlansvc\Profiles\Interfaces.
С помощью командной строки можно вывести список WLAN-профилей:
netsh wlan show profile
Чтобы получить информацию по конкретному WLAN-профилю и сохраненный пароль, нужно указать его SSID в командной строке:
netsh wlan show profile “HOUSE_RPT” key=clear
Сохраненный пароль Wi-Fi сети будет указан явно в поле Ключ безопасности.
А если WLAN-профилей много? В этом случае можно вывести список всех беспроводных сетей и их паролей, используя большее количество параметров преобразования и структурирования данных:
(netsh wlan show profiles) | Select-String "\:(.+)$" | %{$name=$_.Matches.Groups[1].Value.Trim(); $_} | %{(netsh
wlan show profile name="$name" key=clear)} | Select-String "Содержимое ключа\W+\:(.+)$" | %{$pass=$_.Matches.Groups[1].Value.Trim(); $_} | %{[PSCustomObject]@{ PROFILE_NAME=$name;PASSWORD=$pass }} | Format-Table –Wrap
Если необходимо иметь пароли к Wi-Fi сетям в быстром доступе, их можно сохранить в тестовый файл. Для этого к предыдущей команде нужно добавить:
| Format-Table -AutoSize | Out-File $env:USERPROFILE\Desktop\All_pass_WiFi.txt
Удаление беспроводной сети
Сохранённый WLAN-профиль можно удалить за ненадобностью. Или в случае когда у знакомой точки доступа изменился пароль. Чтобы удалить (в ОС называется как "забыть") сохраненную Wi-Fi сеть из командной консоли PowerShell, нужно выполнить команду:
netsh wlan delete profile name=”HOUSE_RPT”
Если же требуется удалить сразу все сохранённые Wi-Fi сети, то вместо имени профиля нужно указать символ “*”:
netsh wlan delete profile name=*
И напоследок
Какими бы сложными не казались команды netsh но они отрабатвают стабильнее чем кликанье мышкой. Вот мой пример - моя вторая точка доступа(повторитель) подключается с 5-го раза если кликать в ней кнопку "Connect", но команда
netsh wlan connect name=HOUSE_RPT ssid=HOUSE_RPT interface="Wi-Fi 2"
поднимает соединение с первой попытки! Значения параметров name, ssid и interface вы легко найдете в выводе команд:
netsh wlan show profiles
netsh wlan show networks
netsh wlan show interfaces
Или иногда требуется сбросить адаптер Wi-Fi, т.е. отключить его. А после включить. Тоже можно, но вначале надо узнать индекс вашего адаптера:
Get-NetAdapter -Physical -Name "Wi-Fi*" | fl
Выключить его:
Get-NetAdapter -InterfaceIndex 20 | Disable-NetAdapter
И включить его по описанию, ибо выключенный адаптер индекса не имеет:
Enable-NetAdapter -InterfaceDescription "Broadcom 802.11n Network Adapter"
netsh interface ip show interfaces - покажет индекс любого адаптера.
ReplyDelete