Windows 7 - сбор данных о силе беспроводного сигнала через командную строку

14150
Beems

Я хотел бы видеть уровень беспроводного сигнала (желательно через dbm или%) в Windows 7 через командную строку.

Вот что я попробовал:

1) VBscript с использованием MSNdis_80211_ReceivedSignalStrength (но работает только в версиях до Vista)

2) Командная строка с использованием «netsh wlan show interfaces»

В идеале, я хотел бы собрать это в течение некоторого периода времени и усреднить это. Это, я знаю, невозможно при прямом выполнении командной строки, поэтому я готов отказаться от этой возможности, если смогу просто получить только уровень сигнала в процентах (%).

2

1 ответ на вопрос

1
Beems

After much internal infighting, I utilized a combination of VBScript and command line. Since there doesn't appear to be a WMI methodology to grab the signal strength anymore, and since I'd prefer to collect the information over a short period of time and average it, I'm using VBScript to execute NETSH and pull the data I need.

This could absolutely be quickly modified to repeat endlessly so you could walk around with your laptop to determine signal strength in different areas (although, absolutely not recommended because far superior 3rd-party software packages exist).

====================================================================

dim obj_shell, obj_cmdexectestWLAN, var_line, obj_cmdexec, var_signalstrength, var_testinterval, var_counter, var_dots, var_arraycontents, var_item, var_average, var_multiplier, arr_signalstrength() var_testinterval = 1000 'in milliseconds var_counter = 0 var_dots = "." 'this is for a cheap progress bar set obj_shell = wscript.createobject("WScript.Shell") set obj_cmdexectestWLAN = obj_shell.exec("%comspec% /C netsh wlan show interfaces") var_line = obj_cmdexectestWLAN.stdout.readline() if instr(var_line, "not running") = 0 then function func_getwirelesssignalstrength() set obj_cmdexec = obj_shell.Exec("%comspec% /C netsh wlan show interfaces | FIND ""Signal""") var_line = obj_cmdexec.stdout.readline() var_line = replace(var_line,"Signal : ","") var_line = replace(var_line,"%","") var_line = trim(var_line) if isnumeric(var_line) then func_getwirelesssignalstrength = var_line else func_getwirelesssignalstrength = "Error" end if end function do while var_counter < 10 '0-based. Gives us 10 samples. If you want a longer interval, you can modify both 'var_counter' at the top and this as well wscript.stdout.write(var_dots & chr(13)) var_signalstrength = func_getwirelesssignalstrength() if isnumeric(var_signalstrength) then if var_counter = 0 then redim arr_signalstrength(0) arr_signalstrength(0) = var_signalstrength else redim preserve arr_signalstrength(ubound(arr_signalstrength) + 1) arr_signalstrength(ubound(arr_signalstrength)) = var_signalstrength end if var_counter = var_counter + 1 var_dots = var_dots & "." wscript.sleep var_testinterval else wscript.echo("Error: Non-numeric value received from NETSH. Quitting...") wscript.quit end if loop for each var_item in arr_signalstrength var_arraycontents = var_arraycontents & var_item & "," var_multiplier = cint(var_multiplier) + cint(var_item) next var_average = var_multiplier/var_counter 'wscript.echo("Multiplier:" & var_multiplier & vbcrlf & "Counter:" & var_counter & vbcrlf & "Average:" & var_average & vbcrlf & "Average Rounded:" & round(var_average,2)) 'test region to see our output in more detail wscript.echo("Values Received: " & var_arraycontents) 'test region to see our array contents wscript.echo("Signal Strength Average: " & round(var_average,2)) else wscript.echo("Error: WLAN Service Not Running") wscript.quit end if 
netsh wlan show network mode = bssid Mayank 9 лет назад 0
Хотя это полезно в некоторых сценариях, ваша команда показывает все видимые сети, а не присоединенные в настоящий момент. Использование моего опубликованного VBScript с командой, которую вы перечислили, не будет работать, так как ваша команда может возвращать большое количество результатов, которые в данный момент не обрабатывается кодом. Beems 9 лет назад 0
Что касается первой строки в объявлении «do while», то есть строки «wscript.stdout.write», кто-нибудь знает, почему я получил бы недопустимую ошибку дескриптора в отношении этой строки? Mike Mounier 7 лет назад 0
@Mike In that case, specifically, you would need to make sure you have the "var_dots" variable defined (currently line 4) Beems 7 лет назад 0
@Beems Спасибо за ваш ответ ... помогите мне понять, что именно вы говорите, я должен сделать, так как вы определили это в строке 4 (var_dots = "."). Я скопировал / вставил все, как есть. Mike Mounier 7 лет назад 0
@MikeMounier stdout доступен только cscript, но wscript. Откройте командную строку и введите cscript nameOfYourFile.vbs LostInTheCode 7 лет назад 1
@LostInTheCode Отлично! Предыдущий ответ вообще не имел никакого смысла, поскольку был направлен на меня, поскольку я не являюсь автором кода, и было показано, что код работает до того, как я оставил свой комментарий. Когда я более или менее указывал на это, это было встречено молчанием. И все время все, что мне нужно было сделать, это вызвать его через «cscript» вместо «wscript». Большое спасибо и, как и на каждом форуме, присутствие таких участников, как вы, которым все равно, во многом компенсирует тех, кто этого не делает. Mike Mounier 7 лет назад 0