Internet Bandbreite per Skript ermitteln
Systeme: aktuell Win XP, später Win7, Verbindung per UMTS
Hallo zusammen,
für unseren Außendienst benötigen wir einfache Möglichkeit, die aktuelle Internet Bandbreite (spez. Downloadrate) zu ermitteln.
Ca. 90% der User verwenden UMTS und haben halt leider nicht immer 3G zur Verfügung.
Leider achten sie auch nicht immer drauf, was sie aktuell zur Verfügung haben.
Da hagelt es dann leider häufiger "böse" Anrufe, das ein Datenabgleich oder Suftwareupdate mal wieder länger dauert.
Daher ist gewünscht, das der User eine Art Hinweisfenster erhält, bevor er eine VPN-Verbindung aufbaut.
Nicht gewünscht ist, das der Mitarbeiter auf irgendeine Webseite geht und einen "Speedtest" durchführt oder irgendwelche zusätzlichen Programme aufrufen muss.
IST-Zustand: aktuell wird eine Verknüpfung auf dem Desktop (.CMD) aufgerufen, die die VPN-Verbindung öffnet, seine Netzlaufwerke mappt, nach Updates guckt und andere Dinge.
SOLL-Zustand: das Ergebnis soll ein Skript sein, das z.Bsp. von unserem eigenen Webserver eine Datei lädt und die Downloadrate ermittelt.
Der Mitarbeiter erhält dann eine Meldung, das z.Bsp. die aktuelle Verbindung zu langsam ist, um einen Datentransfer zu machen o.ä.
ANSATZ: mit WGet habe ich schon ein paar Tests gemacht und ich sehe auch brauchbare Ergebnisse.
Das diese keine 100%ige Aussagekraft haben, ist uns durchaus bwusst.
Erstaunlicherweise kommen die Ergebnisse recht nah an die Realität ran.
Ich habe das Ergebnis in eine Log.txt geschrieben und die Zeile auch mit findstr ausgelesen.
Nur komm ich da nicht weiter....
Vielleicht kennt ja jemand eine Möglichkeit (.cmd, .vbs, o.ä.), wie man sowas realisieren könnte.
Hallo zusammen,
für unseren Außendienst benötigen wir einfache Möglichkeit, die aktuelle Internet Bandbreite (spez. Downloadrate) zu ermitteln.
Ca. 90% der User verwenden UMTS und haben halt leider nicht immer 3G zur Verfügung.
Leider achten sie auch nicht immer drauf, was sie aktuell zur Verfügung haben.
Da hagelt es dann leider häufiger "böse" Anrufe, das ein Datenabgleich oder Suftwareupdate mal wieder länger dauert.
Daher ist gewünscht, das der User eine Art Hinweisfenster erhält, bevor er eine VPN-Verbindung aufbaut.
Nicht gewünscht ist, das der Mitarbeiter auf irgendeine Webseite geht und einen "Speedtest" durchführt oder irgendwelche zusätzlichen Programme aufrufen muss.
IST-Zustand: aktuell wird eine Verknüpfung auf dem Desktop (.CMD) aufgerufen, die die VPN-Verbindung öffnet, seine Netzlaufwerke mappt, nach Updates guckt und andere Dinge.
SOLL-Zustand: das Ergebnis soll ein Skript sein, das z.Bsp. von unserem eigenen Webserver eine Datei lädt und die Downloadrate ermittelt.
Der Mitarbeiter erhält dann eine Meldung, das z.Bsp. die aktuelle Verbindung zu langsam ist, um einen Datentransfer zu machen o.ä.
ANSATZ: mit WGet habe ich schon ein paar Tests gemacht und ich sehe auch brauchbare Ergebnisse.
Das diese keine 100%ige Aussagekraft haben, ist uns durchaus bwusst.
Erstaunlicherweise kommen die Ergebnisse recht nah an die Realität ran.
Ich habe das Ergebnis in eine Log.txt geschrieben und die Zeile auch mit findstr ausgelesen.
Nur komm ich da nicht weiter....
Vielleicht kennt ja jemand eine Möglichkeit (.cmd, .vbs, o.ä.), wie man sowas realisieren könnte.
Please also mark the comments that contributed to the solution of the article
Content-ID: 173764
Url: https://administrator.de/contentid/173764
Printed on: December 2, 2024 at 17:12 o'clock
18 Comments
Latest comment
Aloha,
du hast also schon eine passende Möglichkeit und kommst nicht weiter, nun dann poste doch mal dein bisheriges Skript (bitte mit -Tags) und beschreibe dazu, was nicht läuft oder was noch zusätzlich geschehen sollte.
Das wäre m.M.n. momentan die sinnvollste Variante ... ausgenommen, bastla & Co. KG zaubern wieder unbekannte tools herbei, die das auf der cmd-Ebene ebenso erledigen ^_^
greetz André
P.S.: Ich persönlich mag ja keine crossposter ...
du hast also schon eine passende Möglichkeit und kommst nicht weiter, nun dann poste doch mal dein bisheriges Skript (bitte mit -Tags) und beschreibe dazu, was nicht läuft oder was noch zusätzlich geschehen sollte.
Das wäre m.M.n. momentan die sinnvollste Variante ... ausgenommen, bastla & Co. KG zaubern wieder unbekannte tools herbei, die das auf der cmd-Ebene ebenso erledigen ^_^
greetz André
P.S.: Ich persönlich mag ja keine crossposter ...
Aloha,
Nun, eine Möglichkeit wäre z.B. etwa so:
Momentan wird nach Datum und Uhrzeit (nur Stunden und Minuten) gesucht, da die Sekunden beim Ausführen des Batches sich unterscheiden können / werden zu dem Wert in der speed.txt, ich denke eine Minutenüberschreitung dürfte relativ ausgeschlossen sein, wenn beides in einem Zug abläuft.
Ich habe die Meldung einfach mal als VBS gemacht, damit der User eine Popupmeldung hat, es ginge auch per
Sofern
greetz André
was hat das mit Crossposter zu tun, wenn man einfach auf mehrere Resourcen zurückgreifen kann?
Das ist für mich so, als wenn ich nur bei einem einzigen Händler ein Angebot einhole statt bei mehreren.
Crossposting aber egal ...Das ist für mich so, als wenn ich nur bei einem einzigen Händler ein Angebot einhole statt bei mehreren.
Nun, eine Möglichkeit wäre z.B. etwa so:
@echo off & setlocal
set "Datei=E:\Skripte\speed.txt"
set "M=%temp%\message.vbs"
if not exist M >%M% echo MsgBox "Ihre Verbindung ist zu langsam!", vbExclamation,"Bandbreite ungenügend"
set "Datum=%date:~-4%-%date:~3,2%-%date:~0,2%"
for /f "tokens=2 delims=()" %%s in ('findstr /c:"%Datum% %time:~0,5%" "%Datei%"') do set "speed=%%s"
set "wert=%speed: KB/s=%"
if %wert% lss 500 cscript //nologo %M%
pause
goto :eof
Momentan wird nach Datum und Uhrzeit (nur Stunden und Minuten) gesucht, da die Sekunden beim Ausführen des Batches sich unterscheiden können / werden zu dem Wert in der speed.txt, ich denke eine Minutenüberschreitung dürfte relativ ausgeschlossen sein, wenn beides in einem Zug abläuft.
Ich habe die Meldung einfach mal als VBS gemacht, damit der User eine Popupmeldung hat, es ginge auch per
if %wert% lss 500 (
NET SEND %computername% Ihre Verbindung ist zu langsam,^
die Bandbreite betraegt momentan nur %speed%
)
net send
aktiviert ist, gut oben müsste Windows Scripting Host auch aktiv sein (default) oder du lässt es nur als echo im cmd laufen aber wer beachtet das schon ...greetz André
Hallo Iwan, André
ich persönlich würde folgenderweise vorgehen um Speed und Einheit zu ermitteln: (getestet, hat funktioniert)
- oder -
Wie du dann weiter vorgehen willst, wenn du diese beiden Daten hast, bleibt dir überlassen. Von VBS hab' ich keine Ahnung und net send halte ich für nicht die beste Lösung.
Gruß
Edit: Ich hab' die Datei einfach mal kb.txt benannt - hier kannst du natürlich noch eleganter mit Variablen o.ä. vorgehen. Insgesamt geht das ganze bestimmt eleganter und schlanker; leider nicht mit meiner Erfahrung (;
Edit2: Etwas schlankere Alternative
ich persönlich würde folgenderweise vorgehen um Speed und Einheit zu ermitteln: (getestet, hat funktioniert)
for /f "tokens=2 delims=() skip=4" %%a IN ('type kb.txt') DO CALL :WEITER "%%a"
:WEITER
for /f "tokens=1* delims= " %%a IN (%1) DO (SET rate=%%a & SET einh=%%b)
ECHO Rate: %rate% - %einh%
for /f "tokens=2 delims=() skip=4" %%a IN ('type kb.txt') DO (
for /f "tokens=1* delims= " %%b IN ("%%a") DO (SET rate=%%b & SET einh=%%c)
)
Wie du dann weiter vorgehen willst, wenn du diese beiden Daten hast, bleibt dir überlassen. Von VBS hab' ich keine Ahnung und net send halte ich für nicht die beste Lösung.
Gruß
Edit: Ich hab' die Datei einfach mal kb.txt benannt - hier kannst du natürlich noch eleganter mit Variablen o.ä. vorgehen. Insgesamt geht das ganze bestimmt eleganter und schlanker; leider nicht mit meiner Erfahrung (;
Edit2: Etwas schlankere Alternative
Aloha,
aha, lieber zwei Schleifen hatte ich auch erst im Sinn aber hier ... meh zu viel des Guten, statt ein kurzes Ersetzen *gg* niedriger als KB/s wird's wohl nicht und höher hat der TE ja bereits ausgeschlossen und was machst du, wenn die Textdatei nicht überschrieben wird, sondern immer hinten ran?
Also ich weiß ja nicht
greetz André
aha, lieber zwei Schleifen hatte ich auch erst im Sinn aber hier ... meh zu viel des Guten, statt ein kurzes Ersetzen *gg* niedriger als KB/s wird's wohl nicht und höher hat der TE ja bereits ausgeschlossen und was machst du, wenn die Textdatei nicht überschrieben wird, sondern immer hinten ran?
skip=4
, hm, das muss er dann auch anpassen und erst einmal abzählen.Also ich weiß ja nicht
greetz André
Hey André,
mir ging's nicht darum, deine Version zu ersetzen, lediglich wollte ich einen zweiten Vorschlag, der auch auf die Einheit eingeht, darstellen.
Klar, falls die Datei nicht überschrieben, sondern die aktuellen Werte angehängt werden, würde man mit meiner Variante dumm da stehen (das Skip ist übrigens, zumindest kann ich das in Hinblick auf die gelieferten Daten sagen, nicht notwendig. Es sollte das ganze nur etwas schneller machen).
Wie würdest du den String auseinanderziehen ohne zweite Schleife, bzw., ist das überhaupt möglich?
Gruß
mir ging's nicht darum, deine Version zu ersetzen, lediglich wollte ich einen zweiten Vorschlag, der auch auf die Einheit eingeht, darstellen.
Klar, falls die Datei nicht überschrieben, sondern die aktuellen Werte angehängt werden, würde man mit meiner Variante dumm da stehen (das Skip ist übrigens, zumindest kann ich das in Hinblick auf die gelieferten Daten sagen, nicht notwendig. Es sollte das ganze nur etwas schneller machen).
Wie würdest du den String auseinanderziehen ohne zweite Schleife, bzw., ist das überhaupt möglich?
Gruß
Hallo Terence-Chill und willkommen im Forum!
- wobei ich mich allerdings, wie Skye, nicht auf die Zeilenanzahl verlassen würde - daher eher:
Grüße
bastla
Wie würdest du den String auseinanderziehen ohne zweite Schleife
Etwa so:for /f "skip=4 tokens=3-4 delims=() " %%a IN ('type kb.txt') DO SET /a rate=%%a & SET "einh=%%b"
for /f "tokens=3-4 delims=() " %%a IN ('findstr "%date:~-4%-%date:~-7,2%-%date:~-10,2%" kb.txt') DO SET /a rate=%%a & SET "einh=%%b"
bastla
Aloha bastla,
"
Aber auch in deiner Variante: Wenn die Datei nur vergrößert wird, statt neu beschrieben, läuft das nicht ganz so wie gewollt, daher hatte ich noch die Stunde-Minute-Suche mit eingebaut aber ich schätze, die Datei wird wahrscheinlich eh jedes Mal neu überschrieben, keine Ahnung wie
greetz André
"
delims=()
" ... hm, ich hatte mich zwar so oder so am Anfang auf die Klammer eingeschossen, weil sie mein Blickfang war, wollte allerdings dann doch tokens=3-4
verwenden aber glaubst du, heute lief irgendwas? Ich hatte natürlich den Fehler gemacht und "delims= ()
" gesetzt *pfeif* und mich dann doch wieder meiner Arbeit gewidmet, statt das Leerzeichen im Delimiter ans Ende zu setzen *tärä* - so ist das mit dem Licht, manchmal brennt es ...Aber auch in deiner Variante: Wenn die Datei nur vergrößert wird, statt neu beschrieben, läuft das nicht ganz so wie gewollt, daher hatte ich noch die Stunde-Minute-Suche mit eingebaut aber ich schätze, die Datei wird wahrscheinlich eh jedes Mal neu überschrieben, keine Ahnung wie
wget
das handhabt Den Umweg mit der Ausgabe über .VBS finde ich persönlich auch nicht so prickelnd.
Frag' mal den Enduser, der keine Lust hat, in der Konsole Plaintext zu lesen Ohne Popup mit Klick-Mich kriegen die meisten doch gar nix wirklich mit.mir ging's nicht darum, deine Version zu ersetzen, lediglich wollte ich einen zweiten Vorschlag, der auch auf die Einheit eingeht, darstellen.
Aye, war mir schon klar aber den Vorschlag hatte ich extra ausgelassen greetz André
Hallo Iwan!
ohne das Drumherum ausführen) - sollte es mehrere Zeilen der Art
geben, werden nach der Schleife die Werte der letzten passenden Zeile in den Variablen stehen ...
Grüße
bastla
Damit sucht er nach jedem Eintrag in der Datei, richtig?
Nach jedem Eintrag mit dem heutigen Datum (Du kannst ja testweisefindstr "%date:~-4%-%date:~-7,2%-%date:~-10,2%" kb.txt
2011-09-27 14:03:46 (475 KB/s) - `1000KBYT.1' saved [1000000]
Nur die ermittelten Werte werde ich mir evtl. in einer separaten Datei wegschreiben.
Dann kannst Du mit "tokens=1-4
" auch Datum und Uhrzeit (als %%a und %%b; Wert und Einheit wären dann %%c und %%d) "mitnehmen" ...Grüße
bastla
Hi,
ich werf mal noch 'nen Codeschnipsel dazu.
Ich hab für einen ähnlichen Zweck mal eine VBS-Function gebaut. Ob die 100% genau ist kann ich natürlich nicht sagen, kommt aber sicherlich auch an recht realistische Werte ran. ;)Der Rückgabewert ist die Geschwindigkeit in KB/s.
Viele Grüße - Bernd
ich werf mal noch 'nen Codeschnipsel dazu.
Ich hab für einen ähnlichen Zweck mal eine VBS-Function gebaut. Ob die 100% genau ist kann ich natürlich nicht sagen, kommt aber sicherlich auch an recht realistische Werte ran. ;)
Public Function GetInetDownloadSpeed(ByRef URL) 'As Long
Dim WebReq 'As Microsoft.XmlHttp
Dim FSO 'As Scripting.FileSystemObject
Dim Start, Ende 'As DateTime
Dim TempObj 'As Object
Dim ContentLength 'As Long
Set WebReq = CreateObject("Microsoft.XmlHttp")
Set FSO = CreateObject("Scripting.FileSystemObject")
Start = Now
URL = URL + "?nocacherandomize=" + Replace(FSO.GetTempName, ".tmp", "")
WebReq.Open "get", URL, False
WebReq.Send
TempObj = WebReq.ResponseBody
ContentLength = WebReq.GetResponseHeader("Content-Length")
Ende = Now
GetInetDownloadSpeed = Round(ContentLength / 1024 / DateDiff("s", Start, Ende), 2)
TempObj = Nothing
End Function
Viele Grüße - Bernd