Lernen Sie unsere Skriptprogrammierer kennenAnpassungsfähigkeit ist unser Markenzeichen

Die Skriptprogrammierer von Microsoft

Dieser Artikel basiert auf einer Vorabversion von Windows Vista. Änderungen an einigen Informationen in diesem Artikel sind vorbehalten.

Laden Sie den Code für diesen Artikel herunter: ScriptingGuys2006_11.exe (151KB)

IHNEN IST SICHER bereits zu Ohren gekommen, dass Networking ein ausgezeichnetes Mittel zur Förderung der Karriere ist, d. h. Kontakte zu anderen Menschen zu knüpfen, die in Ihrer Branche tätig sind, um voneinander zu lernen, sich auszutauschen und einander möglicherweise bei der Arbeitssuche behilflich zu sein. Die Skriptprogrammierer haben sich dieses berufsorientierte Networking nie richtig zunutze gemacht (wo es doch so naheliegend wäre), wissen dafür aber umso besser über Computernetzwerke Bescheid. Denn das Networking über Skripts eröffnet viele Möglichkeiten.

Die Windows®-Verwaltungsinstrumentation (Windows Management Instrumentation, WMI) umfasst eine Reihe von Klassen, mit deren Hilfe Sie Ihre Netzwerkumgebung sowohl steuern als auch überwachen können. Zwei dieser Klassen, Win32_NetworkAdapter und Win32_NetworkAdapaterConfiguration, ermöglichen die Arbeit mit Netzwerkadaptern auf Ihren Computern.

Häufig wird die Frage gestellt „Wie kann man Netzwerkadapter mittels eines Skripts aktivieren und deaktivieren?“ Diese Frage lässt sich ohne große Umschweife beantworten: Es funktioniert nicht, zumindest nicht ohne Windows Vista™. In Windows Vista wurde das Modul Win32_NetworkAdapter um zwei neue Funktionen erweitert: Aktivieren und Deaktivieren. Diese Funktionen werden unten erläutert. Vorher werden jedoch einige Funktionen behandelt, die im Leistungsumfang der Betriebssysteme, die älter als Windows Vista sind, enthalten sind. Sie können beispielsweise ermitteln, welche Netzwerkadapter auf dem Gerät verfügbar sind (siehe Abbildung 1). Diese Funktion ist zweifellos nützlich.

Figure 1 Ermitteln von Netzwerkadaptern

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter")

For Each objItem in colItems 
    Wscript.Echo "Name: " & objItem.Name
    Wscript.Echo "Description: " & objItem.Description
    Wscript.Echo
Next

In Abbildung 1 wird gleich zu Anfang eine Verbindung zum WMI-Dienst auf dem lokalen Computer hergestellt. Die Netzwerkadapter auf Ihrem lokalen Computer über die grafische Benutzeroberfläche zu finden, fällt Ihnen sicherlich nicht allzu schwer, aber versuchen Sie doch einmal, mithilfe der grafischen Benutzeroberfläche Informationen über die Netzwerkadapter auf einem Remotecomputer zu ermitteln. Einer der Vorteile dieses Skripts und der WMI-Skriptprogrammierung liegt darin, dass dasselbe Skript auch bei einem Remotecomputer verwendet werden kann. Dazu wird nur der Wert „strComputer“ durch den Namen des Remotecomputers ersetzt.

Sobald eine Verbindung zum WMI-Dienst aufgebaut wurde, starten Sie eine Abfrage für das Modul Win32_NetworkAdapter. Diese Abfrage gibt eine Auflistung aller Netzwerkadapter auf dem Computer zurück. Erstellen Sie nun eine „For Each“-Schleife, um die aufgelisteten Adapter nacheinander jeweils mitsamt des Namens und der Beschreibung anzuzeigen. Das Ergebnis sieht in etwa so aus:

Name: Broadcom NetXtreme 57xx Gigabit Controller
Description: Broadcom NetXtreme 57xx Gigabit Controller

Name: RAS Async Adapter
Description: RAS Async Adapter

Name: WAN Miniport (L2TP)
Description: WAN Miniport (L2TP)

Name: WAN Miniport (PPTP)
Description: WAN Miniport (PPTP)

Sie können ein breites Spektrum zusätzlicher Informationen über Ihre Netzwerkadapter abfragen, indem Sie verschiedene Eigenschaften von Win32_NetworkAdapter wiedergeben, wie z. B. DeviceID, Manufacturer und TimeOfLastReset. Weitere Informationen dazu erhalten Sie unter Automatisieren des TCP/IP-Networking auf Clients (möglicherweise in englischer Sprache) im Script Center.

