gelöst If else kaskadieren und Netzverkverbindung prüfen
Hallo,
ich möchte mit if / else prüfen, ob ein Computer über das Kabelnetzwerk (XYZ) verbunden ist und nicht über W-Lan (ABC). Beide Netzwerkverbindungen sind im gleichen IP-Netzwerk somit fällt ein Test mittels Ping weg.
Es muss eigentlich nur geprüft werden, ob die Netzwerkverbindung mit der Bezeichnung XYZ verbunden ist oder nicht. Sonst Abbruch.
Wenn diese Prüfung erfolgreich ist, soll dann noch geprüft werden, ob XYZ mit der Geschwindigkeit von 1Gbit/s verbunden ist, sonst Abbruch.
Wenn diese Prüfung erfolgreich ist, noch einmal Prüfen ob ABC nicht verbunden ist, dann rufe Script test.cmd auf, sonst Abbruch.
Kann mir da jemand auf die Sprünge helfen wie ich das prüfe und kann ich if / else so kaskadieren in einer Batch?

Betriebssystem: Windows 7
ich möchte mit if / else prüfen, ob ein Computer über das Kabelnetzwerk (XYZ) verbunden ist und nicht über W-Lan (ABC). Beide Netzwerkverbindungen sind im gleichen IP-Netzwerk somit fällt ein Test mittels Ping weg.
Es muss eigentlich nur geprüft werden, ob die Netzwerkverbindung mit der Bezeichnung XYZ verbunden ist oder nicht. Sonst Abbruch.
Wenn diese Prüfung erfolgreich ist, soll dann noch geprüft werden, ob XYZ mit der Geschwindigkeit von 1Gbit/s verbunden ist, sonst Abbruch.
Wenn diese Prüfung erfolgreich ist, noch einmal Prüfen ob ABC nicht verbunden ist, dann rufe Script test.cmd auf, sonst Abbruch.
Kann mir da jemand auf die Sprünge helfen wie ich das prüfe und kann ich if / else so kaskadieren in einer Batch?

