Automatisieren von TCP/IP-Netzwerken auf Clients

Teil 4: Skripterstellung für die IP-Adresszuweisung auf Clients

Veröffentlicht: 07. Dez 2004

Im Zentrum von TCP/IP-Netzwerken steht die Zuweisung von IP-Adressen. Wenn in Ihrem Netzwerk DHCP (Dynamic Host Configuration Protocol) eingesetzt wird, verwenden Sie bereits eine Form der Automatisierung zur Verwaltung dieser kritischen Funktion.

In den Anfängen der TCP/IP-Netzwerke wurden IP-Adressen von den Administratoren manuell zugewiesen. Als die Netzwerke wuchsen und komplexer wurden, erwies sich diese Vorgehensweise zunehmend als unpraktisch. Bei den ersten Versuchen zur Automatisierung dieser Funktion, wie z. B. RARP (Reverse Address Resolution Protocol) und BOOTP (Bootstrap Protocol), war weiterhin ein erheblicher Umfang an manueller Konfiguration erforderlich. DHCP wurde als Ersatz für diese Protokolle entwickelt und sollte deren Funktionalität auf ein Client-/Serverprotokoll erweitern, mit dessen Hilfe ein IP-Adresspool und die zugehörigen Clientkonfigurationsparameter mit weit geringerem administrativem Eingriff verwaltet werden konnten.

Heutzutage stellt DHCP bei den meisten Netzwerken beliebiger Größe das Standardautomatisierungsverfahren für die Verwaltung der IP-Adresskonfiguration dar. Doch selbst wenn in Ihrem Netzwerk DHCP eingesetzt wird, müssen Sie in bestimmten Fällen, z. B. bei Ausschlüssen, möglicherweise dennoch statische IP-Adressen verwenden. Außerdem werden in manchen kleineren oder älteren Netzwerken nur statische IP-Adressen verwendet.

DHCP-Server und -Clients arbeiten auch mit anderen TCP/IP-Komponenten auf signifikante Art und Weise zusammen. Beispielsweise aktualisieren DHCP-Clients und -Server bei Verwendung der dynamischen DNS-Aktualisierung DNS-Server mit Änderungen der IP-Adressen, um sicherzustellen, dass die Namensauflösung unverändert erhalten bleibt, während IP-Adressleases freigegeben und erneuert werden.

In diesem Fall können Sie – wie bei den meisten TCP/IP-Einstellungen – Änderungen auf einem lokalen Computer über die Windows-Benutzeroberfläche manuell vornehmen. Wie Abbildung 9 zeigt, können Sie DHCP-Einstellungen auf der Registerkarte IP-Einstellungen des Dialogfelds Erweiterte TCP/IP-Einstellungen konfigurieren.

Figure 9   Configuring DHCP Setting by Using the Windows Interface

Abbildung 9 Konfigurieren der DHCP-Einstellung über die Windows-Benutzeroberfläche
Bild maximieren

Wie weiter oben erwähnt, können Sie mithilfe des Befehlszeilentools Ipconfig.exe DHCP-Clienteinstellungen abrufen, Leases freigeben und erneuern und andere DHCP-Clientaufgaben ausführen. Im Zusammenhang mit Remoteclients und mehreren Clients sowie für komplexe lokale Aufgaben, bei denen manuelle Fehler möglich sind, kann die Skripterstellung jedoch eine effizientere Alternative darstellen.

In diesem Abschnitt wird erläutert, wie Skripts für die Verwaltung der IP-Adresszuweisung mithilfe von DHCP- und statischer Adressierung erstellt werden. Dieses Dokument behandelt nur die Verfahren zum Konfigurieren von Clients, obwohl die Änderungen an Clients in manchen Fällen auch Änderungen an den DHCP-Servern erfordern. Die Verwaltung von DHCP-Servern wird in diesem Dokument nicht behandelt.

Auf dieser Seite
Verwalten von DHCP auf ClientsVerwalten von DHCP auf Clients
Verwalten statischer IP-AdressenVerwalten statischer IP-Adressen
Szenario: Zuweisen von IP-Adressen in einem SubnetzSzenario: Zuweisen von IP-Adressen in einem Subnetz
Szenario: Wechseln zwischen einer statischen Adresse und DHCPSzenario: Wechseln zwischen einer statischen Adresse und DHCP
Tools zur IP-Adresszuweisung auf ClientsTools zur IP-Adresszuweisung auf Clients

Verwalten von DHCP auf Clients

Obwohl es sich bei DHCP bereits um eine Form der Automatisierung handelt, können Sie die Konfiguration von Clientgruppen mithilfe von Skripts automatisieren, damit DHCP genutzt wird. Über die Eigenschaften und Methoden der WMI-Klasse Win32_NetworkAdapterConfiguration können Sie DHCP-Einstellungen auflisten, DHCP aktivieren oder deaktivieren und Leases erneuern oder freigeben.

In Tabelle 9 werden die Win32_NetworkAdapterConfiguration-Eigenschaften beschrieben, die für die IP-Adresszuweisung verwendet werden können.

Tabelle 9 "Win32_NetworkAdapterConfiguration"-Eigenschaften für die IP-Adresszuweisung

EigenschaftTypBeschreibung

DefaultIPGateway

Zeichenfolgenarray

Array von IP-Adressen der Standardgateways, die vom Computersystem verwendet werden.

DHCPEnabled

Boolean-Wert

TRUE gibt an, dass der DHCP-Server dem Computersystem beim Herstellen einer Netzwerkverbindung eine IP-Adresse automatisch zuweist.

DHCPLeaseExpires

DATETIME

Datum und Uhrzeit des Ablaufs für eine geleaste IP-Adresse, die dem Computer vom DHCP-Server zugewiesen wurde.

DHCPLeaseObtained

DATETIME

Datum und Uhrzeit, an bzw. zu dem die Lease für die IP-Adresse bezogen wurde, die dem Computer vom DHCP-Server zugewiesen wurde.

DHCPServer

Zeichenfolge

IP-Adresse des DHCP-Servers.

GatewayCostMetric

Uint16

Array ganzer Zahlen zwischen 1 und 9999 für die Kostenmetrik zum Berechnen der schnellsten, zuverlässigsten oder kostengünstigsten Routen. Dieses Argument stimmt mit der DefaultIPGateway-Eigenschaft exakt überein.

IPConnectionMetric

(Neu bei Windows XP)

Uint32

Kosten für die Verwendung der konfigurierten Routen für den IP-Adapter und der gewichtete Wert für diese Routen in der IP-Routingtabelle. Wenn die IP-Routingtabelle mehrere Routen zu einem Ziel enthält, wird die Route mit der niedrigsten Metrik verwendet. Der Standardwert ist 1.

IPAddress

Zeichenfolge

Array aller IP-Adressen, die dem aktuellen Netzwerkadapter zugeordnet sind.

IPSubnet

Zeichenfolge

Array aller Subnetzmasken, die dem aktuellen Netzwerkadapter zugeordnet sind.

Alle Eigenschaften in der vorstehenden Tabelle sind schreibgeschützt. Bei den Typen uint16 und uint32 handelt es sich um ganze Zahlen ohne Vorzeichen, die von stark typisierten Programmiersprachen verwendet werden; VBScript behandelt sie effektiv als ganze Zahlen.

In Tabelle 10 werden die Win32_NetworkAdapterConfiguration-Methoden beschrieben, die für die IP-Adresszuweisung verwendet werden können.

Tabelle 10 "Win32_NetworkAdapterConfiguration"-Methoden für die IP-Adresszuweisung

MethodeParameterBeschreibung

EnableDHCP

Kein

Aktiviert DHCP für den Dienst im Zusammenhang mit dem Netzwerkadapter. DHCP ermöglicht die dynamische Zuweisung von IP-Adressen.

EnableStatic

IPAddress – Array von Zeichenfolgen

SubnetMask – Array von Zeichenfolgen

Aktiviert die statische TCP/IP-Adressierung für den Zielnetzwerkadapter. Infolgedessen wird DHCP für diesen Netzwerkadapter deaktiviert.

ReleaseDHCPLease

Kein

Gibt die an einen bestimmten DHCP-Netzwerkadapter gebundene IP-Adresse frei.

Vorsicht Wenn DHCP auf dem lokalen Computer aktiviert ist, wird TCP/IP auf dem spezifischen Netzwerkadapter durch diese Option deaktiviert. Dadurch geht jeglich TCP/IP-Kommunikation verloren – außer wenn es einen alternativen Pfad zum Zielsystem, d. h. einen anderen TCP/IP-Netzwerkadapter, gibt.

ReleaseDHCPLeaseAll

Kein

Statische Methode. Gibt die an alle DHCP-Netzwerkadapter gebundenen IP-Adressen frei.

Vorsicht Wenn DHCP auf dem lokalen Computer aktiviert ist, werden alle DHCP TCP/IP-Verbindungen durch diese Option beendet.

RenewDHCPLease

Kein

Erneuert die IP-Adresse auf bestimmten DHCP-Netzwerkadaptern. Die Lease für die von einem DHCP-Server zugewiesene IP-Adresse hat ein Ablaufdatum, das vom Client erneuert werden muss, wenn diese Adresse weiterhin verwendet werden soll.

RenewDHCPLeaseAll

Kein

Statische Methode. Erneuert die IP-Adressen auf allen DHCP-Netzwerkadaptern.

SetGateways

DefaultIPGateway – Array von Zeichenfolgen

GatewayCostMetric – unit16

Gibt eine Liste von Gateways für das Routing von Paketen an ein anderes Subnetz als dasjenige an, mit dem der Netzwerkadapter verbunden ist. Diese Methode funktioniert nur, wenn sich der Netzwerkadapter im statischen IP-Modus befindet.

Alle Methoden in der vorstehenden Tabelle geben eine positive ganze Zahl zurück:

0 bedeutet: erfolgreicher Abschluss.

1 bedeutet: erfolgreicher Abschluss, Neustart erforderlich.

Zahlen größer als 1 bedeuten, dass ein Problem aufgetreten ist und die Methode nicht abgeschlossen werden konnte. Im WMI-SDK werden die Bedeutungen der Rückgabewerte für diese Methoden aufgeführt.

Anzeigen von DHCP-Clientinformationen

Beim Arbeiten mit einer Technologie wie DHCP besteht der erste Schritt der Skripterstellung normalerweise darin, die aktuelle Konfiguration der relevanten Einstellungen zu ermitteln. Dieser Ansatz wird im vorliegenden Abschnitt und den folgenden Abschnitten behandelt.

Win32_NetworkAdapterConfiguration stellt Eigenschaften auf Adapterbasis bereit, die zeigen, ob DHCP aktiviert ist: die IP-Adresse des DHCP-Servers; das Datum und die Uhrzeit, an dem bzw. zu der die Lease bezogen wurde und abläuft; die Client-IP-Adressen und -Subnetzmasken (Netzwerkadapter können jeweils mehr als eine davon aufweisen).

Weil WMI die Datums- und Uhrzeitwerte für die Lease in einem schwer lesbaren Format zurückgibt, müssen diese Daten für die Anzeige in ein benutzerfreundlicheres Format konvertiert werden.

Das folgende Skript zeigt die IP-Adresszuweisungseinstellungen für einen Netzwerkclient an und verwendet dazu die folgenden Eigenschaften der Klasse Win32_NetworkAdapterConfiguration: DHCPEnabled, DHCPServer, DHCPLeaseObtained, DHCPLeaseExpires, IPAddress und IPSubnet. Die Einstellungen für DHCPServer, DHCPLeaseObtained und DHCPLeaseExpires werden nur angezeigt, wenn DHCP aktiviert ist.