Anpassen an Veränderungen

Mit dem Modul Win32_NetworkAdapter können Sie lediglich Informationen über Netzwerkadapter abrufen. Um Änderungen an den Einstellungen des Adapters vorzunehmen, müssen Sie das Modul Win32_NetworkAdapterConfiguration benutzen. Dieses Modul beinhaltet nicht nur zusätzliche Informationen über Ihre Adapter (aufgrund von Eigenschaften, die im Win32_NetworkAdapter nicht enthalten sind), sondern bietet Ihnen auch eine Reihe von Funktionen, um Ihre Netzwerkadapter nach Belieben zu konfigurieren.

Beispiel: Sie können vielleicht die Adapter nicht aktivieren und deaktivieren, jedoch können Sie DHCP (Dynamic Host Configuration Protocol) auf jedem TCP/IP-aktivierten Adapter aktivieren und deaktivieren. Abbildung 2 zeigt ein Skript, das alle TCP/IP-aktivierten Adapter sucht, bei jedem Adapter prüft, ob DHCP aktiviert ist, und dieses aktiviert, falls dem nicht so ist.

Figure 2 Aktivieren von DHCP

strComputer = "." 
Set objWMIService = GetObject _
    ("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM Win32_NetworkAdapterConfiguration Where IPEnabled = 'True'")

For Each objItem in colItems
    If objItem.DHCPEnabled = False Then
        Wscript.Echo objItem.Caption
        intReturn = objItem.EnableDHCP
        Select Case intReturn
            Case 0
                Wscript.Echo "DHCP enabled"
            Case 1
                Wscript.Echo "You must reboot before DHCP will be enabled"
            Case Else
                Wscript.Echo "Error occurred"
        End Select
        Wscript.Echo
    End If
Next

Wie das Skript in Abbildung 1 stellt das Skript in Abbildung 2 eine Verbindung mit dem WMI-Dienst auf dem lokalen Computer her. Anschließend fragt es das Modul Win32_NetworkAdapterConfiguration ab. Beachten Sie, dass die Abfrage eine „Where“-Klausel enthält, da nur die Adapter von Interesse sind, die TCP/IP-aktiviert sind:

Where IPEnabled = 'True'

Diese Klausel gibt an, dass nur die Fälle des Moduls Win32_NetworkAdapterConfiguration interessant sind, für die gilt, dass die IPEnabled-Eigenschaft „True“ ist, der betreffende Adapter also TCP/IP-aktiviert ist.

Dann durchsuchen Sie mithilfe einer „For Each“-Schleife die Liste der Adapter, die die Abfrage ergeben hat. Innerhalb der Schleife prüfen Sie zunächst bei jedem Adapter die DHCPEnabled-Eigenschaft. Ist diese Eigenschaft „False“, ist DHCP nicht aktiviert. In diesem Fall aktivieren Sie es bitte. Zu diesem Zweck rufen Sie die Funktion EnableDHCP auf dem Adapterobjekt auf. Das ist auch schon alles.

Damit Sie besser sehen können, was sich im Skript abspielt, wird die Caption-Eigenschaft ausgegeben, sodass Sie wissen, mit welchen Adaptern Sie arbeiten. Außerdem ist eine „Select Case“-Anweisung enthalten, und für den Endbenutzer wurden Deskriptoren für alle möglichen Ergebnisse angelegt. Die Funktion EnableDHCP liefert einen ganzzahligen Wert. Der Wert 0 bedeutet, dass die Funktion erfolgreich durchgeführt wurde und DHCP aktiviert ist. Der Wert 1 bedeutet, dass die Funktion erfolgreich durchgeführt wurde, jedoch ein Neustart des Computers erforderlich ist, damit die Änderung übernommen wird. Jeder andere Wert bedeutet, dass etwas schiefgelaufen ist und DHCP nicht aktiviert wurde. Die „Select Case“-Anweisung dient dazu, diese ganzzahligen Werte zu prüfen und eine entsprechende Nachricht anzuzeigen.

Sie können DHCP auch deaktivieren; dazu stellen Sie auf dem Adapter eine statische IP-Adresse und eine Subnetzmaske ein (siehe Abbildung 3).

Figure 3 Einrichten einer IP-Adresse

arrIPAddress = Array("192.168.0.12")
arrSubnetMask = Array("255.255.255.0")

