Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

If else kaskadieren und Netzverkverbindung prüfen

Frage Entwicklung Batch & Shell

Mitglied: traller

traller (Level 1) - Jetzt verbinden

29.05.2012, aktualisiert 13:53 Uhr, 3909 Aufrufe, 12 Kommentare

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 - Klicke auf das Bild, um es zu vergrößern

Betriebssystem: Windows 7
Mitglied: rubberman
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.
01.
WMIC /Node:"%computername%" /Output:STDOUT Path Win32_NetworkAdapterConfiguration Get /Format:LIST
2.
01.
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
Bitte warten ..
Mitglied: traller
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):
01.
NetConnectionStatus=2
Kabelnetzwerk (getrennt):
01.
NetConnectionStatus=7
Geschwindigkeit Kabelnetz (100Mbit/s):
01.
Speed=100000000
Geschwindigkeit Kabelnetz (1Gbit/s):
01.
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:
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
Bitte warten ..
Mitglied: bastla
29.05.2012, aktualisiert um 20:52 Uhr
Hallo traller und rubberman!
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
Nebeneffekt: Es werden keine Admin-Rechte benötigt ...

Grüße
bastla
Bitte warten ..
Mitglied: traller
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 ...
Bitte warten ..
Mitglied: rubberman
29.05.2012 um 21:24 Uhr
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

Grüße
rubberman
Bitte warten ..
Mitglied: bastla
29.05.2012 um 21:30 Uhr
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
Bitte warten ..
Mitglied: traller
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?
Bitte warten ..
Mitglied: Biber
29.05.2012 um 21:44 Uhr
[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]
Bitte warten ..
Mitglied: bastla
29.05.2012 um 21:53 Uhr
Hallo traller!
was hat es mit dem "token" auf sich?
Tutorial zur FOR-Schleife

Grüße
bastla
Bitte warten ..
Mitglied: rubberman
29.05.2012, aktualisiert um 22:03 Uhr
Hallo zusammen.

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%
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
Bitte warten ..
Mitglied: bastla
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]
Bitte warten ..
Mitglied: traller
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.
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Visual Studio
gelöst Remotedienst prüfen mit Visual Basic (1)

Frage von flyingmichael zum Thema Visual Studio ...

Batch & Shell
gelöst EDI Dateien auf Inhalt prüfen und verschieben (6)

Frage von ThomasKern zum Thema Batch & Shell ...

Windows 10
gelöst Auf Softwareupdates prüfen (4)

Frage von honeybee zum Thema Windows 10 ...

Monitoring
gelöst Firewallstatus durch Zabbix prüfen lassen (7)

Frage von honeybee zum Thema Monitoring ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (27)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (20)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...