Statt die Einstellungen mithilfe der WSH WScript.Echo-Methode direkt anzuzeigen, weist sie das Skript einer Zeichenfolge zu und zeigt sie nach ihrer Erfassung an. Nachdem das Skript mit einer If ... Then-Bedingung überprüft hat, ob der Wert der DHCPEnabled-Eigenschaft True lautet, zeigt das Skript die untergeordneten Einstellungen an.

Zwei der von Dhcpsettings.vbs angezeigten Einstellungen, DHCPLeaseObtained und DHCPLeaseExpires, werden als DATETIME-Wert zurückgegeben. Der angezeigte unformatierte Wert sieht folgendermaßen aus:

20021201000230.000000+000

Die ersten vier Ziffern stehen für das Jahr; die jeweils folgenden beiden Ziffern stehen für den Monat, den Tag, Stunden, Minuten, Sekunden usw. Sie können die Bedeutung herausfinden – obwohl dies u. U. einige Zeit in Anspruch nimmt.

Unter Windows XP und Windows Server 2003 wurde ein neues SwbemDateTime-Objekt zur WMI-Skripterstellungs-API hinzugefügt. Dieses Objekt erleichtert die Analyse und Konvertierung von DATETIME-Werten, wenn auf allen Clients Windows XP und Windows Server 2003 ausgeführt wird.

Falls diese Betriebssysteme jedoch nicht auf allen Netzwerkhosts ausgeführt werden, besteht eine praktischere, weniger komplizierte Lösung darin, DATETIME-Werte mithilfe der Zeichenfolgenverarbeitungsfunktionen von VBScript in ein lesbares Format zu konvertieren.

Zum Konvertieren des DATETIME-Wertes in ein lesbareres Format ruft Dhcpsettings in diesem Skript die Funktion WMIDateToString() auf und übergibt ihr den Wert als Parameter. Die Funktion transformiert den Wert mithilfe der integrierten VBScript-Zeichenfolgenfunktionen Mid() und Left(). Anschließend ruft sie die VBScript-Funktion CDate() auf, um den Variantenwert (den Typ aller VBScript-Variablen) in den Datentyp Date umzuwandeln, und gibt das formatierte Datum an den Hauptteil des Skripts zurück.

Weitere Informationen zum WMI-Format DATETIME finden Sie unter "Festlegen der Uhrzeit auf einem Computer mithilfe von WMI" weiter unten in diesem Dokument.

Schritte zur Skripterstellung

Das Skript in Listing 19 zeigt die DHCP-Einstellungen für die einzelnen Netzwerkadapterkonfigurationen auf einem Computer an.

1.

Erstellen Sie eine Variable, und weisen Sie ihr den Namen eines Computers zu. Geben Sie für den lokalen Computer einfach "." als Computernamen an. Wenn Sie dieses Skript remote ausführen möchten, geben Sie den Namen eines verfügbaren Remotecomputers im Netzwerk an, für den Sie Administratorrechte besitzen. Der Name kann aus einem Hostnamen oder einer IP-Adresse bestehen.

2.

Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2 auf dem angegebenen Computer, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.

3.

Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird.

Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist.

4.

Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben aus.

5.

Rufen Sie die Get-Methode für die Klasse objWMIService auf, um einen Objektverweis auf die Instanz von Win32_NetworkAdapter zu erhalten, deren DeviceID-Eigenschaft gleich der Index-Eigenschaft der aktuellen Instanz von Win32_NetworkAdapterConfiguration ist.

6.

Rufen Sie den Wert der DNSHostName-Eigenschaft von Win32_NetworkAdapterConfiguration auf, und weisen Sie diesen einer Variablen zu.

7.

Rufen Sie den Wert der NetConnectionID-Eigenschaft der Klasse Win32_NetworkAdapter ab, und weisen Sie diesen einer Variablen zu. Wenn dies einen Fehler auslöst, verwenden Sie stattdessen die Index-Eigenschaft von Win32_NetworkAdapterConfiguration.

8.

Rufen Sie die DHCPEnabled-Eigenschaft der Klasse Win32_NetworkAdapterConfiguration ab, und weisen Sie sie einer Variablen zu.

9.

Wenn der Wert der DHCPEnabled-Eigenschaft True lautet (DHCP auf dem aktuellen Netzwerkadapter also aktiviert ist), rufen Sie die anderen Eigenschaften für die IP-Adresszuweisung ab, und weisen Sie sie Variablen zu.

10.

Übergeben Sie die Werte der Eigenschaften DHCPLeaseObtained und DHCPLeaseExpires der Klasse Win32_NetworkAdapterConfiguration als Parameter an die WMIDateToString-Funktion. Diese Funktion konvertiert das von den beiden Eigenschaften zurückgegebene DATETIME-Format in lesbarere Zeichenfolgen.

11.

Verketten Sie die Variablen zu einer langen Zeichenfolge, und zeigen Sie diese mit WScript.Echo an.

