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-Key: 311122

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

Printed on: April 25, 2024 at 22:04 o'clock

Member: emeriks
emeriks Jul 28, 2016 at 12:23:09 (UTC)
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.
Mitglied: 129813
129813 Jul 28, 2016 at 12:38:37 (UTC)
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
Member: Snowman25
Snowman25 Jul 28, 2016 at 12:56:57 (UTC)
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
Member: emeriks
emeriks Jul 28, 2016 at 13:31:52 (UTC)
Goto Top
@129813
Ich fürchte, das funktioniert mit DHCP-Adressen nicht. Zumindest nicht in VBscript.

@Snowman25
Funktioniert das mit DHCP-Adressen?
Mitglied: 129813
129813 Jul 28, 2016 updated at 13:46:13 (UTC)
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 
Member: Snowman25
Snowman25 Jul 28, 2016 at 13:54:19 (UTC)
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
Member: emeriks
emeriks Jul 28, 2016 at 14:05:58 (UTC)
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.
Member: anak1m
anak1m Aug 01, 2016 at 08:50:53 (UTC)
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
Member: Biber
Biber Aug 01, 2016 at 09:27:13 (UTC)
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
Member: anak1m
anak1m Aug 01, 2016 at 09:38:17 (UTC)
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
Member: Biber
Biber Aug 01, 2016 updated at 09:50:14 (UTC)
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
Member: Snowman25
Snowman25 Aug 09, 2016 at 21:24:16 (UTC)
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