strComputer = "." 
Set objWMIService = GetObject _
    ("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM Win32_NetworkAdapterConfiguration Where IPEnabled = 'True'")

For Each objItem in colItems
    If objItem.DHCPEnabled = True Then
        Wscript.Echo objItem.Caption
        intReturn = objItem.EnableStatic(arrIPAddress, arrSubnetMask)
        Select Case intReturn
            Case 0
                Wscript.Echo "Static address assigned"
            Case 1
                Wscript.Echo "You must reboot before the static address will take effect"
            Case Else
                Wscript.Echo "Error occurred"
        End Select
        Wscript.Echo
    End If
Next

Das Skript in Abbildung 3 deckt sich fast mit dem Skript in Abbildung 2, mit einigen wenigen, aber wichtigen Unterschieden. Zu Beginn des Skripts geben Sie zwei Arrays an, arrIPAddress und arrSubnetMask, und weisen jedem dieser Arrays einen Wert zu. Anschließend prüfen Sie in der „For Each“-Schleife – statt nachzusehen, ob DHCPEnabled „False“ ist – ob diese Funktion „True“ ist, d. h. ob DHCP aktiviert ist (was wiederum bedeutet, dass Sie es deaktivieren müssen). Anschließend rufen Sie die EnableStatic-Funktion auf dem Adapterobjekt auf. Sie werden bemerken, dass für EnableStatic im Unterschied zu der EnableDHCP-Funktion Parameter verwendet werden. Bei diesen Parametern handelt es sich um die zuvor deklarierten Arrays, die die neue statische IP-Adresse und die Subnetzmaske umfassen.

Zusatzfunktionen von Windows Vista

Wie versprochen, erfahren Sie im Folgenden, welche Funktionen Windows Vista Ihnen bietet. Der Win32_NetworkAdapter enthält in Windows Vista wie bereits erwähnt zwei neue Funktionen: Aktivieren und Deaktivieren. Damit können Sie Ihre Netzwerkadapter aktivieren und deaktivieren. Ferner verfügt Windows Vista über die neue Eigenschaft NetEnabled, die den Wert „True“ zurückgibt, wenn der Adapter aktiviert ist, und den Wert „False“, wenn er nicht aktiviert ist. In Abbildung 4 sehen Sie ein Skript, das alle deaktivierten Netzwerkadapter auf dem Computer findet und aktiviert.

Figure 4 Aktivieren von Netzwerkadaptern

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM Win32_NetworkAdapter Where NetEnabled = 'False'")

For Each objItem in colItems 
    Wscript.Echo "Name: " & objItem.Name
    Wscript.Echo "Description: " & objItem.Description
    objItem.Enable
    Wscript.Echo
Next

Es ist nahezu identisch mit dem Skript, das Sie in Abbildung 1 sehen. (Wie Sie bereits bemerkt haben werden, schöpfen wir gerne alle Möglichkeiten zur Wiederverwendung aus.) Stellen Sie eine Verbindung zum WMI-Dienst auf dem lokalen Computer her, und fragen Sie alle Beispiele des Win32_NetworkAdapters ab. Da nur die Adapter von Interesse sind, die deaktiviert sind, wurde eine „Where“-Klausel hinzugefügt:

Where NetEnabled = 'False'

Diese Klausel nutzt die neue NetEnabled-Eigenschaft, um festzulegen, dass nur die Adapter, bei denen NetEnabled auf „False“ steht (anders ausgedrückt: bei denen der Netzwerkadapter deaktiviert ist), bei der Abfrage erfasst und angezeigt werden. Richten Sie anschließend wieder eine „For Each“-Schleife ein, um die Auflistung der Netzwerkadapterobjekte zu durchsuchen, die bei der Abfrage erfasst und angezeigt wurden. Nachdem der Name und die Beschreibung des Adapters angezeigt wurden, aktivieren Sie den Adapter durch Aufruf der Funktion Aktivieren.

So weit, so gut. Nun geht es nur noch darum, die andere Art des Networking zu erlernen.

Die Skriptprogrammierer von MicrosoftDie Skriptprogrammierer arbeiten für Microsoft bzw. sind dort angestellt. Wenn sie nicht gerade ihrem Hobby, dem Baseball (oder verschiedenen anderen Aktivitäten) nachgehen, betreiben sie das TechNet Script Center. Besuchen Sie es unter www.scriptingguys.com.

© 2008 Microsoft Corporation und CMP Media, LLC. Alle Rechte vorbehalten. Die nicht genehmigte teilweise oder vollständige Vervielfältigung ist nicht zulässig.