Listing 19 Dhcpsettings.vbs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
On Error Resume Next

 strComputer = "."

 Set objWMIService = GetObject("winmgmts:" _
 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colNicConfigs = objWMIService.ExecQuery _
 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

 For Each objNicConfig In colNicConfigs
  strDNSHostName = objNicConfig.DNSHostName
  strIndex = objNicConfig.Index
  strDescription = objNicConfig.Description
  blnDHCPEnabled = objNicConfig.DHCPEnabled
  If blnDHCPEnabled Then
    strDHCPServer = objNicConfig.DHCPServer
    dtmRawLeaseObtainedDate = objNicConfig.DHCPLeaseObtained
    strDHCPLeaseObtained = WMIDateToString(dtmRawLeaseObtainedDate)
    dtmRawLeaseExpiresDate = objNicConfig.DHCPLeaseExpires
    strDHCPLeaseExpires = WMIDateToString(dtmRawLeaseExpiresDate)
  End If
  strDHCPSettings = strDHCPSettings & VbCrLf & VbCrLf & _
   "  Network Adapter " & strIndex & VbCrLf & _
   "    " & strDescription & VbCrLf & VbCrLf & _
   "    DHCP Enabled:        " & blnDHCPEnabled
  If blnDHCPEnabled Then
    strDHCPSettings = strDHCPSettings & VbCrLf & _
     "    DHCP Server:         " & strDHCPServer & VbCrLf & _
     "    DHCP Lease Obtained: " & strDHCPLeaseObtained & VbCrLf & _
     "    DHCP Lease Expires:  " & strDHCPLeaseExpires
  End If
Next

 WScript.Echo VbCrLf & "DHCP Settings" & VbCrLf & VbCrLf & _
 "Host Name: " & strDNSHostName & strDHCPSettings

 '******************************************************************************

 Function WMIDateToString(dtmDate)

 WMIDateToString = CDate(Mid(dtmDate, 5, 2) & "/" & _
                  Mid(dtmDate, 7, 2) & "/" & _
                  Left(dtmDate, 4) & " " & _
                  Mid(dtmDate, 9, 2) & ":" & _
                  Mid(dtmDate, 11, 2) & ":" & _
                  Mid(dtmDate, 13, 2))

 End Function

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt:

C:\scripts>dhcpsettings.vbs

DHCP Settings

Host Name: client1

Network Adapter 1

3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet

Scheduler Miniport

DHCP Enabled: True

DHCP Server: 192.168.0.1

DHCP Lease Obtained: 5/13/2004 6:34:24 PM

DHCP Lease Expires: 5/23/2004 9:34:24 PM

Aktivieren von DHCP auf einem Client

Das Automatisieren der Konfiguration von DHCP auf Clients kann sinnvoll sein, wenn ein Remoteclient oder eine Gruppe von Remoteclients von der Verwendung einer statischen IP-Adresse auf automatisches Beziehen der IP-Adresse konvertiert werden muss. Je nach Konfiguration der DHCP- und DNS-Server kann es dem Client durch das Aktivieren von DHCP auch ermöglicht werden, die Adressen für DNS-Server und Standardgateway vom DHCP-Server zu beziehen.

Das folgende Skript zeigt die Verwendung der Win32_NetworkAdapterConfiguration-Methode EnableDHCP, die DHCP für den Dienst auf dem Netzwerkadapter eines Clients aktiviert. Die Methode verwendet keine Parameter. Bei einem Client mit mehreren Netzwerkadaptern, wie z. B. einem zweifach vernetzten Computer, können Sie das Skript so anpassen, dass nur ein bestimmter Adapter aktiviert wird.

Schritte zur Skripterstellung

caution.gif Vorsicht
Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen.

Das Skript in Listing 20 aktiviert DHCP für jede Netzwerkadapterkonfiguration auf einem Computer.

1.

Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2 auf dem angegebenen Computer, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.

2.

Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird.

Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist.

3.

Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben aus.

4.

Zeigen Sie die Indexnummer und Beschreibung für den Netzwerkadapter an.

5.

Überprüfen Sie, ob DHCP bereits aktiviert ist.

6.

Falls DHCP nicht aktiviert ist, rufen Sie die EnableDHCP-Methode der Klasse Win32_NetworkAdapterConfiguration auf.

7.

Wenn die EnableDHCP-Methode

den Wert 0 zurückgibt, zeigen Sie eine Erfolgsnachricht an.

einen anderen Wert als 0 zurückgibt zeigen Sie eine Fehlermeldung an.

8.

Falls DHCP bereits aktiviert ist, zeigen Sie eine entsprechende Meldung mit der IP-Adresse des DHCP-Servers an.

Listing 20 Dhcp-enable.vbs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
On Error Resume Next

 strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
  & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colNicConfigs = objWMIService.ExecQuery _
  ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

 For Each objNicConfig In colNicConfigs
    WScript.Echo VbCrLf & "  Network Adapter " & objNicConfig.Index & _
      VbCrLf & "    " & objNicConfig.Description & VbCrLf
    If Not objNicConfig.DHCPEnabled Then
        WScript.Echo "    Enabling DHCP ..."
        intReturn = objNicConfig.EnableDHCP
        If intReturn = 0 Then
            strSuccess = "    DHCP enabled."
        Else
            strSuccess = "    Unable to enable DHCP."
        End If
        WScript.Echo VbCrLf & strSuccess

     Else
        WScript.Echo "    DHCP already enabled" & VbCrLf & _
          "    DHCP Server: " & objNicConfig.DHCPServer
    End If
Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt:

C:\scripts\netcli>dhcp-enable.vbs

Network Adapter 1

3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet

Scheduler Miniport

Enabling DHCP ...

DHCP enabled.

Verwalten von DHCP-Leases

DHCP weist IP-Adressen in der Regel nur für bestimmte Zeiträume zu. Diese temporäre Adresszuweisung wird als Lease bezeichnet. Die Administratoren eines DHCP-Servers können die Standarddauer für eine Lease konfigurieren, die von Faktoren wie der Häufigkeit des Hinzufügens oder Entfernens von Netzwerkclients oder der Anzahl von Adressen und Clients in einem Subnetz abhängig ist.

DHCP-Clients und -Server sind so konzipiert, dass sie Leases vor deren Ablauf automatisch erneut aushandeln. Sie können Leases aber auch manuell oder programmgesteuert freigeben oder erneuern. Zu diesem Zweck stellt beispielsweise das Befehlszeilentool Ipconfig.exe Parameter bereit.

Die Klasse Win32_NetworkAdapterConfiguration enthält vier Methoden auf Adapterbasis, die Ihnen die Verwaltung von DHCP-Leases für die Klasseninstanzen ermöglichen: ReleaseDHCPLease, ReleaseDHCPLeaseAll, RenewDHCPLease und RenewDHCPLeaseAll. Sie können alle Leases auch auf einfache Weise freigeben oder erneuern, indem Sie eine Iteration durch die Auflistung von Netzwerkadapterkonfigurationen durchführen und dabei jeweils ReleaseDHCPLease bzw. RenewDHCPLease verwenden.

Freigeben von DHCP-Leases

Durch die Freigabe einer DHCP-Lease für einen Netzwerkadapter wird dieser vom Netzwerk getrennt und die IP-Adresse für die Zuweisung an andere Hosts freigegeben. Der Befehl ipconfig.exe/release führt diese Aufgabe auf allen Netzwerkadaptern oder auf einem bestimmten Adapter aus.

Eine Situation, in der eine DHCP-Lease auf einem Client möglicherweise freigegeben werden soll, ist die Reservierung eines Bereichs (von IP-Adressen) auf einem DHCP-Server für permanente Leasezuweisung. Einige der im Bereich reservierten Adressen werden eventuell bereits von vorhandenen Clients verwendet, die in diesen Bereich nicht einbezogen werden. Durch das Hinzufügen einer IP-Adresse zu einem Bereich auf dem DHCP-Server wird die Adresse auf dem Client, in dem sie momentan enthalten ist, noch nicht automatisch freigegeben.

Das folgende Skript zeigt eine Möglichkeit zur Behebung dieses Problems. Es führt eine Iteration durch die Auflistung von Netzwerkadapterkonfigurationen durch und verwendet die ReleaseDHCPLease-Methode, um die Lease für jede der Konfigurationen freizugeben. Sie können dieses Skript für die Freigabe der Lease auf einem Remoteclient problemlos anpassen, indem Sie die folgende Zeile ändern:

strComputer = "."

Ersetzen Sie den lokalen Computer (".") durch die IP-Adresse, die für die Reservierung freigegeben werden muss, beispielsweise:

strComputer = "192.168.0.135"

Wie bei allen WMI-Remotevorgängen muss der Benutzer über die entsprechenden Administratorrechte auf dem Remotecomputer verfügen.

Schritte zur Skripterstellung

caution.gif Vorsicht
Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen.

Das Skript in Listing 21 zeigt zunächst die DHCP-Einstellungen für die einzelnen Netzwerkadapter an. Anschließend überprüft es bei jedem Netzwerkadapter, ob DHCP aktiviert ist. Wenn dies zutrifft, gibt es die DHCP-Lease frei.

1.

Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2 auf dem angegebenen Computer, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.

2.

Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird.

Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist.

3.

Zeigen Sie den Text "Settings before releasing lease" an.

4.

Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Schritte aus.

5.

Zeigen Sie die Indexnummer, die Beschreibung und die Mitteilung an, ob DHCP für jeden Adapter aktiviert ist.

6.

Wenn DHCP aktiviert ist, rufen Sie die Daten ab, an denen die DHCP-Lease bezogen wurde und an denen sie ablaufen wird. Konvertieren Sie diese Daten in ein lesbares Format, indem Sie die WMIDateToString-Funktion aufrufen.

Zeigen Sie die IP-Adresse des DHCP-Servers und die Leasedaten an.

7.

Rufen Sie die ReleaseDHCPLease-Methode der Klasse Win32_NetworkAdapterConfiguration auf, und warten Sie dann 5 Sekunden, bis der Freigabeprozess beendet ist.

important.gif Wichtig
Wenn ein Client eine IP-Adresse über DHCP bezieht, wird er durch die Freigabe der Lease möglicherweise vom Netzwerk getrennt.

8.

Abhängig von Rückgabewert der ReleaseDHCP-Methode machen Sie folgende Ausgaben:

0 – zeigen Sie eine Meldung an, dass die Lease freigegeben wurde.

1 – zeigen Sie eine Meldung an, dass die Lease freigegeben wurde und der Computer neu gestartet werden muss.

Einen Wert größer als 1 – zeigen Sie eine Meldung an, dass die Lease nicht freigegeben werden kann.

9.

Fragen Sie die Klasse Win32_NetworkAdapterConfiguration erneut ab, und filtern Sie sie erneut nur nach IP-Adaptern. Diese erneute Abfrage ist erforderlich, weil jede Abfrage einen Snapshot der bestehenden Einstellungen zum Zeitpunkt ihrer Ausführung zurückgibt und nicht automatisch aktualisiert wird, wenn die Einstellungen anschließend geändert werden.

10.

Zeigen Sie die gleichen DHCP-Einstellungen wie zuvor erneut an.

11.

Die WMIDateToString-Funktion verwendet einen Wert im WMI-Format DATETIME und konvertiert ihn in eine Zeichenfolge, die Datum und Uhrzeit in einem lesbareren Format darstellt.

Listing 21 Dhcp-releaselease.vbs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
On Error Resume Next

 strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
  & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colNicConfigs = objWMIService.ExecQuery _
  ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

 WScript.Echo VbCrLf & "Settings before releasing lease"

 For Each objNicConfig In colNicConfigs

     blnDHCPEnabled = objNicConfig.DHCPEnabled

     WScript.Echo VbCrLf & _
      "  Network Adapter " & objNicConfig.Index & VbCrLf & _
      "    " & objNicConfig.Description & VbCrLf & VbCrLf & _
      "    DHCP Enabled:        " & blnDHCPEnabled

     If blnDHCPEnabled Then

         dtmLeaseObtainedDate = objNicConfig.DHCPLeaseObtained
        strDHCPLeaseObtained = WMIDateToString(dtmLeaseObtainedDate)
        dtmLeaseExpiresDate = objNicConfig.DHCPLeaseExpires
        strDHCPLeaseExpires = WMIDateToString(dtmLeaseExpiresDate)

         WScript.Echo "    DHCP Server:         " & objNicConfig.DHCPServer & _
          VbCrLf & "    DHCP Lease Obtained: " & strDHCPLeaseObtained & _
          VbCrLf & "    DHCP Lease Expires:  " & strDHCPLeaseExpires

         intReleaseReturn = objNicConfig.ReleaseDHCPLease
        WScript.Sleep 5000

         If (intReleaseReturn = 0 Or intReleaseReturn = 1) Then
            strSuccess = "    DHCP lease released."
            If intReleaseReturn = 1 Then
                strSuccess = strSuccess & " Must reboot machine."
            End If
        Else
            strSuccess = "    Unable to release DHCP lease."
        End If

         WScript.Echo VbCrLf & strSuccess

     End If

 Next

 Set colNicConfigs = objWMIService.ExecQuery _
  ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

 WScript.Echo VbCrLf & "Settings after releasing lease"

 For Each objNicConfig In colNicConfigs

     blnDHCPEnabled = objNicConfig.DHCPEnabled

     WScript.Echo VbCrLf & _
      "  Network Adapter " & objNicConfig.Index & VbCrLf & _
      "    " & objNicConfig.Description & VbCrLf & VbCrLf & _
      "    DHCP Enabled:        " & blnDHCPEnabled

     If blnDHCPEnabled Then

         dtmLeaseObtainedDate = objNicConfig.DHCPLeaseObtained
        strDHCPLeaseObtained = WMIDateToString(dtmLeaseObtainedDate)
        dtmLeaseExpiresDate = objNicConfig.DHCPLeaseExpires
        strDHCPLeaseExpires = WMIDateToString(dtmLeaseExpiresDate)

         WScript.Echo "    DHCP Server:         " & objNicConfig.DHCPServer & _
          VbCrLf & "    DHCP Lease Obtained: " & strDHCPLeaseObtained & _
          VbCrLf & "    DHCP Lease Expires:  " & strDHCPLeaseExpires

     End If

 Next

 '******************************************************************************
' Function: WMIDateToString(dtmDate)
' Converts WMI date to string.
'******************************************************************************

 Function WMIDateToString(dtmDate)
    WMIDateToString = CDate(Mid(dtmDate, 5, 2) & "/" & _
                      Mid(dtmDate, 7, 2) & "/" & _
                      Left(dtmDate, 4) & " " & _
                      Mid(dtmDate, 9, 2) & ":" & _
                      Mid(dtmDate, 11, 2) & ":" & _
                      Mid(dtmDate, 13, 2))
End Function

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt:

C:\scripts>dhcp-releaselease.vbs

Settings before releasing lease

Network Adapter 1

3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet

Scheduler Miniport

DHCP Enabled: True

DHCP Server: 192.168.0.1

DHCP Lease Obtained: 5/30/2004 8:41:23 PM

DHCP Lease Expires: 6/9/2004 11:41:23 PM

DHCP lease released.

Settings after releasing lease

Network Adapter 1

3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet

Scheduler Miniport

DHCP Enabled: True

DHCP Server: 255.255.255.255

DHCP Lease Obtained: 6/1/2004 2:15:08 PM

DHCP Lease Expires: 6/1/2004 3:15:08 PM

Erneuern von DHCP-Leases

DHCP ermöglicht es auch, dass Leases auf dem Client manuell oder programmgesteuert erneuert werden, indem der normale Prozess des erneuten Aushandelns zwischen Client und Server umgangen wird. Der Befehl ipconfig.exe/renew führt diese Aufgabe für alle Netzwerkadapter oder einen bestimmten Adapter aus.

Das folgende Skript führt eine Iteration durch die Auflistung von Netzwerkadapterkonfigurationen durch und verwendet die RenewDHCPLease-Methode, um die Lease für jede der Konfigurationen zu erneuern.

Schritte zur Skripterstellung

caution.gif Vorsicht
Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen.

Das Skript in Listing 22 zeigt zunächst die DHCP-Einstellungen für die einzelnen Netzwerkadapter an, und überprüft dann bei jedem Adapter, ob DHCP aktiviert ist. Wenn dies zutrifft, wird die DHCP-Lease erneuert.

Führen Sie dazu die folgenden Schritte im Skript aus:

1.

Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2 auf dem angegebenen Computer, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.

2.

Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird.

Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist.

3.

Zeigen Sie den Text "Settings before renewing lease" an.

4.

Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Schritte aus.

5.

Zeigen Sie die Indexnummer, die Beschreibung und die Mitteilung an, ob DHCP für jeden Adapter aktiviert ist.

6.

Wenn DHCP aktiviert ist, rufen Sie die Daten ab, an denen die DHCP-Lease bezogen wurde und an denen sie ablaufen wird. Konvertieren Sie diese Daten in ein lesbares Format, indem Sie die WMIDateToString-Funktion aufrufen.

Zeigen Sie die IP-Adresse des DHCP-Servers und die Daten an, an denen die Lease bezogen wurde und ablaufen wird.

7.

Rufen Sie die RenewDHCPLease-Methode der Klasse Win32_NetworkAdapterConfiguration auf, und warten Sie dann 5 Sekunden, bis der Erneuerungsprozess beendet ist.

8.

Nehmen Sie abhängig vom Rückgabewert der RenewDHCP-Methode eine entsprechende Ausgabe vor:

0 – zeigen Sie eine Meldung an, dass die Lease erneuert wurde.

1 – zeigen Sie eine Meldung an, dass die Lease erneuert wurde und der Computer neu gestartet werden muss.

Einen Wert größer als 1 – zeigen Sie eine Meldung an, dass die Lease nicht erneuert werden kann.

9.

Fragen Sie die Klasse Win32_NetworkAdapterConfiguration erneut ab, und filtern Sie sie erneut nur nach IP-Adaptern. Diese erneute Abfrage ist erforderlich, weil jede Abfrage einen Snapshot der bestehenden Einstellungen zum Zeitpunkt ihrer Ausführung zurückgibt und nicht automatisch aktualisiert wird, wenn die Einstellungen anschließend geändert werden.

10.

Zeigen Sie die gleichen DHCP-Einstellungen wie zuvor erneut an.

11.

Die WMIDateToString-Funktion verwendet einen Wert im WMI-Format DATETIME und konvertiert ihn in eine Zeichenfolge, die Datum und Uhrzeit in einem lesbareren Format darstellt.

Listing 22 Dhcp-renewlease.vbs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
On Error Resume Next
 
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
  & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colNicConfigs = objWMIService.ExecQuery _
  ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
 
WScript.Echo VbCrLf & "Settings before renewing lease"
 
For Each objNicConfig In colNicConfigs
 
    blnDHCPEnabled = objNicConfig.DHCPEnabled
 
    WScript.Echo VbCrLf & _
      "  Network Adapter " & objNicConfig.Index & VbCrLf & _
      "    " & objNicConfig.Description & VbCrLf & VbCrLf & _
      "    DHCP Enabled:        " & blnDHCPEnabled
 
    If blnDHCPEnabled Then
 
        dtmLeaseObtainedDate = objNicConfig.DHCPLeaseObtained
        strDHCPLeaseObtained = WMIDateToString(dtmLeaseObtainedDate)
        dtmLeaseExpiresDate = objNicConfig.DHCPLeaseExpires
        strDHCPLeaseExpires = WMIDateToString(dtmLeaseExpiresDate)
 
        WScript.Echo "    DHCP Server:         " & objNicConfig.DHCPServer & _
          VbCrLf & "    DHCP Lease Obtained: " & strDHCPLeaseObtained & _
          VbCrLf & "    DHCP Lease Expires:  " & strDHCPLeaseExpires
 
        intRenewReturn = objNicConfig.RenewDHCPLease
        WScript.Sleep 5000
 
        If (intRenewReturn = 0 Or intRenewReturn = 1) Then
            strSuccess = "    DHCP lease renewed."
            If intRenewReturn = 1 Then
                strSuccess = strSuccess & " Must reboot machine."
            End If
        Else
            strSuccess = "    Unable to renew DHCP lease."
        End If
 
        WScript.Echo VbCrLf & strSuccess
 
    End If
 
Next
 
Set colNicConfigs = objWMIService.ExecQuery _
  ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
 
WScript.Echo VbCrLf & "Settings after renewing lease"
 
For Each objNicConfig In colNicConfigs
 
    blnDHCPEnabled = objNicConfig.DHCPEnabled
 
    WScript.Echo VbCrLf & _
      "  Network Adapter " & objNicConfig.Index & VbCrLf & _
      "    " & objNicConfig.Description & VbCrLf & VbCrLf & _
      "    DHCP Enabled:        " & blnDHCPEnabled
 
    If blnDHCPEnabled Then
 
        dtmLeaseObtainedDate = objNicConfig.DHCPLeaseObtained
        strDHCPLeaseObtained = WMIDateToString(dtmLeaseObtainedDate)
        dtmLeaseExpiresDate = objNicConfig.DHCPLeaseExpires
        strDHCPLeaseExpires = WMIDateToString(dtmLeaseExpiresDate)
 
        WScript.Echo "    DHCP Server:         " & objNicConfig.DHCPServer & _
          VbCrLf & "    DHCP Lease Obtained: " & strDHCPLeaseObtained & _
          VbCrLf & "    DHCP Lease Expires:  " & strDHCPLeaseExpires
 
    End If
 
Next
 
'******************************************************************************
' Function: WMIDateToString(dtmDate)
' Converts WMI date to string.
'******************************************************************************
 
Function WMIDateToString(dtmDate)
    WMIDateToString = CDate(Mid(dtmDate, 5, 2) & "/" & _
                      Mid(dtmDate, 7, 2) & "/" & _
                      Left(dtmDate, 4) & " " & _
                      Mid(dtmDate, 9, 2) & ":" & _
                      Mid(dtmDate, 11, 2) & ":" & _
                      Mid(dtmDate, 13, 2))
End Function

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt:

C:\scripts>dhcp-renewlease.vbs

Settings before renewing lease

Network Adapter 1

3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet

Scheduler Miniport

DHCP Enabled: True

DHCP Server: 255.255.255.255

DHCP Lease Obtained: 6/1/2004 2:15:08 PM

DHCP Lease Expires: 6/1/2004 3:15:08 PM

DHCP lease renewed.

Settings after renewing lease

Network Adapter 1

3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet

Scheduler Miniport

DHCP Enabled: True

DHCP Server: 192.168.0.1

DHCP Lease Obtained: 6/1/2004 2:15:56 PM

DHCP Lease Expires: 6/11/2004 5:15:56 PM

Verwalten statischer IP-Adressen

Bei sehr kleinen Netzwerken kann DHCP des Guten zu viel sein. Deshalb verwalten Sie die IP-Adresszuweisung möglicherweise, indem Sie allen Clients statische IP-Adressen zuweisen. Sogar bei größeren und komplexeren Netzwerken können manche Hosts – wie Netzwerkserver und Domänencontroller – DHCP nicht verwenden, so dass ihnen statische IP-Adressen zugewiesen werden müssen. Diese Adressen müssen außerdem der Ausschlussliste für den Bereich auf dem DHCP-Server hinzugefügt werden.

Wie bei den meisten anderen Bereichen der Netzwerkclientkonfiguration stellt die WMI-Klasse Win32_NetworkAdapterConfiguration Methoden zum programmgesteuerten Lesen und Schreiben dieser Einstellungen bereit.

Konfigurieren einer statischen IP-Adresse

Das Skript in diesem Abschnitt, Staticip-enable.vbs, verwendet die EnableStatic()-Methode der Klasse Win32_NetworkAdapterConfiguration, um die IP-Adressen und Subnetzmasken des Netzwerkadapters festzulegen. Diese werden über die Eigenschaften IPAddress und IPSubnet bereitgestellt. Weil diese Einstellungen mehr als einen Wert aufweisen können, handelt es sich bei den Datentypen der beiden Eigenschaften um ein Zeichenfolgenarray.

Die EnableStatic()-Methode deaktiviert außerdem DHCP. Das Skript enthält den grundlegenden Code für diese Aufgabe. Einem Client, dem eine statische IP-Adresse zugewiesen wird, muss jedoch außerdem ein Standardgateway und ein DNS-Server zugewiesen werden, bevor er die Netzwerkkonnektivität erneut herstellen kann. Das Skript im nächsten Abschnitt, Staticip-enableex.vbs, zeigt, wie die Skripterstellung für diese Reihe von Aufgaben erfolgen muss.

Beide Skripts weisen keine neue statische IP-Adresse zu, wenn bereits eine statische Adresse aktiviert ist. Falls Sie jedoch eine neue statische IP-Adresse zuweisen müssen, wenn eine andere statische Adresse bereits konfiguriert wurde, können Sie das Skript problemlos anpassen, indem Sie die folgenden Zeilen löschen:

If objNicConfig.DHCPEnabled Then
...
Else
  WScript.Echo "    Static IP address already enabled."
End If

Schritte zur Skripterstellung

caution.gif Vorsicht
Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen.

Das Skript in Listing 23 überprüft bei jedem Netzwerkadapter, ob DHCP aktiviert ist. Wenn dies zutrifft, aktiviert das Skript die statische IP-Adressierung, indem es eine IP-Adresse und eine Subnetzmaske zuweist und DHCP auf dem Client deaktiviert. Möglicherweise müssen die Konfigurationsänderungen auch an den DHCP-Server übertragen werden, damit die von DHCP geleaste alte IP-Adresse freigegeben und die neue statische IP-Adresse registriert wird.

Das in diesem Skript gezeigte Verfahren selbst reicht nicht aus, um die Netzwerkkonnektivität mit einer statischen IP-Adresse erneut herzustellen. Das Standardgateway und die DNS-Server müssen ebenfalls festgelegt werden, wie es mithilfe des nächsten Skripts geschieht. Bei diesem Skript müssten Sie Standardgateway und DNS-Server manuell festlegen.

Um DHCP zu deaktivieren und eine statische IP-Adresse und Subnetzmaske einem Client zuzuweisen, müssen Sie im Skript die folgenden Schritte ausführen:

1.

Erstellen Sie zwei Arrays mit jeweils einem Element: Das erste Array enthält die zuzuweisende statische IP-Adresse; das zweite Array enthält die Subnetzmaske.

2.

Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2 auf dem angegebenen Computer, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.

3.

Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird.

Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist.

4.

Durchlaufen Sie jede Netzwerkadapterkonfiguration in der Auflistung in einer Schleife, und führen Sie dabei jeweils die folgenden Schritte aus.

5.

Zeigen Sie die Indexnummer und Beschreibung für den Netzwerkadapter an.

6.

Falls DHCP auf dem Adapter aktiviert ist, rufen Sie die EnableStatic-Methode der Klasse Win32_NetworkAdapterConfiguration auf, und übergeben Sie ihr die beiden Arrayvariablen, die bereits mit den benötigten IP-Adressen und Subnetzmasken initialisiert wurden.

7.

Nehmen Sie abhängig vom Rückgabewert der Methode EnableStatic folgende Ausgaben vor:

0 (= erfolgreich) – zeigen Sie die neuen IP-Adressen und Subnetzmasken an.

1 – zeigen Sie eine Erfolgsnachricht mit dem Hinweis an, dass der Computer neu gestartet werden muss, und inkrementieren Sie den Neustartzähler.

Einen anderen Wert als 0 (= Fehler) – zeigen Sie eine entsprechende Fehlermeldung an.

8.

Falls DHCP nicht aktiviert ist, zeigen Sie eine Meldung an, dass die statische IP-Adressierung bereits aktiviert ist.

9.

Wenn ein Neustart erforderlich ist, lautete der Rückgabewert von EnableStatic bei mindestens einem Netzwerkadapter 1. Zeigen Sie eine Meldung an, dass der Computer neu gestartet werden muss, bevor die Änderungen wirksam werden.

Listing 23 Staticip-enable.vbs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
On Error Resume Next

 strComputer = "."
arrIPAddresses = Array("192.168.0.12")
arrSubnetMasks = Array("255.255.255.0")
intReboot = 0

 Set objWMIService = GetObject("winmgmts:" _
 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colNicConfigs = objWMIService.ExecQuery _
 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

 For Each objNicConfig In colNicConfigs
  WScript.Echo VbCrLf & "  Network Adapter " & objNicConfig.Index & _
   VbCrLf & "    " & objNicConfig.Description & VbCrLf
  If objNicConfig.DHCPEnabled Then
    WScript.Echo "    Disabling DHCP, enabling static IP address..."
    intReturn = objNicConfig.EnableStatic(arrIPAddresses, arrSubnetMasks)
    If intReturn = 0 Then
      strIPAddresses = Join(arrIPAddresses, ",")
      strSubnetMasks = Join(arrSubnetMasks, ",")
      WScript.Echo "    DHCP disabled, static IP address enabled." & _
        VbCrLf & "    IP Addresses: " & strIPAddresses & VbCrLf & _
       "    Subnet Masks: " & strSubnetMasks
    ElseIf intReturn = 1 Then
      intReboot = intReboot + 1
      WScript.Echo "    DHCP disabled, static IP address enabled. " & _
       VbCrLf & "    Reboot required."
    Else
      WScript.Echo "    Unable to enable static IP address."
    End If
  Else
    WScript.Echo "    Static IP address already enabled."
  End If
Next
If (intReboot > 0) Then
  WScript.Echo VbCrLf & "You must reboot this machine before changes " & _
   "will take effect."
End If

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt:

C:\scripts>staticip-enable.vbs

Network Adapter 1

3Com 3C918 Integrated Fast Ethernet Controller (3C905B-TX Compatible)

Disabling DHCP, enabling static IP ...

DHCP disabled, static IP address enabled.

Reboot required.

You must reboot this machine before changes will take effect.

Konfigurieren von Gateways, DNS und WINS für statische IP-Adressen

Wenn Sie die Netzwerkkonnektivität bei einem Client erneut herstellen möchten, nachdem Sie die statische IP-Adressierung aktiviert sowie eine IP-Adresse und Subnetzmaske zugewiesen haben, müssen Sie auch neue Standardgateways, die Suchreihenfolge für DNS-Server und die WINS-Server festlegen (falls WINS im Netzwerk eingesetzt wird). Das Skript sollte die zweite Reihe von Aufgaben aber nur dann ausführen, wenn eine statische IP-Adresse und ein Subnetz erfolgreich zugewiesen wurden. Aus diesem Grund muss das Script bei dieser Aufgabe zwei verschiedene Bedingungen überprüfen.

Schritte zur Skripterstellung

caution.gif Vorsicht
Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen.

Das Skript in Listing 24 überprüft bei jedem Netzwerkadapter, ob DHCP aktiviert ist. Wenn dies zutrifft, aktiviert das Skript eine statische IP-Adresse, indem es die Adresse und Subnetzmaske zuweist und DHCP deaktiviert. Nach erfolgreichem Abschluss dieser Aufgaben weist das Skript ein Standardgateway sowie DNS- und WINS-Server zu.

1.

Erstellen Sie Variablen zur Angabe aller erforderlichen Parameter.

2.

Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2 auf dem angegebenen Computer, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.

3.

Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird.

Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist.

4.

Durchlaufen Sie jede Netzwerkadapterkonfiguration in der Auflistung in einer Schleife, und führen Sie dabei jeweils die folgenden Schritte aus.

5.

Zeigen Sie die Indexnummer und Beschreibung für den Netzwerkadapter an.

6.

Falls DHCP auf dem Adapter aktiviert ist, rufen Sie die EnableStatic-Methode der Klasse Win32_NetworkAdapterConfiguration auf, und übergeben Sie ihr die beiden Arrayvariablen, die bereits mit den gewünschten IP-Adressen und Subnetzmasken initialisiert wurden.

7.

Wenn EnableStatic den Wert 0 (= erfolgreich) zurückgibt, rufen Sie die Get-Methode der Klasse Win32_NetworkAdapterConfiguration auf, um nur die aktuelle Instanz zurückzugeben. Filtern Sie dabei mit der Index-Eigenschaft, über die WMI die Instanz eindeutig identifiziert.

8.

Rufen Sie die Methoden SetGateways, SetDNSServerSearchOrder und SetWINSServer für die aktuelle Instanz des Netzwerkadapters auf, und übergeben Sie ihnen die entsprechenden Variablen als Parameter.

9.

Überprüfen Sie die Rückgabewerte für die einzelnen Methoden, und zeigen Sie jeweils eine Erfolgsnachricht oder eine Fehlermeldung an.

10.

Führen Sie abhängig vom Rückgabewert der Methode EnableStatic folgende Ausgaben durch:

1 – zeigen Sie eine Erfolgsnachricht mit dem Hinweis an, dass der Computer neu gestartet werden muss, und inkrementieren Sie den Neustartzähler.

Einen anderen Wert als 0 oder 1 (= Fehler) – zeigen Sie eine entsprechende Fehlermeldung an.

11.

Falls DHCP nicht aktiviert ist, zeigen Sie eine Meldung an, dass die statische IP-Adressierung bereits aktiviert ist.

12.

Unter Umständen ist ein Neustart erforderlich:

Wenn EnableStatic Für mindestens einen Netzwerkadapter den Wert 1 zurückgibt zeigen Sie eine Meldung an, dass der Computer neu gestartet werden muss, bevor die Änderungen wirksam werden können. Danach beenden Sie das Skript.

Beim Wert 0 – fragen Sie die Klasse Win32_NetworkAdapterConfiguration erneut ab, und zeigen Sie die neuen Einstellungen für die einzelnen Netzwerkadapter mit allen vorgenommenen Änderungen an.

Listing 24 Staticip-enableex.vbs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
On Error Resume Next

 strComputer = "."
arrIPAddresses = Array("192.168.0.12")
arrSubnetMasks = Array("255.255.255.0")
arrDefaultGateways = Array("192.168.0.1")
arrGatewayCostMetrics = Array(1) ' uint16
arrDNSServers = Array("192.168.0.1")
strWINSPrimaryServer = "192.168.0.1"
strWINSSecondaryServer = "192.168.0.2"
intReboot = 0

 Set objWMIService = GetObject("winmgmts:" _
 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colNicConfigs = objWMIService.ExecQuery _
 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

 WScript.Echo VbCrLf & "Host Name: " & strComputer
WScript.Echo VbCrLf & "Settings before:"

 For Each objNicConfig In colNicConfigs
  WScript.Echo VbCrLf & _
   "  Network Adapter " & objNicConfig.Index & VbCrLf & _
   "    " & objNicConfig.Description & VbCrLf
  If objNicConfig.DHCPEnabled Then
    WScript.Echo "    Disabling DHCP, enabling static IP ..."
    intStaticReturn = objNicConfig.EnableStatic(arrIPAddresses, arrSubnetMasks)
    If intStaticReturn = 0 Then
      WScript.Echo "    DHCP disabled, static IP address enabled."
      Set objNicChanged = objWMIService.Get _
       ("Win32_NetworkAdapterConfiguration.Index=" & objNicConfig.Index)
      intGatewaysReturn = objNicChanged.SetGateways(arrDefaultGateways, _
       arrGatewayCostMetrics)
      If intGatewaysReturn <> 0 Then
        WScript.Echo "    Unable to assign default gateways."
      Else
        WScript.Echo "    Assigned new default gateways."
      End If
      intDNSServers = objNicChanged.SetDNSServerSearchOrder(arrDNSServers)
      If intDNSServers <> 0 Then
        WScript.Echo "    Unable to assign DNS servers."
      Else
        WScript.Echo "    Assigned new DNS servers."
      End If
      intWINSServers = objNicConfig.SetWINSServer(strWINSPrimaryServer, _
       strWINSSecondaryServer)
      If intWINSServers <> 0 Then
        WScript.Echo "   Unable to assign WINS servers."
      Else
        WScript.Echo "    Assigned new WINS servers."
      End If
    ElseIf intStaticReturn = 1 Then
      intReboot = intReboot + 1
      WScript.Echo "    DHCP disabled, static IP address enabled. " & _
       VbCrLf & "Reboot required."
    Else
      WScript.Echo "    Unable to enable static IP address."
    End If
  Else
    WScript.Echo "    Static IP address already enabled."
  End If
Next

 If (intReboot > 0) Then
  WScript.Echo VbCrLf & "You must reboot this machine before changes " & _
   "will take effect."
  WScript.Quit
Else
  Set colNicConfigs = objWMIService.ExecQuery("SELECT * FROM " & _
   "Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
  WScript.Echo VbCrLf & "Settings after"
  For Each objNicConfig In colNicConfigs
    WScript.Echo VbCrLf & _
     "  Network Adapter " & objNicConfig.Index & VbCrLf & _
     "    " & objNicConfig.Description & VbCrLf & VbCrLf & _
     "    DHCP Enabled:            " & objNicConfig.DHCPEnabled
    strIPAddresses = ""
    If Not IsNull(objNicConfig.IPAddress) Then
      For Each strIPAddress In objNicConfig.IPAddress
               strIPAddresses = strIPAddresses & VbCrLf & _
                  "                             " & strIPAddress
      Next
    End If
    WScript.Echo "    IP Addresses: " & strIPAddresses
    strIPSubnets = ""
    If Not IsNull(objNicConfig.IPSubnet) Then
      For Each strIPSubnet In objNicConfig.IPSubnet
        strIPSubnets = strIPSubnets & VbCrLf & _
         "                             " & strIPSubnet
      Next
    End If
    WScript.Echo "    Subnet Masks: " & strIPSubnets
    strDefaultIPGateways = ""
    If Not IsNull(objNicConfig.DefaultIPGateway) Then
      For Each strDefaultIPGateway In objNicConfig.DefaultIPGateway
        strDefaultIPGateways = strDefaultIPGateways & VbCrLf & _
         "                             " & strDefaultIPGateway
      Next
    End If
    WScript.Echo "    Default Gateways: " & strDefaultIPGateways
    strGatewayCostMetrics = ""
    If Not IsNull(objNicConfig.GatewayCostMetric) Then
      For Each strGatewayCostMetric In objNicConfig.GatewayCostMetric
        strGatewayCostMetrics = strGatewayCostMetrics & VbCrLf & _
         "                             " & strGatewayCostMetric
      Next
    End If
    WScript.Echo "    Gateway Cost Metrics: " & strGatewayCostMetrics
    strDNSServerSearchOrder = ""
    If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
      For Each strDNSServer In objNicConfig.DNSServerSearchOrder
        strDNSServerSearchOrder = strDNSServerSearchOrder & VbCrLf & _
         "                             " & strDNSServer
      Next
    End If
    WScript.Echo "    DNS Server Search Order: " & strDNSServerSearchOrder
    WScript.Echo "    WINS Primary Server:     " & _
     objNicConfig.WINSPrimaryServer
    WScript.Echo "    WINS Secondary Server:   " & _
     objNicConfig.WINSSecondaryServer
  Next
End If

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt:

C:\scripts>staticip-enableex.vbs

Host Name: .

Settings before:

Network Adapter 1

3Com 3C918 Integrated Fast Ethernet Controller (3C905B-TX Compatible)

Disabling DHCP, enabling static IP ...

DHCP disabled, static IP address enabled.

Reboot required.

You must reboot this machine before changes will take effect.

Szenario: Zuweisen von IP-Adressen in einem Subnetz

Dieses Szenario zeigt, wie IP-Adressen für Reservierungen und Ausschlüsse verwaltet werden. DHCP muss in einem Subnetz oder einem anderen Bereich von IP-Adressen aktiviert sein, während anderen Clients statische IP-Adressen aus demselben Pool zugewiesen werden, damit jedem Client immer nur eine IP-Adresse zugewiesen wird. Zur Ausführung dieser Aufgabe müssen die entsprechenden Änderungen auch auf dem DHCP-Server vorgenommen werden. Die Beschreibung der erforderlichen Verfahren zur Verwaltung des DHCP-Servers würde den Rahmen dieses Dokumentes jedoch überschreiten.

Ein Ansatz zum Automatisieren dieses Szenarios besteht in der Verwendung von zwei Skripts:

Dhcp-enable-subnet.vbs

Aktiviert DHCP für Clients mit einem Bereich von IP-Adressen, der vom Administrator festgelegt wird. Wenn DHCP auf einem Client bereits aktiviert ist, erneuert das Skript die Lease, um sicherzustellen, dass die DHCP-Einstellungen des Clients korrekt sind.

Staticip-enable-excl.vbs

Gibt DHCP-Leases auf Clients für eine Liste von IP-Adressen frei, die für Ausschlüsse auf dem DHCP-Server verwendet werden sollen. Aktiviert die statische IP-Adressierung auf diesen Clients und weist jedem Client eine IP-Adresse, eine Subnetzmaske, ein Standardgateway sowie einen DNS-Server zu.

Der Administrator muss den Bereich auf dem DHCP-Server separat konfigurieren, wobei er die entsprechenden Adressen reserviert und ausschließt. Die Beschreibungen der Reservierungen und Ausschlüsse auf dem DHCP-Server würden den Rahmen dieses Dokumentes jedoch überschreiten.

Da WMI über keinen DHCP-Dienstanbieter verfügt, sind die Skripterstellungsmöglichkeiten auf dem Server begrenzt. Mithilfe von Befehlszeilentools wie Netsh.exe können Sie einige Aufgaben auf dem DHCP-Server ausführen.

Szenario Teil 1: Konfigurieren von DHCP in einem Subnetz

Zum Automatisieren der ersten Reihe von Aufgaben in diesem Szenario stellt das erste Skript sicher, dass Clients innerhalb des korrekten Bereichs von IP-Adressen (festgelegt in den drei Variablen am Skriptanfang) innerhalb des Bereichs auf dem DHCP-Server für DHCP aktiviert sind. Falls dies nicht zutrifft, aktiviert das Skript DHCP auf den Clients. Wenn DHCP auf einem Client aber bereits aktiviert ist, erneuert das Skript die DHCP-Lease, um sicherzustellen, dass aktuelle Einstellungen vom Server abgerufen werden.

Schritte zur Skripterstellung

caution.gif Vorsicht
Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen.

Das Skript in Listing 25 führt eine Iteration durch einen Bereich von IP-Adressen durch und überprüft bei jedem Computer die einzelnen Netzwerkadapter, um festzustellen, ob DHCP aktiviert ist. Wenn dies nicht zutrifft, aktiviert es DHCP. Sie müssen den ersten Teil der IP-Adresse sowie die erste und letzte IP-Adresse des Bereichs angeben.

Bevor das Skript versucht, diese Änderungen an mehreren Netzwerkhosts vorzunehmen, führt es zwei Fehlerprüfungen durch: Das Skript pingt zunächst den Host an, um sicherzustellen, dass darauf zugegriffen werden kann. Anschließend überprüft es, ob beim Herstellen der Verbindung zu WMI ein Fehler aufgetreten ist, um sicherzustellen, dass der WMI-Dienst auf dem Host ausgeführt wird (unter älteren Betriebssystemen wird er möglicherweise nicht ausgeführt).

1.

Erstellen Sie Variablen zur Angabe von Parametern für das Präfix der IP-Adressen sowie für die Anfangs- und Endwerte des Suffixes, das zur Bildung vollständiger IP-Adressen anzuhängen ist.

2.

Verwenden Sie eine For-Schleife, um die Aufgaben für jedes Suffix im Bereich einmal zu durchlaufen.

3.

Führen Sie bei jedem Suffix (im Wesentlichen für jede IP-Adresse) die folgenden Aufgaben aus.

4.

Verketten Sie das Präfix mit dem aktuellen Wert des Zählers, um eine IP-Adresse zu bilden.

5.

Pingen Sie diese IP-Adresse an, indem Sie Ping.exe mithilfe der Exec-Methode des WshShell-Objekts ausführen. Die dazu angegebenen Parameter legen zwei Versuche und ein Zeitlimit von 1 Sekunde fest.

6.

Wenn der Host auf die Ping-Anforderung antwortet, verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2 auf dem angegebenen Computer, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.

7.

Überprüfen Sie, ob beim Binden mit WMI ein Fehler aufgetreten ist.

8.

Wenn eine Verbindung zu WMI hergestellt wurde, verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird.

Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist.

9.

Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben aus.

10.

Zeigen Sie die Indexnummer und Beschreibung für den Netzwerkadapter an.

11.

Überprüfen Sie, ob DHCP bereits aktiviert ist.

12.

Falls DHCP nicht aktiviert ist, rufen Sie die EnableDHCP-Methode der Klasse Win32_NetworkAdapterConfiguration auf.

13.

Abhängig vom Rückgabewert der EnableDHCP-Methode nehmen Sie folgende Ausgaben vor:

0 – zeigen Sie eine Erfolgsnachricht an.

Einen anderen Wert – zeigen Sie eine Fehlermeldung an.

14.

Falls DHCP bereits aktiviert ist, zeigen Sie eine entsprechende Meldung an, und rufen Sie die RenewDHCPLease-Methode der Klasse Win32_NetworkAdapterConfiguration auf.

15.

Abhängig vom Rückgabewert der RenewDHCPLease-Methode nehmen Sie folgende Ausgaben vor:

0 – zeigen Sie eine Erfolgsnachricht an.

Einen anderen Wert – zeigen Sie eine Fehlermeldung an.

16.

Wenn beim Binden mit WMI ein Fehler aufgetreten ist, zeigen Sie eine Fehlermeldung an.

17.

Wenn der Host auf die Ping-Anforderung nicht reagiert, zeigen Sie eine Fehlermeldung an.

Listing 25 Dhcp-enable-subnet.vbs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
On Error Resume Next

 strSubnetPrefix = "192.168.0."
intBeginSubnet = 10
intEndSubnet = 12

 For i = intBeginSubnet To intEndSubnet
  strComputer = strSubnetPrefix & i
' Ping remote computer. If inaccessible, display error message.
  Set objShell = CreateObject("WScript.Shell")
  Set objScriptExec = objShell.Exec("ping -n 2 -w 1000 " & strComputer)
  strPingResults = LCase(objScriptExec.StdOut.ReadAll)
  If InStr(strPingResults, "reply from") Then
    WScript.Echo VbCrLf & "Host Name " & strComputer
    Set objWMIService = GetObject("winmgmts:" _
     & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
' Test for success in binding to WMI.
    If Err = 0 Then
      arrIPAddresses = Array(strComputer)
      Set colNicConfigs = objWMIService.ExecQuery _
       ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE " & _
       "IPEnabled = True")
      For Each objNicConfig In colNicConfigs
        WScript.Echo VbCrLf & "  Network Adapter " & objNicConfig.Index & _
VbCrLf & "    " & objNicConfig.Description & VbCrLf
        If Not objNicConfig.DHCPEnabled Then
          WScript.Echo "    Enabling DHCP ..."
          intEnableReturn = objNicConfig.EnableDHCP
          If intEnableReturn = 0 Then
            WScript.Echo VbCrLf & "    DHCP enabled."
          Else
            WScript.Echo VbCrLf & "    Unable to enable DHCP."
          End If
        Else
          WScript.Echo "    DHCP already enabled" & VbCrLf & _
           "    DHCP Server: " & objNicConfig.DHCPServer & _
           VbCrLf & "    Renewing DHCP lease ..."
          intRenewReturn = objNicConfig.RenewDHCPLease
          If intRenewReturn = 0 Then
            WScript.Echo VbCrLf & "    DHCP lease renewed."
          Else
            WScript.Echo VbCrLf & "    Unable to renew DHCP lease."
          End If
        End If
      Next
    Else
      Wscript.Echo "    Error: Unable to connect to WMI."
      Err.Clear
    End If
  Else
    WScript.Echo VbCrLf & "Host Name: " & strComputer & VbCrLf & _
      "    Unable to connect."
  End If
Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt:

C:\scripts>dhcp-enable-subnet.vbs

Host Name 192.168.0.10

Network Adapter 1

3Com 3C918 Integrated Fast Ethernet Controller (3C905B-TX Compatible)

DHCP already enabled

DHCP Server: 192.168.0.1

Renewing DHCP lease ...

DHCP lease renewed.

Host Name 192.168.0.11

Network Adapter 1

3Com 3C918 Integrated Fast Ethernet Controller (3C905B-TX Compatible)

DHCP already enabled

DHCP Server: 192.168.0.1

Renewing DHCP lease ...

DHCP lease renewed.

Host Name 192.168.0.12

Unable to connect.

Szenario Teil 2: Aktivieren statischer IP-Adressen für Ausschlüsse

Zum Automatisieren der zweiten Reihe von Aufgaben in diesem Szenario gibt das zweite Skript DHCP-Leases frei und aktiviert statische IP-Adressen auf denjenigen Clients, die vom Subnetz ausgeschlossen sind. Nach dem erfolgreichen Abschluss dieser Aufgabe weist das Skript den Clients Standardgateways und DNS-Server zu, damit sie erneut eine Verbindung zum Netzwerk herstellen können.

Schritte zur Skripterstellung

caution.gif Vorsicht
Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen.

Das Skript in Listing 26 führt eine Iteration durch einen Bereich von Hostnamen durch und überprüft bei jedem Computer die einzelnen Netzwerkadapter, um festzustellen, ob DHCP aktiviert ist. Wenn dies zutrifft, gibt das Skript die Lease frei und weist dann eine statische IP-Adresse und eine Subnetzmaske zu. Nach dem erfolgreichen Aktivieren der statischen IP-Adressierung weisen Sie dem Netzwerkadapter ein Standardgateway und einen DNS-Server zu.

1.

Erstellen Sie Variablen zur Angabe aller erforderlichen Parameter. Diese umfassen die Liste der Computer für die Ausführung sowie die IP-Adressen und andere Einstellungen, die bei aktivierter statischer IP-Adressierung den einzelnen Computern zuzuweisen sind.

2.

Initialisieren Sie einen Schleifenzähler zum Auswählen der korrekten IP-Adresse aus dem Array für jeden Computer mit dem Wert 0.

3.

Führen Sie eine Iteration durch jeden Hostnamen in der Liste der Computer durch, auf denen die statische IP-Adressierung konfiguriert werden soll.

4.

Pingen Sie diesen Hostnamen an, indem Sie Ping.exe mithilfe der Exec-Methode des WshShell-Objekts ausführen. Die dazu angegebenen Parameter legen zwei Versuche und ein Zeitlimit von 1 Sekunde fest.

5.

Wenn der Host auf die Ping-Anforderung reagiert, wählen Sie die IP-Adresse aus dem Array aus, dessen Index gleich dem aktuellen Wert des Schleifenzählers ist. Weisen Sie diese IP-Adresse einem neuen Array von einem Element zu, das wiederum diesem Host zugewiesen wird, wenn die statische IP-Adressierung aktiviert ist. Denken Sie daran, dass es sich bei dem Wert der IPAddress-Eigenschaft um ein Array von Zeichenfolgen handelt.

6.

Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2 auf dem angegebenen Computer, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.

7.

Überprüfen Sie, ob beim Binden mit WMI ein Fehler aufgetreten ist.

8.

Wenn eine Verbindung zu WMI hergestellt wurde, verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird.

Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist.

9.

Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben aus.

10.

Zeigen Sie die Indexnummer und Beschreibung für den Netzwerkadapter an.

11.

Überprüfen Sie, ob DHCP bereits aktiviert ist.

12.

Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2 auf dem angegebenen Computer, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.

13.

Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird.

Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist.

14.

Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben aus.

15.

Rufen Sie die ReleaseDHCPLease-Methode der Klasse Win32_NetworkAdapterConfiguration auf, um die DHCP-Lease freizugeben, und zeigen Sie je nach dem Rückgabewert eine Erfolgsnachricht oder eine Fehlermeldung an.

16.

Rufen Sie die EnableStatic-Methode von Win32_NetworkAdapterConfiguration auf, und übergeben Sie ihr das Array von einem Element der IP-Adressen für diesen Host sowie das Array von einem Element der Subnetzmasken (das für alle Hosts identisch ist).

17.

Bei erfolgreicher Ausführung der EnableStatic-Methode rufen Sie die Get-Methode auf, um einen neuen Verweis auf die aktuelle Instanz der Klasse Win32_NetworkAdapterConfiguration abzurufen. Damit werden die Eigenschaften dieses Objekts aktualisiert, so dass weitere Änderungen vorgenommen werden können.

18.

Rufen Sie die Methoden SetGateways und SetDNSServerSearchOrder der Klasse Win32_NetworkAdapterConfiguration auf, und übergeben Sie ihnen die entsprechenden Variablen als Parameter.

19.

Überprüfen Sie den Rückgabewert für beide Methoden, und zeigen Sie jeweils eine Erfolgsnachricht oder eine Fehlermeldung an.

20.

Wenn eine statische IP-Adresse nicht zugewiesen werden kann, zeigen Sie eine Fehlermeldung an.

21.

Falls DHCP nicht aktiviert ist, zeigen Sie eine Meldung an, dass die statische IP-Adressierung bereits aktiviert ist.

22.

Fragen Sie die Klasse Win32_NetworkAdapterConfiguration erneut nach IP-Adaptern ab, um alle neuen Werte mit den soeben vorgenommenen Änderungen abzurufen, und zeigen Sie die entsprechenden Eigenschaften an.

23.

Wenn beim Binden mit WMI ein Fehler aufgetreten ist, zeigen Sie eine Fehlermeldung an.

24.

Wenn der Host auf die Ping-Anforderung nicht reagiert, zeigen Sie eine Fehlermeldung an.

25.

Inkrementieren Sie den Schleifenzähler zum Auswählen der IP-Adresse aus dem Array.

Listing 26 Staticip-enable-excl.vbs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
On Error Resume Next
 
arrComputers = Array("client1", "client2", "client3")
' There must be one IP in arrStaticIPs for each host in arrComputers.
arrStaticIPs = Array("192.168.0.240","192.168.0.243","192.168.0.250")
arrSubnetMasks = Array("255.255.255.0")
arrDefaultGateways = Array("192.168.0.1")
arrGatewayCostMetrics = Array(1)
arrDNSServers = Array("192.168.0.1")
intCount = 0
 
For Each strComputer In arrComputers
 
' Ping remote computer. If inaccessible, display error message.
  Set objShell = CreateObject("WScript.Shell")
  Set objScriptExec = objShell.Exec("ping -n 2 -w 1000 " & strComputer)
  strPingResults = LCase(objScriptExec.StdOut.ReadAll)
  If InStr(strPingResults, "reply from") Then
    WScript.Echo VbCrLf & "Host Name: " & strComputer
    arrIPAddresses = Array(arrStaticIPs(intCount))
    Set objWMIService = GetObject("winmgmts:" _
     & "{impersonationLevel=impersonate}!\\" & strComputer & _
     "\root\cimv2")
 
' Test for success in binding to WMI.
    If Err = 0 Then
 
      Set colNicConfigs = objWMIService.ExecQuery _
       ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE " & _
       "IPEnabled = True")
 
      For Each objNicConfig In colNicConfigs
        WScript.Echo VbCrLf & "  Network Adapter " & _
         objNicConfig.Index & VbCrLf & "    " & _
          objNicConfig.Description & VbCrLf
        If objNicConfig.DHCPEnabled Then
          intStaticReturn = objNicConfig.EnableStatic(arrIPAddresses, _
           arrSubnetMasks)
          If intStaticReturn = 0 Then
            WScript.Echo "    DHCP disabled, static IP address enabled."
            Set objNicChanged = objWMIService.Get _
             ("Win32_NetworkAdapterConfiguration.Index=" & objNicConfig.Index)
            intGatewaysReturn = objNicChanged.SetGateways _
             (arrDefaultGateways, arrGatewayCostMetrics)
            If intGatewaysReturn = 0 Then
              WScript.Echo "    Assigned new default gateways."
            Else
              WScript.Echo "    Unable to assign default gateways."
            End If
            intDNSServersReturn = objNicChanged.SetDNSServerSearchOrder _
             (arrDNSServers)
            If intDNSServersReturn = 0 Then
              WScript.Echo "    Assigned new DNS servers."
            Else
              WScript.Echo "    Unable to assign DNS servers."
            End If
          Else
            WScript.Echo "    Unable to enable static IP address."
          End If
        Else
          WScript.Echo "    Static IP address already enabled."
        End If
      Next
 
      Set colNicConfigs = objWMIService.ExecQuery("SELECT * FROM " & _
       "Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
 
      For Each objNicConfig In colNicConfigs
        WScript.Echo VbCrLf & _
         "  Network Adapter " & objNicConfig.Index & VbCrLf & _
         "    " & objNicConfig.Description & VbCrLf & _
         "    DHCP Enabled: " & objNicConfig.DHCPEnabled
        strIPAddresses = ""
        If Not IsNull(objNicConfig.IPAddress) Then
          For Each strIPAddress In objNicConfig.IPAddress
            strIPAddresses = strIPAddresses & VbCrLf & _
             "                         " & strIPAddress
          Next
        End If
        WScript.Echo "    IP Addresses: " & strIPAddresses
        strIPSubnets = ""
        If Not IsNull(objNicConfig.IPSubnet) Then
          For Each strIPSubnet In objNicConfig.IPSubnet
            strIPSubnets = strIPSubnets & VbCrLf & _
             "                         " & strIPSubnet
          Next
        End If
        WScript.Echo "    Subnet Masks: " & strIPSubnets
        strDefaultIPGateways = ""
        If Not IsNull(objNicConfig.DefaultIPGateway) Then
          For Each strDefaultIPGateway In objNicConfig.DefaultIPGateway
            strDefaultIPGateways = strDefaultIPGateways & VbCrLf & _
             "                         " & strDefaultIPGateway
          Next
        End If
        WScript.Echo "    Default Gateways: " & strDefaultIPGateways
        strGatewayCostMetrics = ""
        If Not IsNull(objNicConfig.GatewayCostMetric) Then
          For Each strGatewayCostMetric In objNicConfig.GatewayCostMetric
            strGatewayCostMetrics = strGatewayCostMetrics & VbCrLf & _
             "                         " & strGatewayCostMetric
          Next
        End If
        strDNSServerSearchOrder = ""
        WScript.Echo "    Gateway Cost Metrics: " & strGatewayCostMetrics
        If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
          For Each strDNSServer In objNicConfig.DNSServerSearchOrder
            strDNSServerSearchOrder = strDNSServerSearchOrder & VbCrLf & _
             "                         " & strDNSServer
          Next
        End If
        WScript.Echo "    DNS Server Search Order: " & strDNSServerSearchOrder
      Next
 
    Else
 
      Wscript.Echo "    Error: Unable to connect to WMI."
      Err.Clear
 
    End If
 
  Else
 
    WScript.Echo VbCrLf & "Host Name: " & strComputer & VbCrLf & _
     "    Unable to connect." & VbCrLf
 
  End If
 
intCount = intCount + 1
 
Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt:

C:\scripts>staticip-enable-excl.vbs

Host Name: client1

Unable to connect.

Host Name: client2

Network Adapter 1

3Com 3C918 Integrated Fast Ethernet Controller (3C905B-TX Compatible)

Releasing DHCPlease ...

DHCP lease released.

Disabling DHCP, enabling static IP address ...

DHCP disabled, static IP address enabled.

Assigned new default gateways.

Assigned new DNS servers.

Network Adapter 1

3Com 3C918 Integrated Fast Ethernet Controller (3C905B-TX Compatible)

DHCP Enabled: False

IP Addresses:

192.168.0.243

Subnet Masks:

255.255.255.0

Default Gateways:

192.168.0.1

Gateway Cost Metrics:

20

DNS Server Search Order:

192.168.0.1

Host Name: client3

Error: Unable to connect to WMI.

Szenario: Wechseln zwischen einer statischen Adresse und DHCP

In diesem Szenario muss ein Reisender eine Verbindung von seinem Laptop zum Firmennetzwerk in anderen Zweigstellen herstellen. In einigen Fällen erfordert es das Netzwerk, dass Clients DHCP verwenden; in anderen Fällen muss der Computer eine statische IP-Adresse (zusammen mit Subnetzmaske, Standardgateway, DNS- und WINS-Server) verwenden. Zur Ausführung dieses Skripts gibt der Benutzer den Skriptnamen ein, gefolgt von einem Leerzeichen und dem Namen der aktuellen Zweigstelle, in der sich der Computer befindet. Je nach Standort weist das Skript eine der beiden Adresszuweisungsmethoden zu: statisch in Miami und Dogpatch; DHCP in Seattle und Boston.

Schritte zur Skripterstellung

caution.gif Vorsicht
Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen.

Das Skript in Listing 27 ermöglicht es dem Benutzer, auf einem tragbaren Computer zwischen DHCP und statischer IP-Adressierung zu wechseln. Dazu verwendet er ein Befehlszeilenargument, das den aktuellen Standort bezeichnet. Das Skript ist in Unterroutinen aufgeteilt. Dadurch wird es modularer und lässt sich einfacher lesen, debuggen und ändern.

Es verwendet die WScript.Arguments-Eigenschaft, die ein Bestandteil von Windows Script Host ist. Das Skript gibt eine Auflistung aller Argumente zurück, die in die Befehlszeile nach dem Skriptnamen eingegeben wurden. Weitere Informationen zur Verwendung dieser Eigenschaft finden Sie unter " /germany/technet/datenbank/articles/600359.mspx#E02Y0AA im Abschnitt "Verwenden von Kommandozeilenargumenten" in Kapitel 3 des Windows 2000 Scripting-Handbuches.

1.

Verwenden Sie die WScript.Arguments-Auflistung zum Abrufen des Befehlszeilenarguments nach dem Skriptnamen.

Dieses Skript verwendet nur ein Argument: den Namen der Zweigstelle, in dem der Benutzer eine Verbindung zum lokalen Netzwerk herstellen möchte. Alle anderen Argumente werden ignoriert.

2.

Weisen Sie das erste Argument, colArgs(0), der Variablen strOffice zu.

3.

Verwenden Sie eine Select Case-Anweisung, um blnDHCP einen booleschen Wert, True oder False, zuzuweisen. Dies hängt vom Namen der Zweigstelle ab, der als Befehlszeilenargument eingegeben wurde.

Wenn es sich bei dem Argument um keinen der vier gültigen Namen handelt, zeigt das Skript eine Fehlermeldung an und wird beendet.

4.

Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2 auf dem lokalen Computer, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.

5.

Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird.

Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist.

6.

Wenn die Zweigstelle, deren Name als Argument übergeben wurde, DHCP verwendet, rufen Sie die Unterroutine SetDHCP auf.

7.

Wenn die Zweigstelle DHCP nicht verwendet, rufen Sie die Unterroutine SetStaticIP auf.

8.

Die Unterroutine SetDHCP überprüft die DHCPEnabled-Eigenschaft. Falls DHCP nicht aktiviert ist, ruft sie die EnableDHCP-Methode auf. Falls DHCP bereits aktiviert ist, zeigt SetDHCP eine entsprechende Meldung und die IP-Adresse des DHCP-Servers an.

Vor ihrer Beendigung ruft SetDHCP die Unterroutine GetSettings auf.

Wenn DHCP bereits aktiviert ist, könnten Sie Code zu der Unterroutine hinzufügen, die die Lease erneuert. Im vorhergehenden Szenario bietet Dhcp-enable-subnet.vbs ein Beispiel für die dazu erforderliche Vorgehensweise. Obwohl der DHCP-Client den lokalen DHCP-Server finden und die lokale Konfiguration abrufen sollte, kann dieser Prozess in einigen Netzwerkumgebungen durch Erneuern der Lease beschleunigt werden.

9.

Die Unterroutine SetStaticIP beginnt mit hardcodierten Variablen, die die erforderlichen Einstellungen für statische IP-Adressierung zuweisen (ein komplexeres Skript könnte diese Einstellungen aus einer externen Quelle abrufen). Anschließend überprüft SetStaticIP die DHCPEnabled-Eigenschaft. Wenn DHCP aktiviert ist, ruft sie die EnableStatic-Methode auf. Wenn EnableStatic erfolgreich ausgeführt wurde, ruft SetStaticIP die Methoden SetGateways und SetDNSServerSearchOrder auf, um die statische IP-Konfiguration abzuschließen.

Wenn DHCP bereits aktiviert ist, zeigt SetDHCP eine entsprechende Meldung und die IP-Adresse des DHCP-Servers an.

Vor ihrer Beendigung ruft SetStaticIP die Unterroutine GetSettings auf.

10.

Die sowohl von SetDHCP als auch von SetStaticIP aufgerufene Unterroutine GetSettings fragt Win32_NetworkAdapterConfiguration erneut ab, um alle Änderungen abzurufen, die von den vorherigen Unterroutinen vorgenommen wurden. Danach zeigt GetSettings die relevanten Einstellungen für die auf dem Computer momentan bestehenden IP-Adresszuweisungen an.

Listing 27 Dhcp-staticip-switch.vbs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
On Error Resume Next
 
' Get argument to find out what office we're in and set a switch based on it.
Set colArgs = WScript.Arguments
strOffice = LCase(colArgs(0))
Select Case strOffice
  Case "boston" blnDHCP = True
  Case "miami" blnDHCP = False
  Case "seattle" blnDHCP = True
  Case "dogpatch" blnDHCP = False
  Case Else WScript.Echo "Please enter the script name followed by a " & _
   "space and the name of a branch office." & _
   VbCrLf & "Valid names are: Boston, Miami, Seattle and Dogpatch." _
   : WScript.Quit
End Select
 
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colNicConfigs = objWMIService.ExecQuery _
 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
 
' If the office uses DHCP, call SetDHCP.
If blnDHCP = True Then
  WScript.Echo "You are in the " & colArgs(0) & " branch office." & _
   VbCrLf & "Enabling DHCP on all network adapters ..."
  SetDHCP
' If the office uses static IP, call SetStaticIP.
Else
  WScript.Echo "You are in the " & colArgs(0) & " branch office." & _
   VbCrLf & "Enabling static IP addressing on all network adapters ..."
  SetStaticIP
End If
 
'******************************************************************************
Sub SetDHCP
 
For Each objNicConfig In colNicConfigs
  WScript.Echo VbCrLf & "Network Adapter " & objNicConfig.Index & _
   VbCrLf & "  " & objNicConfig.Description & VbCrLf
  If Not objNicConfig.DHCPEnabled Then
    WScript.Echo "  Attempting to enable DHCP ..."
    intReturn = objNicConfig.EnableDHCP
    If intReturn = 0 Then
      WScript.Echo "  DHCP enabled."
    Else
      WScript.Echo "  Unable to enable DHCP."
    End If
    Err.Clear
  Else
    WScript.Echo "  DHCP already enabled" & VbCrLf & _
     "  DHCP Server:             " & objNicConfig.DHCPServer
    Err.Clear
  End If
Next
GetSettings
 
End Sub
 
'******************************************************************************
Sub SetStaticIP
 
arrIPAddresses = Array("192.168.0.12")
arrSubnetMasks = Array("255.255.255.0")
arrDefaultGateways = Array("192.168.0.1")
arrGatewayCostMetrics = Array(1)
arrDNSServers = Array("192.168.0.1")
 
For Each objNicConfig In colNicConfigs
  WScript.Echo VbCrLf & "Network Adapter " & objNicConfig.Index & VbCrLf & _
   "  " & objNicConfig.Description & VbCrLf
  If objNicConfig.DHCPEnabled Then
    WScript.Echo "  Attempting to disable DHCP and enable static IP ..."
    intStaticReturn = objNicConfig.EnableStatic(arrIPAddresses, arrSubnetMasks)
    If intStaticReturn = 0 Then
      WScript.Echo "  DHCP disabled, static IP address enabled."
      Set objNicChanged = objWMIService.Get _
       ("Win32_NetworkAdapterConfiguration.Index=" & objNicConfig.Index)
      intGatewaysReturn = objNicChanged.SetGateways(arrDefaultGateways, _
       arrGatewayCostMetrics)
      intDNSServers = objNicChanged.SetDNSServerSearchOrder(arrDNSServers)
      If intGatewaysReturn = 0 Then
        WScript.Echo "    Assigned new default gateways."
      Else
        WScript.Echo "    Unable to assign default gateways."
      End If
      If intDNSServers = 0 Then
        WScript.Echo "    Assigned new DNS servers."
      Else
        WScript.Echo "    Unable to assign DNS servers."
      End If
      Err.Clear
    Else
      WScript.Echo "  Unable to enable static IP address."
      Err.Clear
    End If
  Else
    WScript.Echo "  Static IP address already enabled."
  End If
Next
GetSettings
 
End Sub
 
'******************************************************************************
Sub GetSettings
 
Set colNicConfigs = objWMIService.ExecQuery("SELECT * FROM " & _
 "Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
 
WScript.Echo VbCrLf & "Settings after operation:"
For Each objNicConfig In colNicConfigs
  WScript.Echo VbCrLf & _
   "Network Adapter " & objNicConfig.Index & VbCrLf & _
   "  " & objNicConfig.Description & VbCrLf & VbCrLf & _
   "  DHCP Enabled:            " & objNicConfig.DHCPEnabled
  strIPAddresses = ""
  If Not IsNull(objNicConfig.IPAddress) Then
    For Each strIPAddress In objNicConfig.IPAddress
      strIPAddresses = strIPAddresses & VbCrLf & _
       "                           " & strIPAddress
    Next
  End If
  WScript.Echo "  IP Addresses: " & strIPAddresses
  strIPSubnets = ""
  If Not IsNull(objNicConfig.IPSubnet) Then
    For Each strIPSubnet In objNicConfig.IPSubnet
      strIPSubnets = strIPSubnets & VbCrLf & _
       "                           " & strIPSubnet
    Next
  End If
  WScript.Echo "  Subnet Masks: " & strIPSubnets
  strDefaultIPGateways = ""
  If Not IsNull(objNicConfig.DefaultIPGateway) Then
    For Each strDefaultIPGateway In objNicConfig.DefaultIPGateway
      strDefaultIPGateways = strDefaultIPGateways & VbCrLf & _
       "                           " & strDefaultIPGateway
    Next
  End If
  WScript.Echo "  Default Gateways: " & strDefaultIPGateways
  strGatewayCostMetrics = ""
  If Not IsNull(objNicConfig.GatewayCostMetric) Then
    For Each strGatewayCostMetric In objNicConfig.GatewayCostMetric
      strGatewayCostMetrics = strGatewayCostMetrics & VbCrLf & _
       "                           " & strGatewayCostMetric
    Next
  End If
  WScript.Echo "  Gateway Cost Metrics: " & strGatewayCostMetrics
  strDNSServerSearchOrder = ""
  If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
    For Each strDNSServer In objNicConfig.DNSServerSearchOrder
      strDNSServerSearchOrder = strDNSServerSearchOrder & VbCrLf & _
       "                           " & strDNSServer
    Next
  End If
  WScript.Echo "  DNS Server Search Order: " & strDNSServerSearchOrder
Next
 
End Sub

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt:

C:\scripts>dhcp-staticip-switch.vbs Boston

You are in the Boston branch office.

Enabling DHCP on all network adapters ...

Network Adapter 1

3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet

Scheduler Miniport

DHCP already enabled

DHCP Server: 192.168.0.1

Settings after operation:

Network Adapter 1

3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet

Scheduler Miniport

DHCP Enabled: True

IP Addresses:

192.168.0.21

Subnet Masks:

255.255.255.0

Default Gateways:

192.168.0.1

Gateway Cost Metrics:

20

DNS Server Search Order:

192.168.0.1

C:\scripts\netcli>dhcp-staticip-switch.vbs Miami

You are in the Miami branch office.

Enabling static IP addressing on all network adapters ...

Network Adapter 1

3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet

Scheduler Miniport

Attempting to disable DHCP and enable static IP ...

DHCP disabled, static IP address enabled.

Assigned new default gateways.

Assigned new DNS servers.

Settings after operation:

Network Adapter 1

3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet

Scheduler Miniport

DHCP Enabled: False

IP Addresses:

192.168.0.12

Subnet Masks:

255.255.255.0

Default Gateways:

192.168.0.1

Gateway Cost Metrics:

1

DNS Server Search Order:

192.168.0.1

Tools zur IP-Adresszuweisung auf Clients

In Tabelle 11 werden die verfügbaren Windows-Tools zur Skripterstellung für die IP-Adresszuweisung auf Clients aufgeführt.

Tabelle 11 Tools zur IP-Adresszuweisung auf Clients

TechnologieToolRessource

Befehlszeilentools

Dhcploc.exe: Locatordienstprogramm für DHCP-Server

Windows Server 2003-Supporttools

Befehlszeilentools

Enabledhcp.vbs

Windows 2000 Resource Kit

Befehlszeilentools

Netsh.exe

Windows-Betriebssysteme1

WSH

Keines

 

WMI

Win32_NetworkAdapterConfiguration

 

1Windows 2000, Windows XP und Windows Server 2003. Können auch in anderen Windows-Versionen vorhanden sein.

In Tabelle 12 werden die verfügbaren Registrierungsschlüssel zur Skripterstellung für die IP-Adresszuweisung auf Clients aufgeführt.

caution.gif Vorsicht
Durch eine fehlerhafte Bearbeitung der Registrierung kann ernsthafter Schaden am System verursacht werden. Bevor Sie Änderungen an der Registrierung vornehmen, sollten Sie eine Sicherungskopie aller wichtigen Daten auf dem Computer erstellen.

Tabelle 12 Registrierungsunterschlüssel zur Skripterstellung für die IP-Adresszuweisung auf Clients

Registrierungsunterschlüssel

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
\ {AdapterIdentifier}

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dhcp\Parameters


**
**