2

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

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

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

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

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

1 ответ1

1

После долгих внутренних разборок я использовал комбинацию VBScript и командной строки. Поскольку, как представляется, методологии WMI для определения уровня сигнала больше не существует, и поскольку я предпочел бы собирать информацию в течение короткого периода времени и усреднять ее, я использую VBScript для выполнения NETSH и извлечения данных. Я нуждаюсь.

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .