kraemer
Goto Top

Batch-Script für die Messung der Netzwerkgeschwindigkeit

Moin zusammen,

ich habe mich gerade eben hingesetzt, und eines meiner Scripte ein wenig zeigbar überarbeitet. Da die eine oder andere Idee zu dem Script von hier kommt, möchte ich dieses hier veröffentlichen.
Ich hoffe, das ich bei meiner Codeaufräumaktion keinen Murks gemacht habe.

Das Script wird auf einem Server abgelegt und dann vom Client aus gestartet. Ausführungsort muss das Verzeichnis des Scriptes sein. Das Script kopiert dann einige Dateien und misst die benötigte Zeit. Die Werte werden samt einiger Formeln in eine CSV geschrieben. Mit einer Tabellenkalkulation ala Libreoffice Calc lässt die Datei sich dann öffnen und weiter bearbeiten.

@echo off
cls
::Batch-Script zur Messung der Netzwerkgeschwindigkeit
::Geschrieben von: https://administrator.de/user/kraemer/
::
::Das Script schreibt seine Ergebnisse in das Verzeichnis, aus dem es aufgerufen worden ist. 
::Dieses Verzeichnis sollte auf einem Server liegen ;-)
::Die Zugriffsberechtigungen sind entsprechend zu setzen ^^
::Die TMP-Dateien die auf dem Server erstellt werden, werden nicht automatisch gelöscht, da diese in Normalfall mehrfach genutzt werden.
::CSV-Aufbau: Computer, Startzeit, Endezeit, verbrauchte Zeit, MB/s, Mbit/s

::Konfiguration
set FormelDauer="=ZEITWERT(INDEX(D:D))-ZEITWERT(INDEX(C:C))"  
set FormelMbS="=(INDEX(B:B)/INDEX(E:E))/(24*60*60)"  
set FormelMbitS="=(INDEX(B:B)/INDEX(E:E))/(24*60*60)*8"  
set ScriptLocation=%~dp0

::Programmablauf
::Hier einfach die StartCopy-Funktion mit den gewünschten Größen einfügen
call:StartCopy "1"  
call:StartCopy "5"  
call:StartCopy "50"  
pause
goto:eof

:StartCopy
::Prüfen ob TMP-Datei vorhanden
  if not exist %ScriptLocation%%~1MB.tmp call:CreateTmp %~1
::Beginn ermitteln
  set StartTime=%time%
  echo Beginn der Messung: %StartTime%
::Datei kopieren
  copy %ScriptLocation%%~1MB.tmp %temp%\
::Werte in CSV eintragen
  echo %computername%;%~1;%StartTime%;%time%;%FormelDauer%;%FormelMbS%;%FormelMbitS% >>%ScriptLocation%Zeiten.csv
  echo Ende der Messung: %time%
::Prüfen ob Versuch überhaupt erfolgreich
  fc %ScriptLocation%%~1MB.tmp %temp%\%~1MB.tmp |if %errorlevel%==1 echo %computername% meldet Fehler beim kopieren von %~1MB.tmp >>%ScriptLocation%Fehler.txt
::lokal Aufräumen
  del %temp%\%~1MB.tmp
goto:eof

:CreateTmp
::Temporäre Datei erstellen
  set TmpMB=%~1
  set TmpMulti=1048576
  set /a TmpByte=%TmpMB%*%TmpMulti%
  fsutil file createnew %ScriptLocation%%~1MB.tmp %TmpByte%
goto:eof

Kommentare werden gerne entgegen genommen face-wink

Gruß Krämer

Content-Key: 305777

Url: https://administrator.de/contentid/305777

Printed on: April 27, 2024 at 01:04 o'clock

Member: DerWoWusste
DerWoWusste Jun 03, 2016 at 06:50:35 (UTC)
Goto Top
Moin.

Für einen Netzwerkbenchmark rate ich davon ab, Dateien zu kopieren, da bei Deinem Vorgehen das Dateisystem, Storagetreiber, Storageauslastung und etwaige Störfaktoren wie Virenscanner mit reinspielen. Seit Jahr und Tag ist meine Empfehlung netio http://www.ars.de/ars/ars.nsf/docs/netio
Member: Kraemer
Kraemer Jun 03, 2016 at 06:57:39 (UTC)
Goto Top
Zitat von @DerWoWusste:
Für einen Netzwerkbenchmark rate ich davon ab, Dateien zu kopieren, da bei Deinem Vorgehen das Dateisystem, Storagetreiber, Storageauslastung und etwaige Störfaktoren wie Virenscanner mit reinspielen.

Hi DWW, da gebe ich dir absolut recht. Ich hätte dazu schreiben sollen, das man mit dem Script nur die "Reale" Geschwindigkeit (also inkl. der ganzen Beeinflussungen) als Momentaufnahme messen kann. Das war auch damals meine Intention für das Script - ich wollte einfach nur wissen, bei welchen Rechnern liege ich weit ab vom technisch möglichen. Bei diesen Rechnern bin ich dann (meist erfolgreich) auf die Fehlersuche gegangen.

Gruß Krämer
Member: DerWoWusste
DerWoWusste Jun 03, 2016 updated at 07:04:30 (UTC)
Goto Top
Und was sagt netio zu Deinen Realteks?
Wir haben hier ja auch win10 ausgerollt und sicherlich irgendwo auch eine Realtek dazwischen - bislang unauffällig.
Member: Kraemer
Kraemer Jun 03, 2016 updated at 07:53:56 (UTC)
Goto Top
Den Test im anderen Thread hatte ich mit LANBench bestätigt.

