traller
Goto Top

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?
bd2006d246444cd56153cbdc2093a3ad

Betriebssystem: Windows 7

Content-Key: 185585

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

Printed on: April 23, 2024 at 18:04 o'clock

Member: rubberman
rubberman May 29, 2012 at 17:38:24 (UTC)
Goto Top
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.
WMIC /Node:"%computername%" /Output:STDOUT Path Win32_NetworkAdapterConfiguration Get /Format:LIST  
2.
WMIC /Node:"%computername%" /Output:STDOUT Path Win32_NetworkAdapter Get /Format:LIST  
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
Member: traller
traller May 29, 2012 updated at 18:14:22 (UTC)
Goto Top
Hallo,
mit deinem ersten Befehl kam unleserlicher Kram, den ich nicht zu ordnen konnte. Bei dem zweiten kam:
Kabelnetzwerk (verbunden):
NetConnectionStatus=2
Kabelnetzwerk (getrennt):
NetConnectionStatus=7
Geschwindigkeit Kabelnetz (100Mbit/s):
Speed=100000000
Geschwindigkeit Kabelnetz (1Gbit/s):
Speed=1000000000

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:
AdapterType=Ethernet 802.3
AdapterTypeId=0
AutoSense=
Availability=3
Caption=[00000009] GEHEIM
ConfigManagerErrorCode=0
ConfigManagerUserConfig=FALSE
CreationClassName=Win32_NetworkAdapter
Description=GEHEIM
DeviceID=9
ErrorCleared=
ErrorDescription=
GUID={GEHEIM}
Index=9
InstallDate=
Installed=TRUE
InterfaceIndex=11
LastErrorCode=
MACAddress=GEHEIM
Manufacturer=GEHEIM
MaxNumberControlled=0
MaxSpeed=
Name=GEHEIM
NetConnectionID=LAN-Verbindung
NetConnectionStatus=2
NetEnabled=TRUE
NetworkAddresses=
PermanentAddress=
PhysicalAdapter=TRUE
PNPDeviceID=GEHEIM
PowerManagementCapabilities=
PowerManagementSupported=FALSE
ProductName=GEHEIM
ServiceName=GEHEIM
Speed=1000000000
Status=
StatusInfo=
SystemCreationClassName=Win32_ComputerSystem
SystemName=GEHEIM
TimeOfLastReset=GEHEIM
Member: bastla
bastla May 29, 2012 updated at 18:52:35 (UTC)
Goto Top
Hallo traller und rubberman!
Nun könnte man doch eventuell sagen: Suche nach Zeile ...
... oder etwas integriertes VBScript den Job machen lassen - ungetestet:
set "G=%temp%\GetInfo.vbs"  
>"%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  
for /f %%i in ('cscript //nologo "%G%"') do set "Info=%%i"  
if "%Info%" neq "2_1000000000" echo Voraussetzungen nicht erfuellt! & goto :eof  
echo Mit 1 GBit verbunden
Nebeneffekt: Es werden keine Admin-Rechte benötigt ...

Grüße
bastla
Member: traller
traller May 29, 2012 at 19:11:32 (UTC)
Goto Top
wie würde das denn ohne VBScript gehen? Admin-Rechte werden eh für den Job benötigt ...
Member: rubberman
rubberman May 29, 2012 at 19:24:16 (UTC)
Goto Top
Hallo traller, hallo bastla!

Zitat von @traller:
Nun gehe x Zeilen darunter und prüfe ob dieser Wert = y ist.


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 face-wink

Grüße
rubberman
Member: bastla
bastla May 29, 2012 at 19:30:33 (UTC)
Goto Top
Hallo traller!

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"
Danach hast Du in der Variabeln %NCS% den zurückgegebenen Wert und kannst ihn per "if" abfragen ...

Grüße
bastla
Member: traller
traller May 29, 2012 updated at 19:46:18 (UTC)
Goto Top
@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?
Member: Biber
Biber May 29, 2012 at 19:44:12 (UTC)
Goto Top
[OT]
Zitat von @bastla:
Hallo traller!

Was spricht gegen VBS?
[_] 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]
Member: bastla
bastla May 29, 2012 at 19:53:20 (UTC)
Goto Top
Hallo traller!
was hat es mit dem "token" auf sich?
Tutorial zur FOR-Schleife

Grüße
bastla
Member: rubberman
rubberman May 29, 2012 updated at 20:03:16 (UTC)
Goto Top
Hallo zusammen.

Mit mehreren Bedingungen ggf. so:
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"  
echo %Speed%
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
Member: bastla
bastla May 29, 2012 at 20:01:09 (UTC)
Goto Top
[OT] @Biber
Wer so schöne flow-charts malt, kann eigentlich nur Antwort 2 wählen face-wink (so denn überhaupt noch eine Reaktion auf die Frage kommt) ...

Grüße
bastla
[/OT]
Member: traller
traller May 30, 2012 at 14:39:11 (UTC)
Goto Top
@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.