Windows 7 - Sammeln der drahtlosen Signalstärke über die Befehlszeile

14245
Beems

Ich möchte die drahtlose Signalstärke (vorzugsweise über dbm oder%) in Windows 7 über die Befehlszeile anzeigen.

Folgendes habe ich ausprobiert:

1) VB-Skript mit MSNdis_80211_ReceivedSignalStrength (funktioniert jedoch nur in Versionen vor Vista)

2) Befehlszeile mit "netsh wlan show interface"

Im Idealfall möchte ich es über einen bestimmten Zeitraum sammeln und mitteln. Ich weiß, dass dies durch eine direkte Befehlszeilenausführung nicht möglich ist. Ich bin also bereit, diese Möglichkeit aufzugeben, wenn ich nur die Signalstärke in Prozent (%) erhalten kann.

2

1 Antwort auf die Frage

1
Beems

Nach vielen internen Konflikten verwendete ich eine Kombination aus VBScript und Befehlszeile. Da es scheinbar keine WMI-Methode gibt, um die Signalstärke zu erfassen, und da ich es vorziehen würde, die Informationen über einen kurzen Zeitraum hinweg zu sammeln und zu mitteln, verwende ich VBScript, um NETSH auszuführen und die Daten abzurufen Ich brauche.

Dies kann absolut schnell geändert werden, um sich endlos zu wiederholen, sodass Sie mit Ihrem Laptop herumlaufen können, um die Signalstärke in verschiedenen Bereichen zu bestimmen (obwohl dies absolut nicht empfehlenswert ist, da weit überlegene Drittanbieter-Softwarepakete vorhanden sind).

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

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 networks mode = bssid Mayank vor 9 Jahren 0
Ihr Befehl zeigt in einigen Szenarien zwar Vorteile, zeigt jedoch alle sichtbaren Netzwerke und nicht die aktuell verbundenen. Die Verwendung meines veröffentlichten VBScript-Befehls mit dem von Ihnen aufgelisteten Befehl funktioniert nicht, da Ihr Befehl möglicherweise eine große Anzahl von Ergebnissen zurückgibt, für die der Code derzeit nicht festgelegt ist. Beems vor 9 Jahren 0
In Bezug auf die erste Zeile unter der "do while" -Deklaration, dh die Zeile "wscript.stdout.write", weiß jemand, warum ich in Bezug auf diese Zeile einen ungültigen Handle-Fehler erhalten würde? Mike Mounier vor 7 Jahren 0
@Mike In diesem Fall müssen Sie insbesondere sicherstellen, dass die Variable "var_dots" definiert ist (derzeit Zeile 4). Beems vor 7 Jahren 0
@Beems Danke für deine Antwort… hilf mir zu verstehen, was genau du sagst, was ich tun soll, da du es in Zeile 4 definiert hast (var_dots = "."). Ich habe das Ganze kopiert / eingefügt, so wie es ist. Mike Mounier vor 7 Jahren 0
@MikeMounier stdout ist nur über cscript, aber wscript zugänglich. Öffnen Sie die Befehlszeile, und geben Sie cscript nameOfYourFile.vbs ein LostInTheCode vor 7 Jahren 1
@LostInTheCode Ausgezeichnet! Die vorige Antwort machte überhaupt keinen Sinn, mich an mich zu richten, da ich nicht der Autor des Codes bin und der Code gezeigt wurde, bevor er meinen Kommentar veröffentlicht hat. Als ich das mehr oder weniger deutlich machte, wurde es mit Stille begrüßt. Ich musste die ganze Zeit nur über 'cscript' anstelle von 'wscript' aufrufen. Vielen Dank und wie in jedem Forum macht die Anwesenheit von Mitgliedern wie Ihnen, die sich darum kümmern, die, die dies nicht tun, zum größten Teil wett. Mike Mounier vor 7 Jahren 0