anak1m
Goto Top

Skript aufgrund von Netzadresse ausführen

Hallo zusammen,

kennt jemand eine Möglichkeit ein Skript aufgrund einer Netzadresse auszuführen?

Ich möchte folgendes damit umsetzen:

Wenn die Netzadresse 192.168.100.0 ist goto Skript A

Wenn die Netzadresse 192.168.101.0 ist goto Skript B

usw.

Danke für eure Hilfe face-smile

Content-ID: 311122

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

Ausgedruckt am: 25.11.2024 um 13:11 Uhr

emeriks
emeriks 28.07.2016 um 14:23:09 Uhr
Goto Top
Hi,
z.B. mit VBscript

On Error Resume Next

Set WshShell =  CreateObject("WScript.Shell")  
Set FSO = CreateObject("Scripting.FileSystemObject")  
Dim Temp : Temp = WshShell.ExpandEnvironmentStrings("%temp%")  

FSO.DeleteFile Temp & "\ipconfig.txt", True  
WshShell.Run "%comspec% /c ipconfig /all > %temp%\ipconfig.txt",0,True  

Dim Line, TestLine
Dim IPaddresses : IPaddresses = ""  

If FSO.Exists(Temp & "\ipconfig.txt") Then  
  With FSO.OpenTextFile(Temp & "\ipconfig.txt")  
    While Not .AtEndOfStream
      Line = .ReadLine
      TestLine = LCase(Replace(Replace(Line, " ", ""), "-", ""))  
      If InStr(TestLine,"ipadresse") > 0 Or _  
         InStr(TestLine,"ipv4adresse") > 0 Or _  
         InStr(TestLine,"ipaddress") > 0 Or _  
         InStr(TestLine,"ipv4address") > 0 Then  
        Line = Trim(Split(Split(Line, ":")(1), "(")(0))  
        If UBound(Split(Line,".")) = 3 Then  
          If IPaddresses = "" Then  
            IPaddresses = Line
          Else
            IPaddresses = IPaddresses & vbTab & Line
          End If
        End If
      End If
    Wend
  End With
  FSO.DeleteFile Temp & "\ipconfig.txt", True  
End If

IPaddresses = Split(IPaddresses, vbTab)

Dim IPaddress
For Each IPaddress In IPaddresses
  If Left(IPaddress, 12) = "192.168.100." Then  
    'tu dies  
    ...

  ElseIf Left(IPaddress, 12) = "192.168.101." Then  
    'tu das  
    ...
    
  ElseIf Left(IPaddress, 12) = "192.168.102." Then  
    'tu jenes  
    ...
    
  End If
Next

WScript.Quit

Function Ping(DestinationHost)
  On Error Resume Next
  Ping = False
  Set oPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("select * from Win32_PingStatus where address = '" & DestinationHost & "'")  
  For Each oStatus in oPing
	  If IsNull(oStatus.StatusCode) Or oStatus.StatusCode <> 0 Then 
		  Ping = False
	  Else
		  Ping = True
	  End If
  Next
End Function

E.
129813
129813 28.07.2016 um 14:38:37 Uhr
Goto Top
Hi.
Powershell
gwmi win32_NetworkadapterConfiguration -Filter "IPEnabled=True" | select -Expand IPAddress | %{  
    switch -Wildcard  ($_){
        '192.168.101*' {   
            # do something
        }
        '192.168.102*' {   
            # do something
        }
    }
}
Regards
Snowman25
Snowman25 28.07.2016 um 14:56:57 Uhr
Goto Top
Hi,
in batch:
@ECHO OFF
FOR /F "tokens=2 delims=/ " %%i in ('netsh interface ipv4 show addresses^|findstr 192.168.^|findstr /I subnet') do (  
IF x%%i==x ECHO "IP nicht gefunden: %%i" & pause  
IF x%%i==x192.168.100.0 GOTO :A
IF x%%i==x192.168.101.0 GOTO :B
)
GOTO :eof

:A
:: execute skript A
GOTO :eof

:B
:: execute skript B
GOTO :eof
Beliebig erweiterbar.

Gruß,
@Snowman25
emeriks
emeriks 28.07.2016 um 15:31:52 Uhr
Goto Top
@129813
Ich fürchte, das funktioniert mit DHCP-Adressen nicht. Zumindest nicht in VBscript.

@Snowman25
Funktioniert das mit DHCP-Adressen?
129813
129813 28.07.2016 aktualisiert um 15:46:13 Uhr
Goto Top
Zitat von @emeriks:
@129813
Ich fürchte, das funktioniert mit DHCP-Adressen nicht. Zumindest nicht in VBscript.
This works absolutely fine with DHCP!
Netsh the same, works too.

Why shouldn't it ?? They all gather their information from the same source, it doesn't matter if static or dynamic.

