WSH: MAC- und IP-Adressen

Der zweite Teil der Artikelfolge befasst sich zunächst mit netsh dhcp, einem Befehl, mit dem sich verschiedene Aktivitäten rund um DHCP durchführen lassen. Es werden darüber hinaus Skriptteile vorgestellt, mit denen sich über WMI Informationen zur MAC- und IP-Adresse von definierten Systemen ermitteln lassen.

Im ersten Teil der Serie wurden die – für den gewünschten Zweck der Ermittlung von MACund IP-Adressen – relativ eingeschränkten Möglichkeiten von netsh dhcp als Befehl für die Konfiguration von DHCP-Servern angesprochen. Nachfolgend werden noch ein paar weitere Möglichkeiten vorgestellt, bevor wir auf Code eingehen, der für die Ermittlung von IP- und MACAdressen über VBScript und WMI eingesetzt werden kann.

Ein Beispiel für netsh dhcp

Die nachfolgenden Zeilen zeigen, wie man netsh dhcp für grundlegende Konfigurationsschritte von DHCP-Servern nutzen kann:

netsh dhcp server 192.168.50.10 add scope
192.168.10.0 255.255.255.0 Standardbereich Standardclients
netsh dhcp server 192.168.50.10 scope 192.168.10.0
add iprange 192.168.10.1 192.168.10.254netsh dhcp
server 192.168.50.10 scope 192.168.10.0 add excluderange
192.168.10.1 192.168.10.25
netsh dhcp server 192.168.50.10 scope 192.168.10.0
set optionvalue 003 IPADDRESS 10.1.1.1 10.1.1.2
netsh dhcp server 192.168.50.10 scope 192.168.10.0
set state 1

In der ersten Zeile wird bei einem DHCP-Server ein Bereich hinzugefügt. Hinter add scope folgen als Parameter die IP-Adresse, die Subnetz-Maske, der Name und der Kommentar.

In der folgenden Zeile wird ein IP-Adressbereich hinzugefügt, bevor anschließend eine Ausnahme definiert wird. Die vierte Zeile zeigt, wie man eine Option setzen kann, bevor der Bereich abschließend aktiviert wird.

Für solche Zwecke ist netsh dhcp gut geeignet. Wie im ersten Teil der Serie ausgeführt wurde, fehlen aber die Optionen, um beispielsweise gezielt eine Liste mit Zuordnungen zwischen vergebenen Leases und MAC-Adressen zu erstellen.

Das Scripting: Codebeispiele

Die praktikabelste Lösung für das Auslesen einer größeren Zahl von IP-Adressen ist die Übergabe etwa von Rechnernamen in einer Textdatei. Diese kann als Eingabe für das Skript dienen. Die Grundstruktur für das Auslesen solcher Dateien findet sich in Listing 1.

Listing 1: Das Auslesen von Code (Quelle: Microsoft)
Const ForReading = 1
Set objDictionary = CreateObject("Scripting.Dictionary")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile("c:\scripts\systems.txt", ForReading)
i = 0
Do Until objTextFile.AtEndOfStream
strNextLine = objTextFile.Readline
objDictionary.Add i, strNextLine
i = i + 1
Loop
For Each objItem in objDictionary
‘ Verarbeitung
Next

Zunächst wird hier eine Konstante gesetzt, die später gebraucht wird, um eine Datei für den Read-Only Zugriff zu öffnen. Anschließend wird mit

Set objDictionary = CreateObject("Scripting.Dictionary")

ein so genanntes Dictionary-Objekt erstellt. Dabei handelt es sich um eine Liste von nummerierten Elementen, die später einfach wieder aufgerufen werden kann. Faktisch entspricht die Verarbeitung der in einem Array. Mit

Set objFSO = CreateObject("Scripting.FileSystemObject")

wird danach ein Dateisystemobjekt erstellt, über das im nächsten Schritt eine Datei mit der Liste der Eingabewerte geöffnet wird:

Set objTextFile =
objFSO.OpenTextFile("c:\scripts\systems.txt", For-
Reading)