Betriebssystem: Windows 7
12 Antworten
- LÖSUNG rubberman schreibt am 29.05.2012 um 19:38:24 Uhr
- LÖSUNG traller schreibt am 29.05.2012 um 20:11:55 Uhr
- LÖSUNG bastla schreibt am 29.05.2012 um 20:52:20 Uhr
- LÖSUNG traller schreibt am 29.05.2012 um 21:11:32 Uhr
- LÖSUNG rubberman schreibt am 29.05.2012 um 21:24:16 Uhr
- LÖSUNG traller schreibt am 29.05.2012 um 21:44:10 Uhr
- LÖSUNG bastla schreibt am 29.05.2012 um 21:53:20 Uhr
- LÖSUNG rubberman schreibt am 29.05.2012 um 21:59:54 Uhr
- LÖSUNG traller schreibt am 29.05.2012 um 21:44:10 Uhr
- LÖSUNG bastla schreibt am 29.05.2012 um 21:30:33 Uhr
- LÖSUNG Biber schreibt am 29.05.2012 um 21:44:12 Uhr
- LÖSUNG bastla schreibt am 29.05.2012 um 22:01:09 Uhr
- LÖSUNG traller schreibt am 30.05.2012 um 16:39:11 Uhr
- LÖSUNG bastla schreibt am 29.05.2012 um 22:01:09 Uhr
- LÖSUNG Biber schreibt am 29.05.2012 um 21:44:12 Uhr
- LÖSUNG rubberman schreibt am 29.05.2012 um 21:24:16 Uhr
- LÖSUNG traller schreibt am 29.05.2012 um 21:11:32 Uhr
- LÖSUNG bastla schreibt am 29.05.2012 um 20:52:20 Uhr
- LÖSUNG traller schreibt am 29.05.2012 um 20:11:55 Uhr
LÖSUNG 29.05.2012 um 19:38 Uhr
Hallo traller!
Erst mal musst du die nötigen Infos sammeln. Diese dann mit IF Statements zu verwursten ist vermutlich kein Problem.
Nun bin ich leider kein "Networker", darum müsstest du etwas mithelfen.
Ich habe 2 WMIC Kommandozeilen, mit denen du vermutlich diese Informationen bekommst:
1.
2.
Das Get könnte man nun noch konkretisieren und ein Where ergänzen, um das auszufiltern was tatsächlich benötigt wird.
- Kommen die benötigten Informationen? Wenn ja, über welche Eigenschaften?
- Benötigst du beide Kommandozeilen? Wenn ja, welche Eigenschaft in den beiden Ausgaben ist dazu geeignet, um eine eindeutige Zuordnung zu bekommen?
Grüße
rubberman
Erst mal musst du die nötigen Infos sammeln. Diese dann mit IF Statements zu verwursten ist vermutlich kein Problem.
Nun bin ich leider kein "Networker", darum müsstest du etwas mithelfen.
Ich habe 2 WMIC Kommandozeilen, mit denen du vermutlich diese Informationen bekommst:
1.
01.
WMIC /Node:"%computername%" /Output:STDOUT Path Win32_NetworkAdapterConfiguration Get /Format:LIST
01.
WMIC /Node:"%computername%" /Output:STDOUT Path Win32_NetworkAdapter Get /Format:LIST
- Kommen die benötigten Informationen? Wenn ja, über welche Eigenschaften?
- Benötigst du beide Kommandozeilen? Wenn ja, welche Eigenschaft in den beiden Ausgaben ist dazu geeignet, um eine eindeutige Zuordnung zu bekommen?
Grüße
rubberman
LÖSUNG 29.05.2012, aktualisiert um 20:14 Uhr
Hallo,
mit deinem ersten Befehl kam unleserlicher Kram, den ich nicht zu ordnen konnte. Bei dem zweiten kam:
Kabelnetzwerk (verbunden):
Kabelnetzwerk (getrennt):
Geschwindigkeit Kabelnetz (100Mbit/s):
Geschwindigkeit Kabelnetz (1Gbit/s):
Wobei da natürlich mehrere Adapter genannt werden. Nun könnte man doch eventuell sagen: Suche nach Zeile "MACAddress=00:21:70:BE:9F:0E" oder Suche nach Zeile "NetConnectionID=LAN-Verbindung". Nun gehe x Zeilen darunter und prüfe ob dieser Wert = y ist.
Die Gesamtausgabe des entsprechenden Kabeladapter ist:
mit deinem ersten Befehl kam unleserlicher Kram, den ich nicht zu ordnen konnte. Bei dem zweiten kam:
Kabelnetzwerk (verbunden):
01.
NetConnectionStatus=2
01.
NetConnectionStatus=7
01.
Speed=100000000
01.
Speed=1000000000
Die Gesamtausgabe des entsprechenden Kabeladapter ist:
01.
AdapterType=Ethernet 802.3
02.
AdapterTypeId=0
03.
AutoSense=
04.
Availability=3
05.
Caption=[00000009] GEHEIM
06.
ConfigManagerErrorCode=0
07.
ConfigManagerUserConfig=FALSE
08.
CreationClassName=Win32_NetworkAdapter
09.
Description=GEHEIM
10.
DeviceID=9
11.
ErrorCleared=
12.
ErrorDescription=
13.
GUID={GEHEIM}
14.
Index=9
15.
InstallDate=
16.
Installed=TRUE
17.
InterfaceIndex=11
18.
LastErrorCode=
19.
MACAddress=GEHEIM
20.
Manufacturer=GEHEIM
21.
MaxNumberControlled=0
22.
MaxSpeed=
23.
Name=GEHEIM
24.
NetConnectionID=LAN-Verbindung
25.
NetConnectionStatus=2
26.
NetEnabled=TRUE
27.
NetworkAddresses=
28.
PermanentAddress=
29.
PhysicalAdapter=TRUE
30.
PNPDeviceID=GEHEIM
31.
PowerManagementCapabilities=
32.
PowerManagementSupported=FALSE
33.
ProductName=GEHEIM
34.
ServiceName=GEHEIM
35.
Speed=1000000000
36.
Status=
37.
StatusInfo=
38.
SystemCreationClassName=Win32_ComputerSystem
39.
SystemName=GEHEIM
40.
TimeOfLastReset=GEHEIM
LÖSUNG 29.05.2012, aktualisiert um 20:52 Uhr
Hallo traller und rubberman!
Nebeneffekt: Es werden keine Admin-Rechte benötigt ...
Grüße
bastla
Nun könnte man doch eventuell sagen: Suche nach Zeile ...
... oder etwas integriertes VBScript den Job machen lassen - ungetestet:01.
set "G=%temp%\GetInfo.vbs"
02.
>"%G%" echo For Each objItem In GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_NetworkAdapter Where NetConnectionID='LAN-Verbindung'"):WScript.Echo objItem.NetConnectionStatus^&"_"^&objItem.Speed:Next
03.
for /f %%i in ('cscript //nologo "%G%"') do set "Info=%%i"
04.
if "%Info%" neq "2_1000000000" echo Voraussetzungen nicht erfuellt! & goto :eof
05.
echo Mit 1 GBit verbunden
Grüße
bastla
LÖSUNG 29.05.2012 um 21:11 Uhr
wie würde das denn ohne VBScript gehen? Admin-Rechte werden eh für den Job benötigt ...
LÖSUNG 29.05.2012 um 21:24 Uhr
Hallo traller, hallo bastla!
x Zeilen darunter ist nicht notwendig, dafür gibt es Where. Aber welcher Wert soll denn "y" sein?
@bastla
Ich bekomme auch mit WMIC keinen UAC Prompt, falls du darauf hinaus willst. Allerdings gehöre ich auf meiner Kiste zu den lokalen Admins
Grüße
rubberman
x Zeilen darunter ist nicht notwendig, dafür gibt es Where. Aber welcher Wert soll denn "y" sein?
@bastla
Ich bekomme auch mit WMIC keinen UAC Prompt, falls du darauf hinaus willst. Allerdings gehöre ich auf meiner Kiste zu den lokalen Admins
Grüße
rubberman
LÖSUNG 29.05.2012 um 21:30 Uhr
Hallo traller!
Was spricht gegen VBS?
Per "wmic" kannst Du das so versuchen:
Danach hast Du in der Variabeln %NCS% den zurückgegebenen Wert und kannst ihn per "if" abfragen ...
Grüße
bastla
Was spricht gegen VBS?
Per "wmic" kannst Du das so versuchen:
for /f "tokens=2 delims==" %%i in ('wmic NIC Where NetConnectionID^="LAN-Verbindung" get NetConnectionStatus /value') do set "NCS=%%i"
Grüße
bastla
LÖSUNG 29.05.2012, aktualisiert um 21:46 Uhr
@rubberman
y = der Wert, der überprüft werden soll, kannste aber auch vergessen ...
@bastla
sieht gut aus, werde ich gleich oder morgen mal testen und berichten. was hat es mit dem "token" auf sich?
y = der Wert, der überprüft werden soll, kannste aber auch vergessen ...
@bastla
sieht gut aus, werde ich gleich oder morgen mal testen und berichten. was hat es mit dem "token" auf sich?
LÖSUNG 29.05.2012 um 21:44 Uhr
[OT]
[_] Das oben stehende VBS lässt sich nicht durch Entfernen der Kommentarzeilen geschwindigkeitsoptimieren
[_] Wenn ich dieses unappetitliche Gestrunkele mit in die Wohnung rein bringe, dann gibt es abba Schimpfe
[_] Es deprimiert mich immer, 5 Zeilen zu sehen und nach der ersten halben macht es bei mir *TILT* *TILT* *TILT*
Bin gespannt, was er ankreuzt....
SCNR
Biber
[/OT]
[_] Das oben stehende VBS lässt sich nicht durch Entfernen der Kommentarzeilen geschwindigkeitsoptimieren
[_] Wenn ich dieses unappetitliche Gestrunkele mit in die Wohnung rein bringe, dann gibt es abba Schimpfe
[_] Es deprimiert mich immer, 5 Zeilen zu sehen und nach der ersten halben macht es bei mir *TILT* *TILT* *TILT*
Bin gespannt, was er ankreuzt....
SCNR
Biber
[/OT]
LÖSUNG 29.05.2012 um 21:53 Uhr
LÖSUNG 29.05.2012, aktualisiert um 22:03 Uhr
Hallo zusammen.
Mit mehreren Bedingungen ggf. so:
Das FINDSTR ist da, um die Unicodeausgabe in ein verstümmeltes ASCII zu konvertieren. Das ist der eigentliche Nachteil von WMIC gegenüber der VBS Lösung.
Grüße
rubberman
Mit mehreren Bedingungen ggf. so:
01.
for /f "delims=" %%i in ('WMIC /Node:"%computername%" /Output:STDOUT Path Win32_NetworkAdapter Where "NetConnectionID='LAN-Verbindung' And NetConnectionStatus='2'" Get Speed /FORMAT:List^|findstr .') do set "%%i"
02.
echo %Speed%
Grüße
rubberman
LÖSUNG 29.05.2012 um 22:01 Uhr
[OT] @Biber
Wer so schöne flow-charts malt, kann eigentlich nur Antwort 2 wählen (so denn überhaupt noch eine Reaktion auf die Frage kommt) ...
Grüße
bastla
[/OT]
Wer so schöne flow-charts malt, kann eigentlich nur Antwort 2 wählen (so denn überhaupt noch eine Reaktion auf die Frage kommt) ...
Grüße
bastla
[/OT]
LÖSUNG 30.05.2012 um 16:39 Uhr
@bastla:
funktioniert damit wunder bar. Dann noch die If/Else verschachtelt und es geht so wie ich wollte. Danke an alle, die mit geholfen haben.
funktioniert damit wunder bar. Dann noch die If/Else verschachtelt und es geht so wie ich wollte. Danke an alle, die mit geholfen haben.
Ähnliche Inhalte
Neue Wissensbeiträge
Heiß diskutierte Inhalte