VBS works too, tested successfully:
Set colItems = (GetObject("winmgmts:\\.\root\CIMV2")).ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration where IPEnabled=True")  
For Each objItem In colItems
  WScript.Echo "IP(s): " & Join(objItem.IPAddress,", ")  
Next 
Snowman25
Snowman25 28.07.2016 um 15:54:19 Uhr
Goto Top
Zitat von @emeriks:

@Snowman25
Funktioniert das mit DHCP-Adressen?
Ja. Schau dir mal den Output von netsh i ipv4 sh a [kurzform] an.
Das sieht ungefähr so aus:
Konfiguration der Schnittstelle "MANAGEMENT"
    DHCP aktiviert:                       Nein
    IP-Adresse:                           192.168.10.251
    Subnetzpräfix:                        192.168.10.0/24 (Maske 255.255.255.0)
    Schnittstellenmetrik:                      10

Im Falle von aktiviertem DHCP ist die Ausgabe entsprechend anders (DHCP aktiviert: Ja).

Gruß,
@Snowman25
emeriks
emeriks 28.07.2016 um 16:05:58 Uhr
Goto Top
VBS works too, tested successfully:
Ja, das sehe ich jetzt auch. ???
Ich habe das erst vor ein paar Tagen mal wieder benötigt und da hat es nicht funktioniert. Deshalb diese umständliche Variante mit dem "ipconfig". Keine Ahnung, was da los war.
anak1m
anak1m 01.08.2016 um 10:50:53 Uhr
Goto Top
Moin zusammen und danke für eure Antworten face-smile

Habe das ganze mal via Batch probiert:

@echo OFF

FOR /F "tokens=2 delims=/ " %%i in ('netsh interface ipv4 show addresses^|findstr 192.168.^|findstr /I subnet') do (

IF x%%i==x ECHO "IP nicht gefunden: %%i" & pause

IF x%%i==x192.168.125.0 GOTO A

IF x%%i==x192.168.126.0 GOTO B

IF x%%i==x192.168.131.0 GOTO A

IF x%%i==x192.168.128.0 GOTO B

IF x%%i==x192.168.129.0 GOTO A

Funktioniert aber nicht richtig - mein Client ist im Netz 192.168.125.0 und er führt das Skript aus welches bei 192.168.128.0 ausgeführt werden müsste ...

Jemand noch eine Idee?

Danke face-smile
Biber
Biber 01.08.2016 um 11:27:13 Uhr
Goto Top
Moin anak1m,

falls snowman25s Skizze die vorlage für deinen Schnupsel war:
-> dort ist ein Tippfehler enthalten.

Eine Sprungmarke im Batch hat immer die Form :MarkeXY, als Doppelpunkt-Name-des-Labels.
Oben steht es versehentlich als A: und B:, als Name-des-Labels-Doppelpunkt.

Das wird als Sprungmarke nicht gefunden.
Wenn es das nicht war/du diesen Tippfehler nicht mit übernommen hast, dann zeige uns doch dein komplettes Skript in Codetags.

Grüße
Biber
anak1m
anak1m 01.08.2016 um 11:38:17 Uhr
Goto Top
Moin,

das habe ich schon gesehen face-wink und herausgenommen ...

@ECHO OFF

FOR /F "tokens=2 delims=/ " %%i in ('netsh interface ipv4 show addresses^|findstr 192.168.^|findstr /I subnet') do (  

IF x%%i==x ECHO "IP nicht gefunden: %%i" & pause  

IF x%%i==x192.168.125.0 GOTO A

IF x%%i==x192.168.126.0 GOTO B

IF x%%i==x192.168.131.0 GOTO A

IF x%%i==x192.168.128.0 GOTO B

IF x%%i==x192.168.129.0 GOTO A

:A

%logonserver%\netlogon\lw-mapping-a.bat

:B

%logonserver%\netlogon\lw-mapping-b.bat
Biber
Biber 01.08.2016 aktualisiert um 11:50:14 Uhr
Goto Top
Moin anak1m,

okay, *lach*...

Und wo geht die Klammer der FOR-Anweisung wieder zu, die du in Zeile 04 letztes Zeichen öffnest?

Spendier doch mal in der Zeile 06 nach dem "& pause" noch ein " & goto :eof".
Und in der Zeile vor der ersten Sprungmarke (:A) eine Klammer-Zu.
Und jeweils am Ende der Pseudo-"Unterprozeduren" :A und :B auch ein goto :eof.

Sonst wird nämlich - da :A kein Ende hat, auch :B bzw alle folgenden Zeilen ausgeführt.

Grüße
Biber
Snowman25
Snowman25 09.08.2016 um 23:24:16 Uhr
Goto Top
Zitat von @Biber:

Eine Sprungmarke im Batch hat immer die Form :MarkeXY, als Doppelpunkt-Name-des-Labels.
Oben steht es versehentlich als A: und B:, als Name-des-Labels-Doppelpunkt.
Oh. Natürlich gleich korrigiert face-smile