Edit: durchgeführt war das falsche Wort - bestätigt.
Member: bitnarrator
bitnarrator Jun 06, 2016 at 06:45:48 (UTC)
Goto Top
Hallom

soll das eigentlich so richtig sein, mit den Formeln, oder sollte da nicht die gemesse Zeit in Sekunden stehen?

Mfg

DerWindowsFreak2
unbenannt
Member: Kraemer
Kraemer Jun 06, 2016 at 06:49:49 (UTC)
Goto Top
Moin,

ich habe leider gerade kein Excel zur Hand um das mal gegen zu testen. Ich kann dir nur sagen, das mein Libreoffice hier die CSV öffnet und dabei die Formeln richtig interpretiert.

Gruß Krämer
Member: pelzfrucht
pelzfrucht Jun 11, 2016 updated at 19:10:34 (UTC)
Goto Top
Hi,

Ansich ein ganz cooles und praktisches Script.
Aber auch bei mir lässt es sich nicht vollständig in Excel (2010) darstellen.

benchmark

Die CSV Datei:

CLIENT;1;21:02:35,53;21:02:35,68;"=ZEITWERT(INDEX(D:D))-ZEITWERT(INDEX(C:C))";"=(INDEX(B:B)/INDEX(E:E))/(24*60*60)";"=(INDEX(B:B)/INDEX(E:E))/(24*60*60)*8"   
CLIENT;5;21:02:36,41;21:02:37,01;"=ZEITWERT(INDEX(D:D))-ZEITWERT(INDEX(C:C))";"=(INDEX(B:B)/INDEX(E:E))/(24*60*60)";"=(INDEX(B:B)/INDEX(E:E))/(24*60*60)*8"   
CLIENT;50;21:02:38,88;21:02:43,61;"=ZEITWERT(INDEX(D:D))-ZEITWERT(INDEX(C:C))";"=(INDEX(B:B)/INDEX(E:E))/(24*60*60)";"=(INDEX(B:B)/INDEX(E:E))/(24*60*60)*8"   

Viele Grüße
pelzfrucht
Member: rubberman
rubberman Jun 11, 2016 updated at 22:02:07 (UTC)
Goto Top
Hallo Zusammen.

Excel funktioniert etwas anders.
1.) ZEITWERT führt zu einem Fehler, da die Zeiten automatisch richtig erkannt und formatiert werden. Sie liegen in der Exceltabelle also nicht mehr als Text vor.
2.) INDEX benötigt bei Excel mehr als einen Parameter. Die ZEILE Funktion hilft.

Da das Parsen als valide Formeln fehlschlägt, werden sie als Text angezeigt.
Probiert mal mit folgender Änderung im Batchscript (Zeilen 12-15 im Original)
::Konfiguration
set FormelDauer="=INDEX(D:D;ZEILE())-INDEX(C:C;ZEILE())"  
set FormelMbS="=(INDEX(B:B;ZEILE())/INDEX(E:E;ZEILE()))/(24*60*60)"  
set FormelMbitS="=(INDEX(B:B;ZEILE())/INDEX(E:E;ZEILE()))/(24*60*60)*8"  
Grüße
rubberman
Member: pelzfrucht
pelzfrucht Jun 11, 2016 at 23:14:11 (UTC)
Goto Top
Abend,

Hab deine erwähnten Änderungen vorgenommen.
Jetzt werden die Felder zwar als Werte erkannt, aber anscheinend fehlerhaft.

unbenannt

Zeiten.csv
CLIENT;1; 1:06:59,63; 1:06:59,79;"=INDEX(D:D;ZEILE())-INDEX(C:C;ZEILE())";"=(INDEX(B:B;ZEILE())/INDEX(E:E;ZEILE()))/(24*60*60)";"=(INDEX(B:B;ZEILE())/INDEX(E:E;ZEILE()))/(24*60*60)*8"   
CLIENT;5; 1:07:00,32; 1:07:00,90;"=INDEX(D:D;ZEILE())-INDEX(C:C;ZEILE())";"=(INDEX(B:B;ZEILE())/INDEX(E:E;ZEILE()))/(24*60*60)";"=(INDEX(B:B;ZEILE())/INDEX(E:E;ZEILE()))/(24*60*60)*8"   
CLIENT;50; 1:07:02,72; 1:07:08,26;"=INDEX(D:D;ZEILE())-INDEX(C:C;ZEILE())";"=(INDEX(B:B;ZEILE())/INDEX(E:E;ZEILE()))/(24*60*60)";"=(INDEX(B:B;ZEILE())/INDEX(E:E;ZEILE()))/(24*60*60)*8"   

Viele Grüße
pelzfrucht
Member: rubberman
rubberman Jun 11, 2016 at 23:38:50 (UTC)
Goto Top
Hallo pelzfrucht

Ich vergaß zu erwähnen, dass das Script nur zwischen 10:00 und 23:59 funktioniert face-wink
Das Zeitformat in der Kommandozeile ist schuld. Bei einstelligen Stunden gibt es statt der führenden 0 ein Leerzeichen, was Excel nicht kapiert.

Zeile 30
  set StartTime=%time: =%

Zeile 35
  echo %computername%;%~1;%StartTime%;%time: =%;%FormelDauer%;%FormelMbS%;%FormelMbitS%>>%ScriptLocation%Zeiten.csv

Grüße
rubberman