You are on page 1of 169

Automatisieren von TCP/IP-Netzwerken

auf Clients

Seite 1 von 169


Automatisieren von TCP/IP-Netzwerken auf Clients.............................................................. 1
Teil 1: Einführung............................................................................................................... 5
Umfang und Gliederung dieses Dokuments....................................................................... 5
Verwenden von VBScript, WSH und WMI in Skriptbeispielen......................................... 6
Technisches Niveau dieses Dokuments ......................................................................... 8
Nicht behandelte Themen .............................................................................................. 8
Aufbau von Skripts ......................................................................................................... 9
Ausführen von Beispielskripts ...........................................................................................10
Ausführen von Skripts mit administrativen Rechten.......................................................11
Festlegen von Cscript als Standardskripthost................................................................11
Speichern aktueller Einstellungen vor dem Ausführen von Skripts, die Änderungen
vornehmen ....................................................................................................................11
Systemanforderungen.......................................................................................................12
Weitere wichtige Ressourcen............................................................................................12
Teil 2: Skripterstellung für grundlegende TCP/IP-Netzwerke auf Clients ...........................13
Abrufen grundlegender TCP/IP-Clienteinstellung mithilfe von Methoden, die keine Skripts
verwenden ........................................................................................................................13
Abrufen grundlegender Einstellungen mithilfe von "Ipconfig.exe" ..................................14
Abrufen grundlegender Einstellungen mithilfe eines Skripts..............................................15
Verwenden der WMI-Klasse "Win32_NetworkAdapterConfiguration" ............................15
"Win32_NetworkAdapterConfiguration" und "Win32_NetworkAdapter" .........................25
Zuordnen des Netzwerkverbindungsnamen zu MAC- und IP-Adressen mithilfe zweier
Klassen .........................................................................................................................31
Verwenden von Verknüpfungsklassen zum Abrufen von korrelierenden Daten .............35
Anzeigen erweiterter IP-Konfigurationsdaten ....................................................................39
Verwenden von "Ipconfig.exe" zum Anzeigen erweiterter Konfigurationsdaten..............40
Verwenden eines Skripts zum Anzeigen erweiterter Konfigurationsdaten......................40
Tools für grundlegende TCP/IP-Netzwerke auf Clients .....................................................43
Teil 3: Skripterstellung für die Verwaltung von Remotenetzwerken ...................................44
Abrufen grundlegender Einstellungen eines Remotecomputers........................................44
Verwenden von WMI zum Herstellen einer Verbindung zu einem Remotecomputer .....44
Abrufen der IP-Adressen und Subnetzmasken eines Remotecomputers.......................45
Herstellen einer Verbindung zu Gruppen von Computern in einem Netzwerk ...................46
Senden von Ping-Anforderungen an Netzwerkhosts vor dem Versuch, darauf Skripts
auszuführen ..................................................................................................................47
Behandeln von Fehlern mit VBScript .............................................................................55
Verwenden eines Arrays zum Eingeben einer Liste von Netzwerkhosts........................55
Verwenden einer Textdatei mit einer Hostliste als Eingabe ...........................................55
Herstellen der Verbindung zu einem Bereich von IP-Adressen......................................55
Andere Möglichkeiten zum Bereitstellen von Eingaben für Skripts ................................55
Aufzeichnen von Daten von mehreren Computern............................................................55
Tools zur Skripterstellung für die Verwaltung von Remotenetzwerken ..............................55
Teil 4: Skripterstellung für die IP-Adresszuweisung auf Clients.........................................56
Verwalten von DHCP auf Clients ......................................................................................57
Anzeigen von DHCP-Clientinformationen......................................................................59
Aktivieren von DHCP auf einem Client ..........................................................................63
Verwalten von DHCP-Leases ........................................................................................64
Verwalten statischer IP-Adressen .....................................................................................67
Konfigurieren einer statischen IP-Adresse.....................................................................67
Konfigurieren von Gateways, DNS und WINS für statische IP-Adressen.......................67
Szenario: Zuweisen von IP-Adressen in einem Subnetz ...................................................67
Szenario Teil 1: Konfigurieren von DHCP in einem Subnetz .........................................67
Szenario Teil 2: Aktivieren statischer IP-Adressen für Ausschlüsse ..............................67
Szenario: Wechseln zwischen einer statischen Adresse und DHCP .................................67
Tools zur IP-Adresszuweisung auf Clients ........................................................................67

Seite 2 von 169


Teil 5: Skripterstellung für DNS auf Clients .......................................................................68
Anzeigen von DNS-Clientinformationen ............................................................................69
Aktivieren von DNS...........................................................................................................76
Ändern der Suchreihenfolge für DNS-Server ....................................................................79
Ersetzen der Liste mit der Suchreihenfolge für DNS-Server ..........................................79
Ersetzen eines DNS-Servers durch einen anderen .......................................................82
Hinzufügen eines DNS-Servers am Ende der Suchreihenfolge .....................................85
Hinzufügen eines DNS-Servers am Anfang der Suchreihenfolge ..................................88
Ändern der DNS-Domäne .................................................................................................91
Ändern der DNS-Domäne bei "Win32_NetworkAdapterConfiguration" ..........................91
Ändern der Domäne bei "Win32_ComputerSystem"......................................................94
Ändern der Suchreihenfolge für DNS-Domänensuffixe .....................................................98
Ändern der Einstellungen für dynamische DNS-Registrierung ........................................101
Szenario: Ändern von DNS-Servern und -Domänen .......................................................104
Tools zur Skripterstellung für DNS auf Clients ................................................................107
Teil 6: Skripterstellung für WINS auf Clients ...................................................................108
Anzeigen von WINS-Clientinformationen ........................................................................110
Aktivieren von NetBIOS ..................................................................................................113
Aktivieren von WINS .......................................................................................................116
Festlegen von WINS-Servern für einen Client.................................................................119
Szenario: Vorbereiten eines Clients für WINS.................................................................121
Tools zur Skripterstellung für WINS auf Clients...............................................................123
Teil 7: Erstellen von Skripts für andere Netzwerkprotokolle.............................................124
Verwalten von TCP/IP-Filtereinstellungen.......................................................................124
Anzeigen von TCP/IP-Filtereinstellungen ....................................................................127
Aktivieren von TCP/IP-Filtern mithilfe von "EnableIPFilterSec"....................................128
Implementieren von TCP/IP-Filtern mithilfe von "EnableIPSec"...................................130
Aktivieren und Implementieren von TCP/IP-Filtern in einem einzigen Skript................132
Deaktivieren von TCP/IP-Filtern ..................................................................................135
Verwalten weiterer TCP/IP-Einstellungen .......................................................................135
Verwalten von ARP-Einstellungen...............................................................................135
Verwalten von TCP-Einstellungen ...............................................................................135
Verwalten von IP-Paketeinstellungen ..........................................................................135
Abrufen von ARP-, TCP- und IP-Paketeinstellungen ...................................................135
Verwalten von IPX ..........................................................................................................135
Auflisten der Netzwerkprotokolle auf einem Computer....................................................135
Tools zum Erstellen von Skripts für andere Netzwerkprotokolle......................................135
Teil 8: Verwenden von fortgeschrittenen Verfahren für die Verwaltung von Netzwerken.136
Koordinieren der Systemzeit über das Netzwerk.............................................................136
Win32_OperatingSystem.............................................................................................136
Win32_ComputerSystem.............................................................................................137
Win32_TimeZone ........................................................................................................137
Win32_CurrentTime ....................................................................................................138
Win32_LocalTime........................................................................................................138
Win32_UTCTime.........................................................................................................138
Objekt "SWbemDate Time" aus der WMI-Skriptingbibliothek.......................................138
VBScript-Funktion "Now".............................................................................................138
Abrufen der aktuellen Uhrzeit mithilfe der VBScript-Funktion "Now" ............................138
Abrufen der Ortszeit mithilfe von WMI .........................................................................139
Abrufen der UTC-Zeit mithilfe von WMI .......................................................................140
Abrufen der Uhrzeit von einem Remotecomputer ........................................................141
Vergleichen der Ortszeiten zweier Computer ..............................................................141
Festlegen der Uhrzeit auf einem Computer mithilfe von Befehlszeilentools .................144
Festlegen der Uhrzeit auf einem Computer mithilfe von WMI ......................................144
Synchronisieren der Uhrzeiten auf zwei Computern ....................................................147
Synchronisieren der Uhrzeiten auf mehreren Computern ............................................149

Seite 3 von 169


Ändern von Netzwerkeinstellungen in der Registrierung .................................................153
Abrufen eines Zeichenfolgenwertes aus der Registrierung mithilfe von WMI...............156
Abrufen eines numerischen Wertes aus der Registrierung mithilfe von WMI ...............157
Festlegen eines Zeichenfolgenwertes in der Registrierung mithilfe von WMI...............157
Festlegen eines numerischen Wertes in der Registrierung mithilfe von WMI...............158
Tools für die Netzwerkverwaltung mit fortgeschrittenen Skriptingtechniken ....................159
Teil 9: Szenario für das Hinzufügen neuer Clients ..........................................................160
Teil 10: Ressourcen für den Einsatz von Skripts in der Netzwerkverwaltung ..................168
Websites.........................................................................................................................168
Bücher ............................................................................................................................168
Magazine ........................................................................................................................168
Registrierung ..................................................................................................................169
Tools und Downloads .....................................................................................................169

Seite 4 von 169


Teil 1: Einführung
Veröffentlicht: 19. Jul 2004
Aus Sicht des Leiters der EDV-Abteilung (Chief Information Officer, CIO) sind Netzwerke, die auf
TCP/IP (Transmission Control Protocol/Internet Protocol) basieren, das Nervensystem vieler
Organisationen - ihre einwandfreie Funktion ist für die Kommunikation im Unternehmen, die
Kundenzufriedenheit, die Mitarbeitermoral und das Endergebnis von entscheidender Bedeutung.
Aufgrund des Umfangs und der Komplexität dieser Netzwerke und der Zugänglichkeit des TCP/IP-
Protokollstacks für Skripts sind die beim Konfigurieren und Verwalten der TCP/IP-
Netzwerkkomponenten einbezogenen Aufgaben häufig geeignete Kandidaten für die Automatisierung.
Aus der Sicht der Administratoren scheint die Verwaltung eines TCP/IP-Netzwerks manchmal aus
stundenlanger Schinderei zu bestehen, die durch Momente hektischer Schadenskontrolle unterbrochen
wird. Dieses Dokument beschreibt hauptsächlich Möglichkeiten, wie diese ereignislosen Stunden
verlässlicher, strukturierter und produktiver verlaufen können, wodurch sich obendrein das Auftreten
kritischer Momente reduzieren sollte.
Indem Sie für die Durchführung administrativer Vorgänge Skripts erstellen, können Sie die durch
wiederkehrende Aufgaben entstehende Langeweile vermeiden und mehr Zeit für wichtigere Aufgaben
verwenden. Das Ersetzen manueller Verfahren, die der Gefahr von Bedienerfehlern oder der
Vergesslichkeit ausgesetzt sind, durch eine automatisierte Wartung kann auch das Risiko von
Angriffen durch böswillige Viren und Würmer sowie die Wahrscheinlichkeit von Hardwarefehlern
verringern. Wenn Sie die Ausführung der Skripts so planen, dass sie außerhalb der Spitzenzeiten und
ohne Eingriffe des Administrators ablaufen, kann dies helfen, Staus im Netzwerkverkehr und
Unannehmlichkeiten für die Benutzer zu vermeiden. Im Großen und Ganzen kann eine
wohlstrukturierte Auswahl von Skripts zusammen mit den entsprechenden Microsoft® Windows®
GUI- und Befehlszeilentools die Netzwerkoperationen standardisieren und systematisieren, wodurch
Produktivität, Zuverlässigkeit und Moral erhöht werden.
Wie bei den meisten nützlichen Dingen ist auch die in diesem Dokument beschriebene Skripterstellung
mit einem gewissen Aufwand verbunden. Die Sprache, Microsoft® Visual Basic® Scripting Edition
(VBScript), die Skripterstellungsumgebung, Microsoft® Windows® Script Host (WSH) und die
Automatisierungsbibliothek, Windows Management Instrumentation (WMI), erfordern für ihre
Handhabung normalerweise ausgiebigere Untersuchungen als die GUI- oder Befehlszeilentools.
Obwohl die Skripterstellung eine Form der Programmierung darstellt, erfordert sie dennoch kein
mehrjähriges Studium der Informatik, um damit geübt und produktiv umgehen zu können. Tausende
Systemadministratoren und Techniker auf der ganzen Welt haben die Skriptsprache erlernt, sie zu
ihrem Vorteil eingesetzt und erweitert, die jetzt eine Gemeinschaft begründen, die Websites,
Newsgroups und andere unschätzbare Ressourcen für diejenigen anbieten, die von ihren Erfahrungen
profitieren möchten.

Umfang und Gliederung dieses Dokuments


Die Windows-Betriebssystemfamilie bietet eine Vielzahl von Tools zum Verwalten von TCP/IP-
Netzwerken. Dieses Dokument konzentriert sich auf die Tools, mit denen Sie Aufgaben auf TCP/IP-
Clients automatisieren können. Es behandelt Skripterstellungstools und -techniken, mit denen Sie mit
den wichtigsten clientseitigen Elementen von TCP/IP-Netzwerken arbeiten können, einschließlich
DHCP (Dynamic Host Configuration Protocol), DNS (Domain Name System) und WINS (Windows
Internet Name Service). Jeder Abschnitt bietet ausführliche Erläuterungen und Skriptbeispiele mit
entsprechenden Befehlszeilentools und Registrierungsschlüsseln, die am Ende in Tabellen aufgeführt
sind.

Seite 5 von 169


Verlauf zunehmend komplexere Variationen, die durch neue Funktionen geboten werden. In einigen
Bereichen werden allgemein angewandte Szenarien beschrieben, die die Kombination verschiedener
Skriptansätze erfordern. Ziel ist es jedoch nicht, tolle Tricks für die Skripterstellung zu zeigen, sondern
flexible Möglichkeiten zum Automatisieren realer Netzwerkaufgaben zu bieten, mit denen sich
Systemadministratoren im Allgemeinen auseinandersetzen müssen.
In diesem Dokument werden die folgenden Themen behandelt:

Skripterstellung für grundlegende TCP/IP-Netzwerke auf Clients, einschließlich dem Vergleich von
GUI- und Befehlszeilentools mit analogen Verfahren der Skripterstellung.

Erweitern dieser Verfahren zur Skripterstellung auf Remotecomputer und mehrere Computer.

Skripterstellung für die Reservierung von IP-Adressen mithilfe von DHCP und statischen IP-
Adressen.

Skripterstellung für die Verwaltung von DNS-Clients.

Skripterstellung für die Verwaltung von WINS-Clients.

Skripterstellung für TCP/IP-Filterung, für IPX (Internetwork Packet Exchange) und andere
Netzwerkprotokolle.

Fortgeschrittene Verfahren für die Skripterstellung, die das Verwalten der Systemzeit und die
Erstellung von Skripts für Netzwerkeinstellungen in der Registrierung umfassen.

Ein abschließendes Szenario, das viele zuvor veranschaulichte Verfahren in einem komplexen Skript
zusammenfasst, das einem Netzwerk neue Clients hinzufügt.

Eine Liste wichtiger Ressourcen, die bei der Skripterstellung für Netzwerkclients hilfreich sein kann.

Verwenden von VBScript, WSH und WMI in Skriptbeispielen


Da VBScript die beliebteste Sprache zum Automatisieren der Windows-Verwaltung ist, sind alle
Skriptbeispiele in diesem Dokument in dieser Sprache geschrieben. Wenn Sie eher mit Microsoft
JScript®, Perl oder anderen Skriptsprachen arbeiten, erweist sich die Übersetzung in den meisten
Fällen als einfach, da ähnliche Verfahren gelten. Diese Skripts werden alle unter WSH (Windows
Script Host) ausgeführt, der administrativen Skriptumgebung in Windows. Daher können Sie jede
Skriptsprache verwenden, für die ein WSH-Skriptmodul verfügbar ist.
VBScript und WSH bieten jedoch nur die Sprache und die Umgebung für die Skripterstellung. Ein
Großteil der Funktionen zum Abrufen der Konfigurationsinformationen und zum Durchführen von
Änderungen ist in WMI (Windows Management Instrumentation) enthalten, das Hunderte Klassen
bereitstellt, mit deren Hilfe Sie mit Hardware und Software arbeiten können.
Dieses Dokument konzentriert sich nur auf einige wenige WMI-Klassen, die fast alle TCP/IP-
Clientfunktionen in WMI enthalten. Die wichtigste Klasse ist
Win32_NetworkAdapterConfiguration, die die meisten in diesem Dokument besprochenen
Einstellungen enthält. Instanzen von Win32_NetworkAdapterConfiguration haben eine 1:1-
Beziehung zu Instanzen von Win32_NetworkAdapter, d. h. jedes Objekt, das die
Konfigurationseinstellungen für einen Netzwerkadapter darstellt, besitzt ein entsprechendes Objekt,
das die Hardware dieses Netzwerkadapters repräsentiert. Win32_NetworkAdapterSetting, eine
Verknüpfungsklasse, stellt die Beziehung zwischen den vorherigen beiden Klassen dar.
Win32_NetworkAdapterConfiguration umfasst 61 schreibgeschützte Eigenschaften und 41

Seite 6 von 169


Methoden zum Ändern der Eigenschaften. Win32_NetworkAdapter und
Win32_NetworkAdapterSetting enthalten dagegen nur schreibgeschützte Eigenschaften.
In Tabelle 1 sind diese wichtigen Klassen sowie einige zusätzliche Klassen hervorgehoben, die eine
unterschiedliche Anzahl an schreibgeschützten Eigenschaften enthalten. Unter diesen Klassen
enthalten nur Win32_ComputerSystem und Win32_OperatingSystem Methoden sowie einige
wenige Lese-/Schreibeigenschaften.

Tabelle 1 WMI-Klassen, die TCP/IP-Clientfunktionen bereitstellen


WMI-Klasse Eigenschaften Hinweise
Win32_NetworkAdapterConfiguration61 schreibgeschützte Die wichtigste Klasse für die
Eigenschaften; Skripterstellung für TCP/IP-Aufgaben.
41 Methoden zum Enthält die meisten der in diesem
Ändern von Dokument beschriebenen Einstellungen.
Eigenschaften
Win32_NetworkAdapter Schreibgeschützte Besitzt eine 1:1-Beziehung mit Instanzen
Eigenschaften von
Win32_NetworkAdapterConfiguration
Win32_NetworkAdapterSetting Schreibgeschützte Eine Verknüpfungsklasse, die die
Eigenschaften Beziehung zwischen den Klassen
Win32_NetworkAdapterConfiguration
und Win32_NetworkAdapter darstellt.
Win32_NetworkProtocol Schreibgeschützte
Eigenschaften
Win32_ComputerSystem Einige
schreibgeschützte und
ein paar Lese-
/Schreibeigenschaften;
einige Methoden
Win32_OperatingSystem Einige
schreibgeschützte und
ein paar Lese-
/Schreibeigenschaften;
einige Methoden
Win32_PingStatus Schreibgeschützte
Eigenschaften
Win32_LocalTime Schreibgeschützte
Eigenschaften
Win32_UTCTime Schreibgeschützte
Eigenschaften
Win32_TimeZone Schreibgeschützte
Eigenschaften
Obwohl die Namen der WMI-Klassen Win32_NetworkClient, Win32_NetworkConnection und
Win32_NetworkLoginProfile eine Beziehung zu Themen in diesem Dokument vermuten lassen, sind

Seite 7 von 169


sie im Bezug auf das Thema dieses Dokuments nicht direkt von Bedeutung.
Win32_NetworkConnection ruft z. B. Einstellungen ab, die sich auf freigegebene
Netzwerkressourcen beziehen, die momentan mit dem Computer verbunden sind und nicht auf die Art
von Netzwerkverbindungen, die von Netzwerk- und DFÜ-Verbindungen verwaltet werden.
Dieses Dokument bietet viele, jedoch nicht alle Details zu den ausgewählten WMI-Klassen. Weitere
Informationen zu WMI-Klassen, einschließlich einer ausführlicheren Liste der Klassen, finden Sie im
WMI SDK des Microsoft Developers Network (MSDN) unter
http://go.microsoft.com/fwlink/?LinkId=24766 (nur auf Englisch verfügbar).

Technisches Niveau dieses Dokuments


Dieses Dokument ist für System- und Netzwerkadministratoren, Techniker und Architekten gedacht,
die die Skripterstellung bei ihrer Arbeit bereits verwenden oder zukünftig verwenden möchten. Es setzt
eine gewisse Vertrautheit mit der Skripterstellung sowie grundlegendes Wissen zu Netzwerken voraus.
Obwohl nicht versucht wird, Grundlagen der Skripterstellung oder von Netzwerken zu vermitteln,
werden Verfahren zur Skripterstellung detailliert erläutert, wenn diese eingesetzt werden.

Nicht behandelte Themen


Dieses Dokument umfasst weder die Grundlagen zur Skripterstellung noch zu TCP/IP-Netzwerken.
Informationen zu grundlegenden Verfahren der Skripterstellung für die Systemverwaltung finden Sie
im Microsoft® Windows ® 2000 Scripting-Handbuch unter
/germany/technet/datenbank/articles/600356.mspx sowie in den zahlreichen Beispielen im TechNet
Script Center unter http://go.microsoft.com/fwlink/?LinkId=24771 (nur auf Englisch verfügbar).
Informationen zu TCP/IP-Netzwerken unter Windows finden Sie in der Microsoft® Windows
Server™-Hilfe, die im Windows Server-Betriebssystem enthalten ist sowie im Microsoft ® Windows
2000 Server Resource Kit (nur auf Englisch verfügbar).
Der Anwendungsbereich dieses Dokuments beschränkt sich auf die Skripterstellung für TCP/IP-
Clients. Die Skripterstellung für DHCP-, DNS- und WINS-Server, für Router sowie für die
Netzwerküberwachung wird nicht behandelt.
Die zugehörigen Themen zur Skripterstellung für die Domänenverwaltung sowie für
Verzeichnisdienste sind ebenfalls nicht enthalten. Informationen zu diesen Themen können Sie jedoch
im Windows 2000 Scripting-Handbuch unter /germany/technet/datenbank/articles/600356.mspx sowie
in den Beispielskripts im TechNet Script Center unter http://go.microsoft.com/fwlink/?LinkId=24771
(nur auf Englisch verfügbar) finden.
Hinweis
Dieses Dokument behandelt nur die Skripterstellung für IPv4-Netzwerke. Beispiele für IPv6-
Netzwerke sind nicht enthalten.

Befehlszeilentools und Batchdateien


Da sich dieses Dokument auf die Skripterstellung für WMI mit VBScript und WSH konzentriert, wird
die Verwendung der Befehlzeilentools nicht beschrieben, die im Windows-Betriebssystem oder im
Windows 2000 Resource Kit enthalten sind. Auch das Erstellen von Batchdateien wird hier nicht
erläutert. Diese Themen werden in der Dokumentation dieser Produkte sowie in zahlreichen anderen
Büchern behandelt.
Am Ende der einzelnen Abschnitte werden die relevanten Befehlszeilentools jedoch aufgeführt.

Seite 8 von 169


Aufbau von Skripts
Die in diesem Dokument enthaltenen Beispielskripts folgen einigen allgemeinen Mustern:

Konstanten und Variablen


In den meisten Fällen werden Konstanten und einige Variablen (normalerweise die zu ändernden
Variablen) am Anfang des Skripts initialisiert. Es werden jedoch nicht alle Variablen vor der
Verwendung initialisiert. Da VBScript es nicht erfordert, werden kaum Variablen deklariert, wodurch
die Skripts kürzer ausfallen.
Als Hilfe beim Debuggen können Sie beim Schreiben eigener Skripts alle Variablen explizit mit der
Anweisung Dim deklarieren und diese Deklaration mithilfe Option Explicit erzwingen.

Herstellen der Verbindung zum WMI-Dienst


Fast alle Skripts beginnen damit, die Verbindung zum WMI-Dienst herzustellen, um dann einen
Verweis auf Instanzen einer oder mehrerer WMI-Klassen abzurufen.

Linearer Ausführungspfad
Die meisten Skripts folgen einem relativ linearen Ausführungspfad, damit sie einfacher zu verstehen
und nachzuverfolgen sind. Nur ein paar der längeren und komplexeren Skripts sind in Unterroutinen
und Funktionen unterteilt.
In einigen Situationen wäre ein modularer Ansatz möglicherweise anpassbarer und flexibler. Wenn Sie
der Meinung sind, dass Sie einen Codeabschnitt häufiger verwenden oder Sie diesen an verschiedenen
Stellen im Skript aufrufen möchten, sollten Sie erwägen, diesen Codeabschnitt in eine Unterroutine
oder Funktion umzuwandeln, die in anderen Skripts wiederverwendet werden kann.
Bei IT-Gruppen, in denen mehrere Personen Skripts schreiben oder verwenden, hilft die
Standardisierung von Skriptformaten und -konventionen beim Vermeiden von Verwirrungen und
verbessert somit die Konsistenz des Codes.

VBScript-Fehlerbehandlung
Skripts, die Änderungen vornehmen oder Verbindungen zu Remotecomputern herstellen, verwenden
die VBScript-Anweisung "On Error Resume Next" zusammen mit einfachen Formen der
Fehlerbehandlung. "On Error Resume Next" blendet Fehler im Skript aus, indem das Skript die
Ausführung hinter der Zeile fortsetzen kann, in der der Fehler aufgetreten ist.
Beim Debuggen kann es hilfreich sein, die "On Error Resume Next"-Anweisung temporär als
Kommentar zu kennzeichnen, indem an den Anfang der Zeile ein Hochkomma gestellt wird ('). Das
Versehen dieser Anweisung mit dem Kommentarzeichen führt bei Fehlern zum Abbruch des Skripts
mit einer Fehlermeldung, die Ihnen beim Lokalisieren des Problems helfen kann.
Die meisten dieser Skripts prüfen, ob der Computer im Netzwerk verfügbar ist. Ist dies der Fall, prüfen
die Skripts außerdem, ob sie auf diesem Computer eine Verbindung zum WMI-Dienst herstellen
können, da WMI möglicherweise auf Clients mit älteren Versionen des Betriebssystems nicht
installiert ist. In anderen Bereichen, in denen häufiger Laufzeitfehler erwartet werden, ist
möglicherweise eine stabilere Fehlerbehandlung angebracht.

Seite 9 von 169


Beispielskripts sind Codebeispiele, keine Tools
Die in diesem Dokument enthaltenen Beispielskripts werden als Codebeispiele dargestellt, die sich auf
eine oder mehrere Aufgaben konzentrieren. Sie können diese Beispiele aufgliedern, analysieren und
neu zusammenfügen, um Skripts zu erstellen, die Ihren eigenen Anforderungen entsprechen. Diese
Skripts wurden nicht als abgeschlossene, stabile Tools entwickelt, die viele verschiedene Aufgaben
erledigen können und für alle Eventualitäten gerüstet sind.
Eine implizierte Annahme bei den Skripts ist, dass diese von Administratoren mit Kenntnissen zur
Skripterstellung ausgeführt werden, die in der Lage sind, Skripts zu bearbeiten, um bei Bedarf
Parameter zu ändern. Mit wenigen Ausnahmen akzeptieren die Skripts keine Befehlszeilenargumente,
wie es bei vielen der komplexeren Skripts der Fall ist, die in Windows enthalten sind. Außerdem
versuchen sie nicht, alle Eventualitäten oder möglichen Fehler zu behandeln.
Vorsicht
Die Beispielskripts sind nicht dazu gedacht, unangepasst oder von Supportmitarbeitern bzw.
Endbenutzern ausgeführt zu werden, die mit der Skripterstellung nicht vertraut sind.

Ausführen von Beispielskripts


Führen Sie die folgenden Schritte durch, um die in diesem Dokument enthaltenen Beispielskripts
auszuführen:
1.Melden Sie sich mit den erforderlichen administrativen Rechten an.
2.Kopieren Sie den Skriptcode in eine Textdatei.
3.Speichern Sie diesen mit der Erweiterung VBS.
Wichtig
Kopieren Sie nicht die Zeilennummern, die am linken Rand angezeigt werden (entlang der linken
Seite der meisten Beispielskripts).
4.Öffnen Sie eine Eingabeaufforderung und navigieren Sie zu dem Ordner, in dem sich das Skript
befindet.
In diesem Dokument wird immer davon ausgegangen, dass sich die Skripts im Ordner C:\Scripts
befinden. Sie können die Skripts jedoch in jedem beliebigen Ordner ablegen.
Wenn Sie Ihre Umgebung für die Skripterstellung einrichten, wird empfohlen, dass Sie Cscript.exe als
WSH-Standardskripthost festlegen, da sämtliche Skripts für die Ausführung über die Befehlszeile
entworfen wurden. Die Vorgehensweise wird nachfolgend erläutert.
Wichtig
Wenn Sie Wscript.exe verwenden, den GUI-Host für die Skripterstellung, öffnet jede Skriptausgabe
ein Popup-Objekt, das Sie schließen müssen. Dies kann sich als zeitaufwendig erweisen, wenn ein
Skript zahlreiche Ausgaben erzeugt und dadurch eine unbeaufsichtigte Ausführung des Skripts
verhindert.
Wenn Sie ein Skript ausführen, das Änderungen vornimmt, stellen Sie sicher, dass Sie Ihre aktuellen
Einstellungen sichern, bevor die Änderungen durchgeführt werden. Die Vorgehensweise wird
nachfolgend erläutert.

Seite 10 von 169


Ausführen von Skripts mit administrativen Rechten
Windows, WSH und die WMI-Sicherheit erfordern, dass Sie zum Ausführen der Skripts auf lokalen
oder Remotecomputern, die nicht an eine Domäne gebunden sind, die Anmeldeinformationen eines
lokalen Administrators verwenden. Für Computer, die an eine Domäne gebunden sind, können Sie
auch die Anmeldeinformationen eines Domänenadministrators verwenden. Sie können mit einem
Skript, das unter Verwendung Ihrer Anmeldeinformationen ausgeführt wird, keine Ergebnisse
erreichen, die Sie nicht auch mit einem Befehlszeilentool oder über die Windows-Oberfläche erreichen
können.
Weitere Informationen zu Sicherheitsanforderungen für die Skripterstellung finden Sie in "Tales from
the Script – September 2003: Transform Your Workstation into a Scripting Dynamo" im Microsoft
TechNet unter http://go.microsoft.com/fwlink/?LinkId=24767 (nur auf Englisch verfügbar).

Festlegen von Cscript als Standardskripthost


Um Cscript.exe als Standardskripthost zu verwendet, das Logo zu unterdrücken, und diese
Einstellungen als Standard zu speichern, führen Sie folgenden Befehl über die Befehlszeile aus:

cscript //h:cscript //nologo //s


Die meisten Beispielskripts in diesen Dokument führen Aktionen auf dem lokalen Computer durch, der
für die WMI durch einen Punkt (.) dargestellt wird. In einigen Skripts sind gewisse Werte, wie
Computernamen oder IP-Adressen, im oberen Bereich des Skripts als Variablen fest kodiert. Damit
diese Skripts auf Ihrem Computer oder im Netzwerk ausgeführt werden können, müssen Sie diese
Werte erst gemäß der Netzwerk- und Hostkonfigurationen anpassen. Diese erforderlichen Änderungen
werden zusammen mit den einzelnen Skripts erläutert.

Speichern aktueller Einstellungen vor dem Ausführen von Skripts, die


Änderungen vornehmen
Einige Beispielskripts nehmen Änderungen an dem Computer vor, für den sie ausgeführt werden.
Diese Skripts werden mit einem Vorsichtshinweis wie dem Folgenden gekennzeichnet.
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.
Sie sollten alle aktuellen IP-Einstellungen in einer Textdatei speichern, bevor Sie ein Skript ausführen,
dass Änderungen vornimmt. Dazu können Sie die folgende Befehlszeile ausführen:

ipconfig.exe /all > ipconfig.txt


Diese Befehlszeile leitet die Ausgabe von ipconfig in eine Textdatei um, die sich in dem Ordner
befindet, aus dem der Befehl heraus ausgeführt wurde.
Zusätzlich zum Befehl ipconfig beginnen einige Abschnitt dieses Dokuments mit einem Skript, das die
Einstellungen für den jeweiligen Netzwerkabschnitt anzeigt. Sie können Ipsettings.vbs,
Dhcpsettings.vbs, Dnssettings.vbs und Winssettings.vbs verwenden, um Konfigurationen für diese
Bereiche zu erfassen, bevor Sie ein Skript ausführen, durch das diese Konfiguration möglicherweise
geändert wird.

Seite 11 von 169


Systemanforderungen
In diesem Dokument wird davon ausgegangen, dass Sie die Skripts unter Windows 2000, Windows XP
oder Windows Server 2003 ausführen. Die meisten hier verfügbaren WMI-Funktionen sind unter
Windows 2000 verfügbar. Windows XP und Windows Server 2003 umfassen jedoch auch eine Reihe
hilfreicher neuer Klassen, Eigenschaften und Methoden, von denen einige hier veranschaulicht werden.
Auf Systemanforderungen, die bindender sind als die vorherigen, wird in den einzelnen Abschnitten
hingewiesen.
Führen Sie, wenn möglich, die aktuellsten Versionen von WSH und VBScript, Version 5.6 Build 8515,
aus, die beide im Windows Script-Download von MSDN unter
http://go.microsoft.com/fwlink/?LinkId=27639 (nur auf Englisch verfügbar) zur Verfügung stehen.
Dieser Download ist für Microsoft® Windows XP, Windows® 2000, Windows® Millennium Edition
(Me), Windows NT® Server 4.0 und Windows® 98 verfügbar.
Die Versionen von WMI und ADSI (Active Directory Service Interfaces) hängen vom Betriebssystem
des Computers ab. Microsoft® Windows® Millennium Edition und nachfolgende Versionen des
Betriebssystems enthalten alle WMI. Für Windows NT Server 4.0 und Windows 98 können Sie WMI,
Version 1.5, von MSDN downloaden. Für Windows NT Server 4.0 und Windows 98 können Sie
Active Directory-Clienterweiterungen von MSDN downloaden, die es diesen Betriebssystemen
ermöglichen, als Active Directory-Clients zu fungieren.
Weitere Informationen zum Einrichten einer Skripterstellungsumgebung für die Systemverwaltung
sowie zu einem Skript, das Sie über die von Ihnen ausgeführten Versionen der Skripttechnologien und
deren Status informiert finden Sie in "Tales from the Script – September 2003: Transform Your
Workstation into a Scripting Dynamo" im Microsoft TechNet unter
http://go.microsoft.com/fwlink/?LinkId=24767 (nur auf Englisch verfügbar).

Weitere wichtige Ressourcen


Ausführlichere Hintergrundinformationen zur Skripterstellung mit VBScript, WSH und WMI finden
Sie in den folgenden grundlegenden Quellen:

TechNet Script Center
Hunderte Beispielskripts
unter /germany/technet/scriptcenter/default.mspx (Deutsch) und
http://go.microsoft.com/fwlink/?LinkId=24771 (Englisch).

Windows 2000 Scripting-Handbuch unter /germany/technet/datenbank/articles/600356.mspx


Die Rubrik "Tales from the Script" in TechNet
Behandelt grundlegende und fortgeschrittenere Skripterstellung
http://go.microsoft.com/fwlink/?LinkId=27640 (nur auf Englisch verfügbar).

MSDN Scripting Clinic
Behandelt fortgeschrittene Themen zur Skripterstellung
http://go.microsoft.com/fwlink/?LinkId=24784 (nur auf Englisch verfügbar).

MSDN Windows Script
Umfasst die Dokumentation und Downloads für VBScript und Windows Script Host

Seite 12 von 169


http://go.microsoft.com/fwlink/?LinkId=298 (nur auf Englisch verfügbar).

WMI Software Developers Kit (SDK)
Bestandteil des Platform SDK im Microsoft Developers Network (MSDN)
http://go.microsoft.com/fwlink/?LinkId=24766 (nur auf Englisch verfügbar).
Eine vollständige Liste der Ressourcen finden Sie am Ende dieses Dokuments.

Teil 2: Skripterstellung für grundlegende TCP/IP-Netzwerke auf


Clients
Veröffentlicht: 19. Jul 2004
Bei einigen Arten von IT-Umgebungen, z. B. Kongresszentren, Hotels und Universitäten, müssen die
Netzwerkadministratoren die Netzwerkclientdaten regelmäßig ändern, da kurzzeitig eingebundene
Benutzer und Computer kommen und gehen. Bei dieser Art von Netzwerkumgebung kann sich die
Verwendung von Skripts zum Konfigurieren von Netzwerkclients als besonders hilfreich erweisen.
Auch bei weniger unruhigen TCP/IP-Netzwerken kann die Skripterstellung für grundlegende
Konfigurationen dabei helfen, die Änderungs- und Konfigurationsverwaltung zu standardisieren,
manuelle Verwaltungsfehler zu vermeiden sowie Massenänderungen auf zahlreichen Clients schnell
und effektiv zu erreichen.
Windows bietet umfassende GUI- und Befehlszeilenfunktionen, die Netzwerkadministratoren beim
Verwalten von TCP/IP-Netzwerkclients helfen. Sie können die meisten Netzwerkeinstellungen in
Windows 2000 über Netzwerk- und DFÜ-Verbindungen und in Windows XP und Windows Server
2003 (in der Systemsteuerung) über Netzwerkverbindungen anzeigen und ändern. Allgemein
gebräuchliche Befehlszeilentools wie Ipconfig.exe und Ping.exe bieten zusätzliche Optionen.
Manchmal sind nur diese Tools erforderlich, um eine Netzwerkaufgabe durchzuführen. Wenn Sie
jedoch wiederholt auf "OK" klicken müssen oder ständig versuchen, einen Parameter auf Hunderten
von Computern zu ändern, der von zwei anderen Parametern abhängig ist, sollten sich die in diesem
Dokument beschriebenen Verfahren als hilfreich erweisen.
In diesem Abschnitt werden die grundlegenden Verfahren zum Abrufen und Ändern der häufigsten
TCP/IP-Einstellungen behandelt, z. B. IP-Adressen und Subnetzmasken. Der Abschnitt beginnt mit
einer kurzen Übersicht über die Methoden, die keine Skripts verwenden sowie Befehlszeilenmethoden,
mit denen Sie diese Aufgaben durchführen können. Anschließend werden in diesem Abschnitt eine
Reihe von Skriptverfahren für die Arbeit mit den zwei wichtigsten WMI-Klassen für diese Aufgaben
behandelt. Abschließend wird erläutert, wie erweiterte TCP/IP-Einstellungen mithilfe eines Skripts
abgerufen werden, das fast alle Funktionen des Befehls ipconfig /all reproduziert.

Abrufen grundlegender TCP/IP-Clienteinstellung mithilfe von Methoden,


die keine Skripts verwenden
Wenn nur eine Reihe von TCP/IP-Einstellungen auf einem Computer geprüft werden müssen,
bevorzugen viele Netzwerkadministratoren die Verwendung der Windows-Oberfläche, die in Windows
XP über Netzwerkverbindungen und in Windows 2000 über Netzwerk- und DFÜ-Verbindungen
bereitgestellt werden.

So prüfen Sie TCP/IP-Einstellungen mithilfe der Windows-Oberfläche in Windows XP


1.Öffnen Sie die Systemsteuerung, und doppelklicken Sie auf Netzwerkverbindungen.
2.Klicken Sie im Dialogfeld Netzwerkverbindungen mit der rechten Maustaste auf eine bestimmte

Seite 13 von 169


Netzwerkverbindung, und klicken Sie anschließend auf Eigenschaften.
3.Wählen Sie im Dialogfeld Eigenschaften die Option Internetprotokoll (TCP/IP), und klicken Sie
dann auf Eigenschaften.
In Abbildung 1 sind die verfügbaren Optionen bei Verwendung des Dialogfelds Eigenschaften von
Internetprotokoll (TCP/IP) aufgeführt.

Abbildung 1 Dialogfeld "Eigenschaften von Internetprotokoll (TCP/IP)"


Bild maximieren
Die Registerkarten DNS, WINS und Optionen zeigen auch Einstellungen für diese Technologien an
und bieten Ihnen die Möglichkeit, die meisten Einstellungen zu ändern.

Abrufen grundlegender Einstellungen mithilfe von "Ipconfig.exe"


Viele Administratoren verwenden Befehlszeilentools zum Abrufen der Konfigurationsdaten von
TCP/IP-Clients. Ein beliebtes Befehlszeilentool ist Ipconfig.exe, das in den meisten Windows-
Betriebssystemen enthalten ist. In Abbildung 2 werden die Netzwerkeinstellungen veranschaulicht, die
Sie mithilfe von Ipconfig.exe anzeigen können.

Abbildung 2 Typische Netzwerkeinstellungen, die mit "Ipconfig.exe" angezeigt werden


Bild maximieren
Sie können mit diesem Tool nicht nur Netzwerkeinstellungen anzeigen, sondern auch bestimmte
Vorgänge durchführen. Die Option /renew erneuert z. B. DHCP-Leases und die Option /flushdns leert

Seite 14 von 169


den DNS-Clientauflösungscache.

Abrufen grundlegender Einstellungen mithilfe eines Skripts


Durch das Schreiben von Skripts in VBScript, die WSH und WMI verwenden, können
Systemadministratoren leistungsfähigere und flexiblere Tools zum Verwalten einer breiteren Palette
von Windows-Funktionen erstellen.
Für jede Einstellung im Dialogfeld Erweiterte TCP/IP-Einstellungen bieten WMI-Klassen
Eigenschaften und Methoden, die Clientnetzwerkeinstellungen abrufen und ändern können, von denen
die Klasse Win32_NetworkAdapterConfiguration die wichtigste ist. In Abbildung 3 wird
veranschaulicht, welche WMI-Klassen den verschiedenen Elementen des Dialogfelds Erweiterte
TCP/IP-Einstellungen entsprechen.

Abbildung 3 Wie TCP/IP WMI-Eigenschaften und -Methoden der Windows-UI entsprechen


Bild maximieren
Hinsichtlich der Skripterstellung ist eine WMI-Klasse eine einfache Möglichkeit einen
zusammengehörigen Satz von Konfigurationseinstellungen zu nutzen und diesen dann über einen
aussagekräftigen Namen zu konfigurieren. Die Skripts fragen Einstellungen über Eigenschaften ab, und
führen über Methoden Änderungen durch.
Win32_NetworkAdapterConfiguration umfasst auch Eigenschaften und Methoden, die den
Registerkarten DNS, WMI und Optionen des Dialogfelds Erweiterte TCP/IP-Einstellungen
entsprechen. Die nachfolgenden Abschnitte behandeln dieses Thema ausführlich.

Verwenden der WMI-Klasse "Win32_NetworkAdapterConfiguration"


Die 61 Eigenschaften und 41 Methoden von Win32_NetworkAdapterConfiguration decken fast alle
Einstellungen und Aktionen, die über die Windows-Oberfläche oder Befehlszeilentools zur Verfügung
stehen ab sowie auch einige nicht verfügbare. Zum Abrufen einer Eigenschaft oder Aufrufen einer
Methode sind nur einige Zeilen VBScript-Code erforderlich, wie im folgenden Beispiel gezeigt wird.
Weitere Informationen zu den Eigenschaften und Methoden dieser WMI-Klasse finden Sie im WMI
Software Development Kit (SDK) unter http://go.microsoft.com/fwlink/?LinkId=29991 (nur auf
Englisch verfügbar).
Das Aufrufen der Methoden InstancesOf() oder ExecQuery() des Objekts SWbemServices der Klasse
Win32_NetworkAdapterConfiguration gibt eine Auflistung von Objekten zurück. Diese Auflistung
besitzt die Form einer SWbemObjectSet-Auflistung, die keine oder mehr Instanzen von
SWbemObject enthält. Diese Objekte und Methoden sind in der WMI-Referenz des WMI SDK unter
"Scripting API for WMI" (nur auf Englisch verfügbar) ausführlich beschrieben.

Seite 15 von 169


Anzeigen einer Einstellung
Im folgenden Beispiel wird die Eigenschaft DHCPEnabled der Klasse
Win32_NetworkAdapterConfiguration angezeigt. Die Eigenschaft DHCPEnabled gibt einen
booleschen Wert zurück. Eine solche Eigenschaft kann entweder den Wert wahr oder falsch haben. Die
von VBScript verwendeten Werte sind -1 für wahr (true) und 0 für falsch (false).
Programmiertechnisch kann jedoch auch jeder andere Wert außer Null als Equivalent für "wahr"
verwendet werden. In den meisten Fällen sollten Skripts jedoch die VBScript-Schlüsselwörter "True"
(wahr) und "False" (falsch) für diese Werte verwenden.
Das in diesem Beispielskript verwendete Muster kann für sämtliche Eigenschaften von
Win32_NetworkAdapterConfiguration wiederholt werden, ausgenommen für Eigenschaften, die
Arrays zurückgeben. Die Behandlung von Eigenschaften, die Arrays zurückgeben, wird später in
diesem Dokument beschrieben.

Schritte zur Skripterstellung


1.Stellen Sie mithilfe des Monikers "winmgmts:" eine Verbindung zum WMI-Dienst her.
2.Rufen Sie alle Instanzen der Klasse Win32_NetworkAdapterConfiguration mithilfe der Methode
InstancesOf ab.
Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem
Computer.
3.Für jede Netzwerkadapterkonfiguration in der Auflistung verwenden Sie die WSH-Methode Echo,
um die boolesche Eigenschaft anzuzeigen, die der Einstellung DHCP aktiviert im Feld IP-Adressen
der Registerkarte IP-Einstellungen des Dialogfelds Erweiterte TCP/IP-Einstellungen entspricht.

Listing 1 Onesetting.vbs
1Set objWMIService = GetObject("winmgmts:")
2Set colNicConfig = _
3 objWMIService.InstancesOf("Win32_NetworkAdapterConfiguration")
4For Each objNicConfig In colNicConfig
5 WScript.Echo objNicConfig.DHCPEnabled
6Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche
Ausgabe wie die folgende angezeigt:
C:\scripts>onesetting.vbs
-1
0
0
0
0
0
0

Seite 16 von 169


0
Hinweis
Ein Computer, der nur einen physischen Netzwerkadapter enthält, zeigt möglicherweise Einstellungen
für mehrere Netzwerkadapter an. Dies liegt daran, dass einige Arten von Netzwerkverbindungen (z. B.
VPN-Adapter) zwar vorhanden sind, jedoch normalerweise in der Netzwerkumgebung oder im
Gerätemanager nicht angezeigt werden..

Anzeigen einer booleschen Einstellung als Zeichenfolge


Wenn Sie eine besser lesbare Ausgabe erzeugen möchten, führt eine kleine Änderung in Zeile 5 dazu,
dass die booleschen Einstellungen als "True" oder "False" anstelle von "-1" und "0" angezeigt werden,
wodurch sich die Lesbarkeit der Skriptausgabe erhöht. Durch Ausgeben von "DHCP Enabled: " und
anschließendem Verknüpfen der Eigenschaft DHCPEnabled ermöglicht das Skript VBScript, die
boolesche Einstellung in ein Zeichenfolgenformat zu konvertieren.
Obwohl alle VBScript-Variablen vom Typ "Variant" sind, wandelt (transformiert) VBScript Varianten
abhängig vom Kontext, in denen sie verwendet werden, automatisch in geeignete Datentypen. In
diesem Fall, da das Skript eine Variable vom Typ "Boolean" mit einer reinen Zeichenfolge verknüpft,
konvertiert VBScript den booleschen Wert in seine äquivalente Zeichenfolge.

Schritte zur Skripterstellung


1.Stellen Sie die Verbindung zum WMI-Dienst her.
2.Rufen Sie alle Instanzen der Klasse Win32_NetworkAdapterConfiguration mithilfe der Methode
InstancesOf ab.
Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem
Computer.
3.Verwenden Sie für jede Konfiguration eines Netzwerkadapters die WSH-Methode Echo, um die
Beschriftung "DHCP Enabled:" mit der booleschen Eigenschaft DHCPEnabled verknüpft
anzuzeigen.

Listing 2 Onesetting-string.vbs
1Set objWMIService = GetObject("winmgmts:")
2Set colNicConfig = _
3 objWMIService.InstancesOf("Win32_NetworkAdapterConfiguration")
4For Each objNicConfig In colNicConfig
5 WScript.Echo "DHCP Enabled: " & objNicConfig.DHCPEnabled
6Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche
Ausgabe wie die folgende angezeigt:
C:\scripts>onesetting-string.vbs
DHCP Enabled: True
DHCP Enabled: False
DHCP Enabled: False
DHCP Enabled: False

Seite 17 von 169


DHCP Enabled: False
DHCP Enabled: False
DHCP Enabled: False
DHCP Enabled: False

Anzeigen einer Einstellung für bestimmte Netzwerkadapter


Die vorherigen beiden Beispiele zeigen den Wert der Eigenschaft DHCPEnabled für jede
Netzwerkadapterkonfiguration an, die WMI finden kann. In einigen Fällen kann es vorkommen, dass
Sie nicht mit allen Netzwerkadaptern arbeiten möchten. Bestimmte Features, z. B. Routing, RAS und
VPNs, erstellen ihre eigenen Konfigurationen für die virtuellen Netzwerkadapter, für die TCP/IP nicht
aktiviert ist.
Sie können die Methode ExecQuery() des Objekts SWbemServices (das in Zeile 1 durch den Aufruf
von GetObject() zurückgegebene Objekt) verwenden, um nur für IP aktivierte Netzwerkadapter zu
filtern. ExecQuery() übernimmt als erforderlicher Parameter im Allgemeinen eine Zeichenfolge, die
eine Abfrage in WQL (WMI Query Language) enthält, einem Dialekt von SQL (Structured Query
Language). Sie gibt eine SWbemObjectSet-Auflistung von Objekten zurück.
Obwohl bei WQL-Abfragen nicht zwischen Groß-/Kleinschreibung unterschieden wird, ist die
Standardvorgehensweise, alle WQL-Schlüsselwörter in Großbuchstaben darzustellen, um das Skript
leserlicher zu gestalten.
Die von Skripts zur Systemverwaltung am häufigsten verwendete grundlegende Abfrage ist "SELECT
* FROM Klassenname ". Diese Abfrage gibt alle Instanzen der Klasse zurück und "*" dient als
Platzhalterzeichen (wie in SQL und bei Dateisystembezeichnern in der Befehlszeile), das alle
Eigenschaften der einzelnen Instanzen zurückgibt. "SELECT * FROM Win32_Service" gibt z. B. alle
Eigenschaften aller Instanzen der Klasse Win32_Service Zurück - dies wären beispielsweise alle
Dienste, die momentan auf dem Computer aktiv sind.
Im folgenden Skript ermöglicht es das Schlüsselwort WHERE (ebenfalls Teil von SQL)
einschränkende Bedingungen für das Skript anzugeben. Hier fordert die Abfrage "SELECT * FROM
Win32_NetworkAdapterConfiguration WHERE IPEnabled = True" alle Instanzen der Klasse
Win32_NetworkAdapterConfiguration an, deren boolescher Wert der Eigenschaft IPEnabledTrue
ist, d. h. für die IP aktiviert ist.
In diesem Beispiel wird auch eine zweite Eigenschaft hinzugefügt, Index (siehe Zeile 5), um zwischen
Adaptern unterscheiden zu können, falls mehrere installiert sind. Index ist die Schlüsseleigenschaft der
Klasse Win32_NetworkAdapterConfiguration und dient als eindeutige Kennung für die einzelnen
Instanzen der Klasse. Der Wert von Index ist eine ganze Zahl, die für die erste aktive
Netzwerkadapterkonfiguration bei 0 beginnt und für nachfolgende Konfigurationen um 1 erhöht wird.
Listing 3 gibt die Eigenschaften Index und DHCPEnabled für alle Adapter zurück, für die IPEnabled
den Wert True ergibt.

Schritte zur Skripterstellung


1.Stellen Sie die Verbindung zum WMI-Dienst her.
2.Rufen Sie die bestimmten Instanzen der Klasse Win32_NetworkAdapterConfiguration mit der
Methode ExecQuery und einer Abfragezeichenfolge ab, die die Netzwerkadapter filtert, deren

Seite 18 von 169


Eigenschaft IPEnabled den Wert True ergibt.
Die zurückgegebene Auflistung besteht aus den Netzwerkadapterkonfigurationen auf dem Computer,
für die IP aktiviert ist.
3.Verwenden Sie für jede Konfiguration eines Netzwerkadapters die WSH-Methode Echo, um den
Index des Netzwerkadapters und die Eigenschaft DHCPEnabled anzuzeigen.

Listing 3 Onesetting-execquery.vbs
1Set objWMIService = GetObject("winmgmts:")
2Set colNicConfig = objWMIService.ExecQuery("SELECT * FROM " & _
3 "Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
4For Each objNicConfig In colNicConfig
5 WScript.Echo "Network Adapter: " & objNicConfig.Index
6 WScript.Echo " DHCP Enabled: " & objNicConfig.DHCPEnabled
7Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche
Ausgabe wie die folgende angezeigt:
C:\scripts>onesetting-execquery.vbs
Network Adapter: 1
DHCP Enabled: True
Network Adapter: 10
DHCP Enabled: False
In anderen Fällen möchten Sie die Ausführung des Skripts möglicherweise auf eine einzelne
Netzwerkadpaterkonfiguration einschränken. Auf einem zweifach vernetzten Computer, der mit zwei
Netzwerken verbunden ist, können Sie z. B. DHCP für einen Netzwerkadapter aktivieren, während es
für den anderen deaktiviert bleibt. Dazu können Sie eine Abfrage wie "SELECT * FROM
Win32_NetworkAdapterConfiguration WHERE Index = 0" verwenden.
Eine einfachere Methode, um dies zu erreichen, ist die Verwendung der Methode Get() des Objekts
SWbemServices (zurückgegeben durch den Aufruf von GetObject für den Moniker wingmgts:).
Get() nimmt eine Zeichenfolge, die einen WMI-Objektpfad als erforderlichen Parameter enthält und
gibt ein SWbemObject-Objekt zurück.
Tipp
Das folgende Skript zeigt eine Eigenheit von WMI: Obwohl VBScript, WSH und WMI normalerweise
Leerzeichen ignorieren, darf innerhalb des an objWMIService.Get() übergebenen Objektpfades (dem
Zeichenfolgenparameter) kein Leerzeichen vor oder hinter dem Gleichheitszeichen (=) in "Index=0"
enthalten sein. Ein Leerzeichen auf einer Seite des Gleichheitszeichens führt zu einem Fehler.

Schritte zur Skripterstellung


1.Stellen Sie die Verbindung zum WMI-Dienst her.
2.Rufen Sie die Instanz der Klasse Win32_NetworkAdapterConfiguration mit dem Index (die
Schlüsseleigenschaft) "0" mithilfe der Methode Get ab.
Die zurückgegebene Auflistung besteht aus der Netzwerkadapterkonfiguration auf dem Computer,
für den der Index den Wert "0" hat.

Seite 19 von 169


3.Verwenden Sie für diese Instanz die WSH-Methode Echo, um den Index des Netzwerkadapters und
die Eigenschaft DHCPEnabled anzuzeigen.

Listing 4 Onesetting-onenic.vbs
1intIndex = 1 ' index of an IP-enabled network adapter
2Set objWMIService = GetObject("winmgmts:")
3Set colNicConfig = objWMIService.ExecQuery("SELECT * FROM " & _
4 "Win32_NetworkAdapterConfiguration WHERE Index = " & intIndex)
5For Each objNicConfig In colNicConfig
6 WScript.Echo "Network Adapter: " & objNicConfig.Index
7 WScript.Echo " DHCP Enabled: " & objNicConfig.DHCPEnabled
8Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche
Ausgabe wie die folgende angezeigt:
C:\scripts>onesetting-onenic.vbs
Network Adapter: 1
DHCP Enabled: True

Anzeigen mehrwertiger Eigenschaften


Da es der Netzwerkadaptereinstellung unter Windows erlaubt ist, mehrere IP-Adressen,
Subnetzmasken, Standardgateways oder DNS-Server zu besitzen, können einige Eigenschaften von
Win32_NetworkAdapterConfiguration mehrere Werte aufweisen. WMI gibt mehrere Werte einer
Eigenschaft in Form von Arrays zurück. Da ein Array mehrere Werte enthält, kann er nicht auf dieselbe
Weise wie eine einzelne Zeichenfolge, ein boolescher Wert oder eine Zahl behandelt werden.
VBScript bietet zwei Verfahren zum Umwandeln von Arrays in das Zeichenfolgenformat, das mit
WScript.Echo angezeigt werden kann: Die Funktion Join und die Schleife For Each.

Verwenden der Funktion "Join" von VBScript


Die Funktion Join von VBScript verknüpft oder verbindet Elemente eines Arrays zu einer einzelnen
Zeichenfolge, die durch ein oder mehrere in einem zweiten, optionalen Parameter angegebene Zeichen
getrennt sind. Wenn Sie dieses Trennzeichen nicht angeben, verwendet Join das Leerzeichen als
Trennzeichen.
Die Funktion Join ist erforderlich, da Sie ein Array nicht direkt anzeigen können. Zuerst müssen Sie
das Array in seine Elemente aufteilen oder es in eine Zeichenfolge konvertieren. Mithilfe der Funktion
Join können Sie die Formatierung dieser Zeichenfolge steuern. Sie können z. B. entweder das Komma
oder den Doppelpunkt als Trennzeichen verwenden (anstelle des Leerzeichens), um die Elemente im
Array zu trennen.

Schritte zur Skripterstellung


1.Stellen Sie die Verbindung zum WMI-Dienst her.
2.Rufen Sie alle Instanzen der Klasse Win32_NetworkAdapterConfiguration mit der Methode
ExecQuery und einer Abfragezeichenfolge ab, die die Netzwerkadapter filtert, deren Eigenschaft
IPEnabled den Wert True ergibt.
Die zurückgegebene Auflistung besteht aus den Netzwerkadapterkonfigurationen auf dem Computer,

Seite 20 von 169


für die IP aktiviert ist.
3.Verwenden Sie für jede Konfiguration eines Netzwerkadapters die WSH-Methode Echo, um den
Index des Netzwerkadapters anzuzeigen.
4.Gehen Sie wie folgt vor, wenn für die Eigenschaft IPAddress (ein Array) Folgendes zutrifft:

Wenn die Eigenschaft ungleich Null ist, verwenden Sie die Funktion Join von VBScript, um die
Elemente des Arrays IPAddress zu einer durch Leerzeichen (Standardwert) getrennten Zeichenfolge
zu verknüpfen und weisen diese dann einer Variablen zu.

Wenn die Eigenschaft gleich Null ist, weisen Sie der Variablen eine leere Zeichenfolge zu.
5.Zeigen Sie die durch Leerzeichen getrennte Zeichenfolge der IP-Adressen an.

Listing 5 Onesetting-array-join.vbs
1 Set objWMIService = GetObject("winmgmts:")
2 Set colNicConfig = objWMIService.ExecQuery("SELECT * FROM " & _
3 "Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
4 For Each objNicConfig In colNicConfig
5 WScript.Echo "Network Adapter: " & objNicConfig.Index
6 If Not IsNull(objNicConfig.IPAddress) Then
7 strIPAddresses = Join(objNicConfig.IPAddress)
8 Else
9 strIPAddresses = ""
10 End If
11 WScript.Echo " IP Address(es): " & strIPAddresses
12Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche
Ausgabe wie die folgende angezeigt:
C:\scripts>onesetting-array-join.vbs
Network Adapter: 1
IP Address(es): 0.0.0.0
Network Adapter: 10
IP Address(es): 192.168.1.2

Verwenden von "For Each ... In ... Next"


Die Schleife For Each bietet eine alternative Möglichkeit, um die Elemente eines Arrays anzuzeigen.
Diese Anweisung durchläuft das Array und ermöglicht es dem Skript, für jedes separate Element eine
Aktion durchzuführen. In diesem Fall wird das Element einfach angezeigt.

Schritte zur Skripterstellung


1.Stellen Sie die Verbindung zum WMI-Dienst her.
2.Rufen Sie alle Instanzen der Klasse Win32_NetworkAdapterConfiguration mit der Methode
ExecQuery und einer Abfragezeichenfolge ab, die die Netzwerkadapter filtert, deren Eigenschaft
IPEnabled den Wert True ergibt.
Die zurückgegebene Auflistung besteht aus den Netzwerkadapterkonfigurationen auf dem Computer,
für die IP aktiviert ist.

Seite 21 von 169


3.Verwenden Sie für jede Konfiguration eines Netzwerkadapters die WSH-Methode Echo, um den
Index des Netzwerkadapters anzuzeigen.
4.Wenn die Eigenschaft IPAddress (ein Array) ungleich Null ist, verwenden Sie eine For Each-
Schleife, um eine Iteration durch das Array IPAddress durchzuführen, wobei jedes Element mithilfe
der WSH-Methode Echo angezeigt wird.

Listing 6 Onesetting-array-foreach.vbs
1 Set objWMIService = GetObject("winmgmts:")
2 Set colNicConfig = objWMIService.ExecQuery("SELECT * FROM " & _
3 "Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
4 For Each objNicConfig In colNicConfig
5 WScript.Echo "Network Adapter: " & objNicConfig.Index
6 WScript.Echo " IP Address(es):"
7 If Not IsNull(objNicConfig.IPAddress) Then
8 For Each strIPAddress In objNicConfig.IPAddress
9 WScript.Echo " " & strIPAddress
10 Next
11 End If
12Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche
Ausgabe wie die folgende angezeigt:
C:\scripts>onesetting-array-foreach.vbs
Network Adapter: 1
IP Address(es):
0.0.0.0
Network Adapter: 10
IP Address(es):
192.168.1.2

Anzeigen eines Bereichs von Netzwerkeigenschaften


Bei der Bestandsaufnahme für Netzwerkclients kann es häufig wünschenswert sein, Daten zu einer
größeren Gruppe von TCP/IP-Einstellungen zu erfassen. Wenn Sie z. B. die im Dialogfeld Erweiterte
TCP/IP-Einstellungen sowie die durch Ipconfig.exe angezeigten Einstellungen erfassen möchten,
dann überschneiden sich einige Einstellungen, während andere nur durch eine dieser Optionen
angezeigt werden. Ein Skript kann all diese Einstellungen aus unterschiedlichen Quellen in einem
Paket zusammenfassen.
Für jeden Netzwerkadapter eines bestimmten Computers, für den IP aktiviert ist, verwenden Sie das
Skript Ipsettings.vbs, um die auf der Registerkarte IP-Einstellungen des Dialogfelds Erweiterte
TCP/IP-Einstellungen für eine Netzwerkverbindung sowie die von Ipconfig.exe (verwendet mit
einigen Parametern) angezeigten Daten abzurufen.
Die Konfiguration eines Netzwerkadapters kann mehrere IP-Adressen, Subnetze, Standardgateways
und Gatewaymetriken aufweisen.

Schritte zur Skripterstellung

Seite 22 von 169


1.Erstellen Sie eine Variable zur Angabe des Computernamens.
2.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace
root\cimv2, 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.Verwenden Sie für jede Konfiguration eines Netzwerkadapters in der Auflistung die WSH-Methode
Echo, um die Eigenschaften anzuzeigen, die den Einstellungen auf der Registerkarte IP-
Einstellungen entsprechen.
5.Für die Eigenschaften, die ein Array zurückgeben, verwenden Sie die VBScript-Funktion IsNull(),
um zu prüfen, ob das Array den Wert Null hat.

Wenn das Array nicht den Wert Null hat, verwenden Sie die VBScript-Funktion Join(), um die
Arrayelemente zu einer Zeichenfolge zu verknüpfen und diese dann anzuzeigen.

Wenn das Array den Wert Null hat, zeigen Sie eine leere Zeichenfolge an.

Listing 7 Ipsettings.vbs

Seite 23 von 169


1 On Error Resume Next
2
3 strComputer = "."
4 Set objWMIService = GetObject("winmgmts:" _
5 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
6 Set colNicConfigs = objWMIService.ExecQuery _
7 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
8
9 WScript.Echo VbCrLf & "IP Settings"
10
11 For Each objNicConfig In colNicConfigs
12
13 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index
14 WScript.Echo " " & objNicConfig.Description & VbCrLf
15 WScript.Echo " DHCP Enabled: " & _
16 objNicConfig.DHCPEnabled
17 If Not IsNull(objNicConfig.IPAddress) Then
18 strIPAddresses = Join(objNicConfig.IPAddress)
19 Else
20 strIPAddresses = ""
21 End If
22 WScript.Echo " IP Address(es): " & strIPAddresses
23 If Not IsNull(objNicConfig.IPSubnet) Then
24 strIPSubnet = Join(objNicConfig.IPSubnet)
25 Else
26 strIPSubnet = ""
27 End If
28 WScript.Echo " Subnet Mask(s): " & strIPSubnet
29 If Not IsNull(objNicConfig.DefaultIPGateway) Then
30 strDefaultIPGateway = Join(objNicConfig.DefaultIPGateway)
31 Else
32 strDefaultIPGateway = ""
33 End If
34 WScript.Echo " Default Gateways(s): " & strDefaultIPGateway
35 If Not IsNull(objNicConfig.GatewayCostMetric) Then
36 strGatewayCostMetric = Join(objNicConfig.GatewayCostMetric)
37 Else
38 strGatewayCostMetric = ""
39 End If
40 WScript.Echo " Gateway Metric(s): " & strGatewayCostMetric
41 WScript.Echo " Interface Metric: " & _
42 objNicConfig.IPConnectionMetric
43 WScript.Echo " Connection-specific DNS Suffix: " & _
44 objNicConfig.DNSDomain
45
46 Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche
Ausgabe wie die folgende angezeigt:
C:\scripts>ipsettings.vbs
IP Settings
Network Adapter 1
Intel(R) PRO/1000 MT Network Connection - Packet Scheduler Miniport
DHCP Enabled: True
IP Address(es): 0.0.0.0

Seite 24 von 169


Subnet Mask(s):
Default Gateways(s):
Gateway Metric(s):
Interface Metric: 1
Connection-specific DNS Suffix:
Network Adapter 10
3Com EtherLink 10/100 PCI For Complete PC Management NIC (3C905C-TX) - Packet Scheduler
Miniport
DHCP Enabled: False
IP Address(es): 192.168.1.2
Subnet Mask(s): 255.255.255.0
Default Gateways(s):
Gateway Metric(s):
Interface Metric: 20
Connection-specific DNS Suffix:

"Win32_NetworkAdapterConfiguration" und "Win32_NetworkAdapter"


Die Klasse Win32_NetworkAdapterConfiguration ist eng mit der Klasse Win32_NetworkAdapter
verbunden. Es besteht eine 1:1-Entsprechung zwischen Instanzen beider Klassen und eine implizierte
Arbeitsaufteilung zwischen den beiden Klassen: Win32_NetworkAdapter legt hauptsächlich
hardwarebezogene Eigenschaften offen und enthält im Gegensatz zu
Win32_NetworkAdapterConfiguration keine Methoden. Es gibt einige Überschneidungspunkte
zwischen den beiden Klassen. Beide besitzen z. B. die Eigenschaft MACAddress, die die
physikalische Adresse eines Netzwerkadapters abruft.
Abbildung 4 veranschaulicht die Beziehung zwischen den Klassen
Win32_NetworkAdapterConfiguration und Win32_NetworkAdapter.
Nur Win32_NetworkAdapter verfügt über die Eigenschaft NetConnectionID (nur unter Windows
XP und Windows Server 2003 verfügbar), die den Namen der Netzwerkverbindung zurückgibt (der
Name, der auch unter Netzwerkverbindungen angezeigt wird), die mit dem Netzwerkadapter
verbunden ist, obwohl diese Einstellung logisch gesehen eher zu
Win32_NetworkAdapterConfiguration gehören sollte. Die Eigenschaft NetConnectionID entspricht
dem Namen, den Ipconfig.exe für die einzelnen Netzwerkadapter verwendet.
Außerdem enthält nur Win32_NetworkAdapter die Eigenschaft AdapterType, die das
Netzwerkmedium beschreibt, mit dem der Adapter die Verbindung herstellt, z. B. Ethernet 802.3 oder
Token Ring 802.5. Ipconfig.exe verwendet diese Daten auch, um den Netzwerkadapter zu
beschreiben.

Seite 25 von 169


Abbildung 4 Beziehung zwischen diesen WMI-Klassen
Bild maximieren
Die folgenden Beispiele zeigen, wie die Eigenschaften von Win32_NetworkAdapter angezeigt
werden sowie die Methoden für korrelierende Eigenschaften von Instanzen von
Win32_NetworkAdapter und Win32_NetworkAdapterConfiguration.

Anzeigen Netzwerkadaptereigenschaften
Das Anzeigen der Einstellungen von Netzwerkadaptern erfordert ähnliche Verfahren zur
Skripterstellung, wie die zum Anzeigen der TCP/IP-Einstellungen. Der einzige Unterschied ist, dass
Sie die Klasse Win32_NetworkAdapterConfiguration zum Anzeigen der TCP/IP-Einstellungen
verwenden, während die Eigenschaften der Netzwerkadapter mithilfe der Klasse
Win32_NetworkAdapter angezeigt werden. Weitere Informationen zu den Eigenschaften und
Methoden dieser WMI-Klasse finden Sie im WMI Software Development Kit (SDK) unter
http://go.microsoft.com/fwlink/?LinkId=29992 (nur auf Englisch verfügbar).

Schritte zur Skripterstellung


Listing 8 ruft die Eigenschaften für alle Netzwerkadapter eines Computers ab. In diesem Skript werden
einige Eigenschaften abgerufen, die nur unter Windows XP und Windows Server 2003 verfügbar sind.
1.Erstellen Sie eine Variable zur Angabe des Computernamens. Verwenden Sie z. B. ("."), um den
lokalen Computer anzugeben.
2.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace
root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.
3.Verwenden Sie die Methode ExecQuery zum Abfragen der Klasse Win32_NetworkAdapter.
Die zurückgegebene Auflistung besteht aus allen Netzwerkadaptern auf dem Computer.
4.Verwenden Sie für jeden Netzwerkadapter in der Auflistung die WSH-Methode Echo, um seine
Eigenschaften anzuzeigen.
5.Für die Eigenschaften, die ein Array zurückgeben, verwenden Sie die VBScript-Funktion IsNull(),
um zu prüfen, ob das Array den Wert Null hat.

Wenn das Array nicht den Wert Null hat, verwenden Sie die VBScript-Funktion Join(), um die
Arrayelemente zu einer Zeichenfolge zu verknüpfen und diese dann anzuzeigen.

Wenn das Array den Wert Null hat, zeigen Sie eine leere Zeichenfolge an.

Listing 8 Nicsettings.vbs
Seite 26 von 169
1 On Error Resume Next
2
3 strComputer = "."
4 Set objWMIService = GetObject("winmgmts:" _
5 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
6 Set colNics = objWMIService.ExecQuery _
7 ("SELECT * FROM Win32_NetworkAdapter")
8
9 WScript.Echo VbCrLf & "Network Adapter Settings"
10
11 For Each objNic In colNics
12
13 WScript.Echo VbCrLf & " Network Adapter (Device ID)" & _
14 objNic.DeviceID
15 Wscript.Echo " Index: " & objNic.Index
16 Wscript.Echo " MAC Address: " & objNic.MACAddress
17 Wscript.Echo " Adapter Type: " & objNic.AdapterType
18 Wscript.Echo " Adapter Type Id: " & objNic.AdapterTypeID
19 Wscript.Echo " Description: " & objNic.Description
20 Wscript.Echo " Manufacturer: " & objNic.Manufacturer
21 Wscript.Echo " Name: " & objNic.Name
22 Wscript.Echo " Product Name: " & objNic.ProductName
23 Wscript.Echo " Net Connection ID: " & objNic.NetConnectionID
24 Wscript.Echo " Net Connection Status: " & objNic.NetConnectionStatus
25 Wscript.Echo " PNP Device ID: " & objNic.PNPDeviceID
26 Wscript.Echo " Service Name: " & objNic.ServiceName
27 If Not IsNull(objNic.NetworkAddresses) Then
28 strNetworkAddresses = Join(objNic.NetworkAddresses)
29 Else
30 strNetworkAddresses = ""
31 End If
32 Wscript.Echo " NetworkAddresses: " & strNetworkAddresses
33 Wscript.Echo " Permanent Address: " & objNic.PermanentAddress
34 Wscript.Echo " AutoSense: " & objNic.AutoSense
35 Wscript.Echo " Maximum Number Controlled: " & objNic.MaxNumberControlled
36 Wscript.Echo " Speed: " & objNic.Speed
37 Wscript.Echo " Maximum Speed: " & objNic.MaxSpeed
38
39 Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche
Ausgabe wie die folgende angezeigt:
C:\scripts>nicsettings.vbs
Network Adapter Settings
Network Adapter (Device ID)1
Index: 1
MAC Address: 00:0D:56:15:ED:B7
Adapter Type: Ethernet 802.3
Adapter Type Id: 0
Description: Intel(R) PRO/1000 MT Network Connection
Manufacturer: Intel
Name: Intel(R) PRO/1000 MT Network Connection
Seite 27 von 169
Product Name: Intel(R) PRO/1000 MT Network Connection
Net Connection ID: Local Area Connection
Net Connection Status: 7
PNP Device ID:
PCI\VEN_8086&DEV_100E&SUBSYS_01511028&REV_02\4&1C660DD6&0&60F0
Service Name: E1000
NetworkAddresses:
Permanent Address:
AutoSense:
Maximum Number Controlled: 0
Speed:
Maximum Speed:
Network Adapter (Device ID)2
Index: 2
MAC Address:
Adapter Type:
Adapter Type Id:
Description: RAS Async Adapter
Manufacturer:
Name: RAS Async Adapter
Product Name: RAS Async Adapter
Net Connection ID:
Net Connection Status:
PNP Device ID:
Service Name:
NetworkAddresses:
Permanent Address:
AutoSense:
Maximum Number Controlled: 0
Speed:

Seite 28 von 169


Maximum Speed:
Network Adapter (Device ID)3
Index: 3
MAC Address:
Adapter Type:
Adapter Type Id:
Description: WAN Miniport (L2TP)
Manufacturer: Microsoft
Name: WAN Miniport (L2TP)
Product Name: WAN Miniport (L2TP)
Net Connection ID:
Net Connection Status:
PNP Device ID: ROOT\MS_L2TPMINIPORT\0000
Service Name: Rasl2tp
NetworkAddresses:
Permanent Address:
AutoSense:
Maximum Number Controlled: 0
Speed:
Maximum Speed:
Network Adapter (Device ID)6
Index: 6
MAC Address:
Adapter Type:
Adapter Type Id:
Description: Direct Parallel
Manufacturer: Microsoft
Name: Direct Parallel
Product Name: Direct Parallel
Net Connection ID:

Seite 29 von 169


Net Connection Status:
PNP Device ID: ROOT\MS_PTIMINIPORT\0000
Service Name: Raspti
NetworkAddresses:
Permanent Address:
AutoSense:
Maximum Number Controlled: 0
Speed:
Maximum Speed:
Network Adapter (Device ID)8
Index: 8
MAC Address: 00:0D:56:15:ED:B7
Adapter Type: Ethernet 802.3
Adapter Type Id: 0
Description: Packet Scheduler Miniport
Manufacturer: Microsoft
Name: Packet Scheduler Miniport
Product Name: Packet Scheduler Miniport
Net Connection ID:
Net Connection Status:
PNP Device ID: ROOT\MS_PSCHEDMP\0000
Service Name: PSched
NetworkAddresses:
Permanent Address:
AutoSense:
Maximum Number Controlled: 0
Speed:
Maximum Speed:
Network Adapter (Device ID)10
Index: 10

Seite 30 von 169


MAC Address: 00:0A:5E:3D:E3:70
Adapter Type: Ethernet 802.3
Adapter Type Id: 0
Description: 3Com EtherLink 10/100 PCI For Complete PC Management NIC (3C905C-TX)
Manufacturer: 3Com
Name: 3Com EtherLink 10/100 PCI For Complete PC Management NIC (3C905C-TX)
Product Name: 3Com EtherLink 10/100 PCI For Complete PC Management NIC (3C905C-TX)
Net Connection ID: Local Area Connection 2
Net Connection Status: 2
PNP Device ID:
PCI\VEN_10B7&DEV_9200&SUBSYS_100010B7&REV_78\4&1C660DD6&0&40F0
Service Name: EL90Xbc
NetworkAddresses:
Permanent Address:
AutoSense:
Maximum Number Controlled: 0
Speed:
Maximum Speed:

Zuordnen des Netzwerkverbindungsnamen zu MAC- und IP-Adressen mithilfe


zweier Klassen
Es gibt verschiedene Zwecke, zu denen Administratoren die MAC-Adressen (auch als physikalische
Adressen bezeichnet) sowie die IP-Adressen von Computern abrufen müssen, um sie auf den Namen
der unter Netzwerkverbindungen aufgeführten Adapter zu beziehen. Ipconfig.exe verwendet die
Namen der Netzwerkadapter um zwischen den einzelnen Netzwerkadaptern zu unterscheiden, wie in
Abbildung 5 gezeigt.
Das Zuordnen von MAC- und IP-Adressen entspricht dem Teil des IP-Routingprozesses, der vom ARP
(Address Resolution Protocol) durchgeführt wird. Sie können die sich ergebenden Zuordnungstabellen
von IP-Adressen zu MAC-Adressen mithilfe des Befehlszeilentools Arp.exe anzeigen. Abbildung 5
bietet ein Beispiel der Ausgabe, die durch Ausführen des Befehls arp -a erzeugt wird.

Abbildung 5 Ausgabe von "Arp.exe"

Seite 31 von 169


Bild maximieren
Sie müssen Eigenschaften entsprechender Instanzen von Win32_NetworkAdapterConfiguration
(MACAddress und IPAddress) und Win32_NetworkAdapter (NetConnectionID und
AdapterType) abrufen, um WMI zum Verbinden von MAC- und IP-Adressen mit
Netzwerkadapternamen und -typen zu verwenden. Die Eigenschaft NetConnectionID von
Win32_NetworkAdapter ist nur unter Windows XP und Windows Server 2003 verfügbar.
Damit Sie die spezifischen Instanzen der einzelnen Klassen finden, die einander entsprechen, können
Sie den Schlüsselkennzeichner verwenden, um Schlüsseleigenschaften der einzelnen Klasse zu
ermitteln. Schlüsseleigenschaften (es können mehrere vorhanden sein) bieten zusammengenommen
einen eindeutigen Verweis für die einzelnen Klasseninstanzen und sind Teil des Namespace-Handles
einer Instanz. Sie entsprechen ein wenig dem Schlüsselfeld in einer Datenbank. Das WMI SDK oder
Wbemtest.exe (das WMI-Testtool, das in allen Versionen von Windows enthalten ist, die WMI
einbeziehen) können Ihnen mitteilen, welche Eigenschaft(en) einer Klasse als Schlüssel gelten.
In Tabelle 2 werden die Schlüsseleigenschaften für die beiden WMI-Netzwerkadapterklassen
angezeigt.

Tabelle 2 Schlüsseleigenschaften für WMI-Netzwerkadapterklassen


Klasse Schlüsseleigenschaft
Win32_NetworkAdapterConfigurationIndex
Win32_NetworkAdapter DeviceID
Durch Verwenden einer dieser Schlüssel können Sie Instanzen beider Klassen vergleichen. Im
folgenden Beispiel wird die Eigenschaft Get von SWbemServices verwendet, um die Instanz von
Win32_NetworkAdapter abzurufen, dessen Eigenschaft DeviceID der Eigenschaft Index einer
bestimmten Instanz von Win32_NetworkAdapterConfiguration entspricht.
Getncmacip.vbs zeigt den Netzwerkverbindungsnamen (oder die Indexnummer für Clients, die ältere
Versionen des Betriebssystems als Windows XP verwenden), die MAC-Adresse, IP-Adressen und
Subnetzmasken für IP-aktivierte Netzwerkschnittstellen an. Die Konfiguration eines Netzwerkadapters
kann mehrere IP-Adressen und Subnetze aufweisen. Das Skript erhält Eigenschaften von
entsprechenden Instanzen von Win32_NetworkAdapter und
Win32_NetworkAdapterConfiguration, indem die direkte Korrelation zwischen
Win32_NetworkAdapter.DeviceID und Win32_NetworkAdapterConfiguration.Index verwendet
wird.
Das Skript zeigt eine einfachere Methode als die Funktion GetNetConnectionID() in Ipsettings.vbs
um zu ermitteln, ob die Eigenschaft NetConnectionID verfügbar ist. Anstatt die
Betriebssysstemversion zu prüfen, um zu ermitteln, ob es sich um Windows XP handelt (wodurch
sichergestellt ist, dass Win32_NetworkAdapter.NetConnectionID verfügbar ist), wird einfach
versucht, die Eigenschaft NetConnectionID abzurufen. Wenn ein Fehler zurückgegeben wird,
verwendet das Skript stattdessen die Eigenschaft Win32_NetworkAdapterConfiguration.Index.

Schritte zur Skripterstellung


Listing 9 ruft die IP-Adressen und Subnetzmasken für jeden Netzwerkadapter eines einzelnen
Computers ab.
1.Erstellen Sie eine Variable zur Angabe des Computernamens.
2.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace

Seite 32 von 169


root\cimv2, 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 den IP aktiviert ist.
4.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben aus.
5.Verwenden Sie die Methode Get des Objekts objWMIService, um die Instanz von
Win32_NetworkAdapter zu ermitteln, dessen Eigenschaft DeviceID der Eigenschaft Index von
Win32_NetworkAdapterConfiguration entspricht.
6.Zeigen Sie die Eigenschaften AdapterType und NetConnectionID der aktuellen Instanz von
Win32_NetworkAdapter an.
Wenn ein Fehler auftritt, ist die Eigenschaft NetConnectionID nicht vorhanden (diese Eigenschaft ist
neu in Windows XP und Windows Server 2003). Wechseln Sie also zur Anzeige der Eigenschaft
Index von Win32_NetworkAdapterConfiguration, um den aktuellen Netzwerkadapter zu
identifizieren.
7.Zeigen Sie die Eigenschaft Description von Win32_NetworkAdapterConfiguration und die
Eigenschaft MACAddress von Win32_NetworkAdapter an.
8.Zeigen Sie die Eigenschaften IPAddress und IPSubnet von
Win32_NetworkAdapterConfiguration an.

Listing 9 Getncmacip.vbs

Seite 33 von 169


1 On Error Resume Next
2
3 strComputer = "."
4 Set objWMIService = GetObject("winmgmts:" _
5 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
6 Set colNicConfigs = objWMIService.ExecQuery _
7 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
8
9 WScript.Echo VbCrLf & "MAC & IP Addresses & Subnet Masks"
10
11 For Each objNicConfig In colNicConfigs
12
13 Set objNic = objWMIService.Get _
14 ("Win32_NetworkAdapter.DeviceID=" & objNicConfig.Index)
15
16 WScript.Echo VbCrLf & " " & objNic.AdapterType & " " & _
17 objNic.NetConnectionID
18 If Err Then
19 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index
20 End If
21
22 WScript.Echo " " & objNicConfig.Description & VbCrLf
23 WScript.Echo " MAC Address:" & VbCrLf & _
24 " " & objNic.MACAddress
25 WScript.Echo " IP Address(es):"
26 For Each strIPAddress In objNicConfig.IPAddress
27 WScript.Echo " " & strIPAddress
28 Next
29 WScript.Echo " Subnet Mask(s):"
30 For Each strIPSubnet In objNicConfig.IPSubnet
31 WScript.Echo " " & strIPSubnet
32 Next
33
34 Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche
Ausgabe wie die folgende angezeigt:
C:\scripts>getncmacip.vbs
MAC & IP Addresses & Subnet Masks
Ethernet 802.3 Local Area Connection
Intel(R) PRO/1000 MT Network Connection - Packet Scheduler Miniport
MAC Address:
00:0D:56:15:ED:B7
IP Address(es):
0.0.0.0
Subnet Mask(s):
Ethernet 802.3 Local Area Connection 2
3Com EtherLink 10/100 PCI For Complete PC Management NIC (3C905C-TX) - Packet Scheduler
Miniport

Seite 34 von 169


MAC Address:
00:0A:5E:3D:E3:70
IP Address(es):
192.168.1.2
Subnet Mask(s):
255.255.255.0

Verwenden von Verknüpfungsklassen zum Abrufen von korrelierenden Daten


Eine weitere Möglichkeit zum Abrufen von Daten verwandter Instanzen von
Win32_NetworkAdapterConfiguration und Win32_NetworkAdapter ist die Verwendung der
Verknüpfungsklasse, Win32_NetworkAdapterSetting. In diesem Fall handelt es sich bei den zu
korrelierenden Eigenschaften um NetConnectionID und MACAddress von Win32_NetworkAdapter
und die Eigenschaften IPAddress und IPSubnet von Win32_NetworkAdapterConfiguration.
Abbildung 6 veranschaulicht, wie die Verknüpfungsklasse Win32_NetworkAdapterSetting dazu
verwendet wird, um Daten von verwandten Instanzen dieser beiden Klassen abzurufen. In diesem
Beispiel wird eine ASSOCIATORS OF-Abfrage mit der Methode ExecQuery von SWbemServices
verwendet, um Eigenschaften der beiden Klassen zu verknüpfen. ASSOCIATORS OF ist ein
Schlüsselwort von WQL (WMI Query Language).

Abbildung 6 Korrelieren von Daten mithilfe von "Win32_NetworkAdapterSetting"


Bild maximieren

Zuordnen des Netzwerkverbindungsnamen zu IP-Adressen mithilfe einer


Verknüpfungsklasse
Getncmacip-assoc.vbs zeigt den Netzwerkverbindungsnamen (oder die Indexnummer für Clients, die
ältere Versionen des Betriebssystems als Windows XP verwenden), die MAC-Adresse, IP-Adressen
und Subnetzmasken für IP-aktivierte Netzwerkschnittstellen an. Es verwendet die Verknüpfungsklasse
Win32_NetworkAdapterSetting, um Eigenschaften von Win32_NetworkAdapterConfiguration
und Win32_NetworkAdapter zu korrelieren. Die Konfiguration eines Netzwerkadapters kann mehrere
IP-Adressen und Subnetze aufweisen.

Schritte zur Skripterstellung

Seite 35 von 169


Listing 10 ruft die Eigenschaften des TCP/IP-Netzwerkclients eines einzelnen Computers ab.
1.Erstellen Sie eine Variable zur Angabe des Computernamens.
2.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace
root\cimv2, 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 den IP aktiviert ist.
4.Verwenden Sie für jede Netzwerkadapterkonfiguration in der Auflistung die Methode ExecQuery,
um die Klasse Win32_NetworkAdapterConfiguration mit einer ASSOCIATORS OF-Abfrage
abzufragen. Die Abfrage gibt eine Auflistung der Instanzen von Win32_NetworkAdapter zurück.
Eine ASSOCIATORS OF-Abfrage verwendet die Verknüpfungsklasse
Win32_NetworkAdapterSetting, um die Instanzen von Win32_NetworkAdapterConfiguration
(durch die Eigenschaft Index gekennzeichnet) mit den entsprechenden Instanzen der
Verknüpfungsklasse Win32_NetworkAdapter zu korrelieren.
5.Führen Sie eine Iteration durch die Auflistung der Instanzen von Win32_NetworkAdapter durch,
die die Eigenschaften AdapterType, NetConnectionID und MACAddress anzeigt.
Wenn ein Fehler beim Anzeigen der Eigenschaft NetConnectionID auftritt, zeigen Sie stattdessen
den Index der entsprechenden Instanz von Win32_NetworkAdapterConfiguration an.
6.Zeigen Sie die Eigenschaften IPAddress und IPSubnet für die Instanz von
Win32_NetworkAdapterConfiguration an, die mit der aktuellen Instanz von
Win32_NetworkAdapter verknüpft ist.

Listing 10 Getncmacip-assoc.vbs

Seite 36 von 169


1 On Error Resume Next
2
3 strComputer = "."
4 Set objWMIService = GetObject("winmgmts:" _
5 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
6 Set colNicConfigs = objWMIService.ExecQuery _
7 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
8
9 WScript.Echo VbCrLf & "MAC & IP Addresses & Subnet Masks"
10
11 For Each objNicConfig In colNicConfigs
12
13 Set colNics = objWMIService.ExecQuery _
14 ("ASSOCIATORS OF " & "{Win32_NetworkAdapterConfiguration.Index='" & _
15 objNicConfig.Index & "'}" & _
16 " WHERE AssocClass=Win32_NetworkAdapterSetting")
17
18 For Each objNic in colNics
19
20 WScript.Echo VbCrLf & " " & objNic.AdapterType & " " & _
21 objNic.NetConnectionID
22 If Err Then
23 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index
24 End If
25
26 WScript.Echo " " & objNicConfig.Description & VbCrLf
27 WScript.Echo " MAC Address:" & VbCrLf & _
28 " " & objNic.MACAddress
29 WScript.Echo " IP Address(es):"
30 For Each strIPAddress In objNicConfig.IPAddress
31 WScript.Echo " " & strIPAddress
32 Next
33 WScript.Echo " Subnet Mask(s):"
34 For Each strIPSubnet In objNicConfig.IPSubnet
35 WScript.Echo " " & strIPSubnet
36 Next
37
38 Next
39
40 Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche
Ausgabe wie die folgende angezeigt:
C:\scripts>getncmacip-assoc.vbs
MAC & IP Addresses & Subnet Masks
Ethernet 802.3 Local Area Connection
Intel(R) PRO/1000 MT Network Connection - Packet Scheduler Miniport
MAC Address:
00:0D:56:15:ED:B7
IP Address(es):
0.0.0.0
Subnet Mask(s):

Seite 37 von 169


Ethernet 802.3 Local Area Connection 2
3Com EtherLink 10/100 PCI For Complete PC Management NIC (3C905C-TX) - Packet Scheduler
Miniport
MAC Address:
00:0A:5E:3D:E3:70
IP Address(es):
192.168.1.2
Subnet Mask(s):
255.255.255.0

Anzeigen von für den Netzwerkverbindungsnamen gefilterten Einstellungen


Nachdem Ihnen jetzt bekannt ist, wie Sie mit einem einzelnen Skript verwandte Eigenschaften von
Win32_NetworkAdapterConfiguration und Win32_NetworkAdapter abrufen, wird hier eine
weitere Möglichkeit vorgestellt, wie Sie diese Funktion verwenden können. Wenn nur die Daten eines
Netzwerkadapters erforderlich sind, können Sie über Netzwerkverbindungen eine Verbindung über
seinen Namen herstellen – eine leichter zu merkende Kennung als die Indexnummer – und eine
Einstellung von diesem Netzwerkadapter abrufen. Sie können dies über die Verwendung der
Eigenschaft NetConnectionID von Win32_NetworkAdapter erreichen.
Die Eigenschaft NetConnectionID ist nur unter Windows XP und Windows Server 2003 verfügbar.
Wenn die Eigenschaft nicht gefunden wird, erzeugt das Skript einen Laufzeitfehler, der durch Prüfen
des VBScript-Objekts Err behandelt wird. Wenn die Eigenschaft Number des Err-Objekts einen
anderen Wert als "0" hat, ist ein Fehler aufgetreten. In dem Fall zeigt das Skript eine Fehlermeldung an
und wird abgebrochen.

Schritte zur Skripterstellung


Listing 11 ruft die Eigenschaften des TCP/IP-Netzwerkclients eines einzelnen Computers ab.
1.Erstellen Sie eine Variable zur Angabe des Computernamens.
2.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace
root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.
3.Verwenden Sie die Methode ExecQuery zum Abfragen der Klasse Win32_NetworkAdapter, wobei
die WQL-Abfrage mit einer WHERE-Klausel nach einer bestimmten NetConnectionID gefiltert
wird.
Die zurückgegebene Auflistung besteht aus einer Instanz, die den Netzwerkadapter mit dieser
bestimmten NetConnectionID darstellt.
4.Überprüfen Sie, ob die NetConnectionID gefunden wurde. Ist dies der Fall, fahren Sie mit den
Aufgaben im Skript fort.
5.Für jeden Netzwerkadapter in der Auflistung führen Sie mithilfe einer ASSOCIATORS OF-Abfrage
eine Korrelation jeder Netzwerkadapterkonfiguration mit einem Netzwerkadapter durch. Dazu
müssen Sie die Eigenschaft DeviceID von Win32_NetworkAdapter verwenden, die die

Seite 38 von 169


Schlüsseleigenschaft für diese Klasse darstellt (Zeilen 12–15).
6.Zeigen Sie für jeden Netzwerkadapter und die zugehörige Konfiguration den Adaptertyp und die IP-
Adressen an.
7.Wenn die bestimmte NetConnectionID nicht gefunden wurde, zeigen Sie eine Meldung an.

Listing 11 Getncip.vbs
1 On Error Resume Next
2
3 strComputer = "."
4
5 strNetConn = "Local Area Connection"
6 Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
7 Set colNics = objWMIService.ExecQuery("SELECT * FROM " & _
8 "Win32_NetworkAdapter WHERE NetConnectionID = '" & strNetConn & "'")
9
10 If colNics.Count > 0 Then
11 For Each objNic in colNics
12 Set colNicConfigs = objWMIService.ExecQuery ("ASSOCIATORS OF " & _
13 "{Win32_NetworkAdapter.DeviceID='" & objNic.DeviceID & "'}" & _
14 " WHERE AssocClass=Win32_NetworkAdapterSetting")
15 For Each objNicConfig In colNicConfigs
16 WScript.Echo VbCrLf & " " & objNic.AdapterType & " " & _
17 objNic.NetConnectionID
18 If Not IsNull(objNicConfig.IPAddress) Then
19 For Each strIPAddress in objNicConfig.IPAddress
20 Wscript.Echo " IP Address: " & strIPAddress
21 Next
22 End If
23 Next
24 Next
25Else
26 WScript.Echo "Unable to find NetconnectID named '" & strNetConn & "'." & _
27 VbCrLf & "If Windows 2000 or earlier, NetConnectionID property unavailable."
28End If
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche
Ausgabe wie die folgende angezeigt:
C:\scripts>getncip.vbs
Ethernet 802.3 Local Area Connection
IP Address: 192.168.0.213

Anzeigen erweiterter IP-Konfigurationsdaten


In Windows XP können Sie detailliertere TCP/IP-Clienteinstellung für eine bestimmte
Netzwerkverbindung bequem über das Dialogfeld Netzwerkverbindungsdetails abrufen.

So rufen Sie ausführliche TCP/IP-Einstellungen für eine bestimmte Netzwerkverbindung ab


1.Öffnen Sie die Systemsteuerung, und doppelklicken Sie auf Netzwerkverbindungen.
2.Klicken Sie im Dialogfeld Netzwerkverbindungen mit der rechten Maustaste auf eine bestimmte
Netzwerkverbindung, und klicken Sie anschließend auf Status.

Seite 39 von 169


3.Klicken Sie auf der Registerkarte Netzwerkunterstützung auf Details, um die Einstellungen der
Netzwerkverbindung anzuzeigen.
Abbildung 7 zeigt ein Beispiel für das Dialogfeld Netzwerkverbindungsdetails.

Abbildung 7 Dialogfeld "Netzwerkverbindungsdetails"


Bild maximieren

Verwenden von "Ipconfig.exe" zum Anzeigen erweiterter Konfigurationsdaten


Sie können die Option /all mit dem Befehlszeilentool Ipconfig.exe verwenden, um eine ausführlichere
Auflistung der Einstellungen abzurufen, als im Dialogfeld Netzwerkverbindungsdetails enthalten.
Abbildung 8 zeigt eine Bildschirmausgabe, wie sie durch den Befehl ipconfig /all erzeugt wird.

Abbildung 8 Verwenden von "Ipconfig.exe /all" zum Anzeigen von Netzwerkdaten


Bild maximieren

Verwenden eines Skripts zum Anzeigen erweiterter Konfigurationsdaten


WMI bietet die Funktionalität, um fast alle Funktionen des Befehls ipconfig /all zusammen mit vielen
anderen Einstellungen zu reproduzieren. Neben Win32_NetworkAdapterConfiguration verwendet

Seite 40 von 169


Ipconfig.vbs auch StdRegProv, eine im WMI-Provider der Systemregistrierung enthaltene Klasse, um
einige Einstellungen aus der Registrierung zu extrahieren.
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.

Schritte zur Skripterstellung


Listing 12 ruft einen umfangreichen Satz mit Einstellungen von TCP/IP-Netzwerkclients ab, der dem
durch Ipconfig.exe /all von einem einzelnen Computer abgerufenen Satz entspricht. Das Skript
verwendet zwei Funktionen: Eine konvertiert die zurückgegebenen Daten in ein lesbareres Format und
die andere Funktion gibt die Version des Betriebssystems zurück.
Das Skript muss dazu folgende Aufgaben durchführen:
1.Aufrufen von "On Error Resume Next", damit das Skript nicht durch auftretende Fehler
abgebrochen wird.
2.Zuordnen von Werten zu Konstanten und Variablen, die verwendet werden sollen.
3.Verwenden eines Aufrufs von GetObject, um im WMI-Namespace root\default eine Verbindung
zur Klasse StdRegProv herzustellen.
4.Abrufen globaler Einstellungen aus der Registrierung mithilfe der Methoden GetStringValue und
GetDWORDValue von StdRegProv. Diese Einstellungen gelten für alle Netzwerkadapter.
Diese Methoden geben einen Wert über einen Ausgabeparameter zurück (hierbei handelt es sich um
den jeweils letzten beim Aufruf der Methode angegebenen Parameter).
5.Verwenden einer Select Case-Anweisung, um den vom Ausgabeparameter dwNodeType
zurückgegebenen Wert zu decodieren.
6.Verwenden einer If ... ElseIf ... Else-Anweisung, um den vom Ausgabeparameter dwlPRouting
zurückgegebenen Wert zu decodieren.
7.Verwenden eines Aufrufs von GetObject, um die Verbindung zum WMI-Namespace root\cimv2
herzustellen.
8.Verwenden der Methode ExecQuery 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 den IP aktiviert ist.
9.Abrufen des Werts von DNSEnabledForWINSResolution, wobei es sich um eine globale
Einstellung handelt, die für jeden Netzwerkadapter gleich ist. Verwenden einer If ... ElseIf ... Else-
Anweisung, um den von DNSEnabledForWINSResolution zurückgegebenen booleschen Wert zu
decodieren.
10.Anzeigen der abgerufenen globalen Einstellungen.
11.Erneutes Verwenden der Methode ExecQuery zum Abfragen der Klasse
Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled =

Seite 41 von 169


True" gefiltert wird.
12.Aufrufen der Funktion GetOSVer, die die Eigenschaft Version von Win32_OperatingSystem
abruft. Zuordnen des zurückgegebenen Werts zu einer Variablen.
13.Durchführen einer Iteration durch jede von der Abfrage zurückgegebene
Netzwerkadapterkonfiguration in der Auflistung.
14.Abrufen der Eigenschaft Index für die Instanz und verwenden der Methode Get, um die Instanz von
Win32_NetworkAdapter zurückzugeben, dessen Eigenschaft DeviceID dem Wert der Eigenschaft
Index entspricht.
15.Abrufen der adapterabhängigen Eigenschaften von Win32_NetworkAdapter und
Win32_NetworkAdapterConfiguration, die durch Ipconfig.exe /all angezeigt werden.
16.Wenn die Eigenschaft AdapterType nicht verfügbar ist, "Netzwerk" als Adaptertyp anzeigen.
17.Wenn für die Betriebssystemversion Folgendes gilt:

Eine höhere Version als 5, die auf Windows XP oder Windows Server 2003 hinweist, dann die
Eigenschaft NetConnectionID von Win32_NetworkAdapter abrufen.

Version 5 oder niedriger, dann die Eigenschaft Index von
Win32_NetworkAdapterConfiguration als Kennung des Netzwerkadapters verwenden.
18.Abrufen und Anzeigen anderer Eigenschaften der beiden Klassen.
19.Wenn die Eigenschaft ein Array zurückgibt, überprüfen, dass der Wert ungleich Null ist. Wenn der
Rückgabewert ungleich Null ist, jedes durch Leerzeichen getrennte Arrayelement einer
Zeichenfolge zuweisen und diese anzeigen.
20.Wenn die Eigenschaft einen Wert im Format WMI DATETIME zurückgibt, die Funktion
WMIDateStringToDate aufrufen und den DATETIME-Wert übergeben.
Diese Funktion konvertiert den Wert in eine lesbarere Zeichenfolge, die das Datum und die Uhrzeit
darstellt.

Listing 12 Ipconfig.vbs

Seite 42 von 169


1 On Error Resume Next
2
3
4 Const HKEY_LOCAL_MACHINE = &H80000002
5 strComputer = "."
6 strKeyPath1 = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters"
7 strKeyPath2 = "SYSTEM\CurrentControlSet\Services\NetBT\Parameters"
8 strHostEntry = "Hostname"
9 strDomainEntry = "Domain"
10 strNodeEntry = "DhcpNodeType"
11 strRoutingEntry = "IPEnableRouter"
12
13 Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
14 strComputer & "\root\default:StdRegProv")
15 objReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath1,strHostEntry,strHostname
16 objReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath1,strDomainEntry,strDomain
17 objReg.GetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath2,strNodeEntry,dwNodeType
18 objReg.GetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath1,strRoutingEntry,dwIPRouting
19
20 Select Case dwNodeType
21 Case 4 strNodeType = "Mixed"
22 Case 8 strNodeType = "Hybrid"
23 Case Else strNodeType = dwNodeType
24 End Select
25 If dwIPRouting = 0 Then
26 strIPRouting = "No"
27 ElseIf dwIPRouting = 1 Then
28 strIPRouting = "Yes"
29 Else
30 strIPRouting = "?"
31 End If
32
33 strComputer = "."
34 Set objWMIService = GetObject("winmgmts:" _
35 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
36
37 Set colFirstNicConfig = objWMIService.ExecQuery _
38 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
39 For Each objFirstNicConfig In colFirstNicConfig
40 strDnsWins = objFirstNicConfig.DNSEnabledForWINSResolution
41 Next
42 If strDnsWins = False Then
43 strWinsProxy = "No"
44 ElseIf strDnsWins = True Then
45 strWinsProxy = "Yes"
46 Else
47 strWinsProxy = "?"
48 End If
49
50 ' Display global settings.
51
52 WScript.Echo VbCrLf & "Windows IP Configuration" & VbCrLf
53 WScript.Echo " Host Name . . . . . . . . . . . . : " & strHostname
54 WScript.Echo " Primary DNS Suffix . . . . . . . : " & strDomain
55 WScript.Echo " Node Type . . . . . . . . . . . . : " & strNodeType
56 WScript.Echo " IP Routing Enabled. . . . . . . . : " & strIPRouting
57 WScript.Echo " WINS Proxy Enabled. . . . . . . . : " & strWinsProxy
58 WScript.Echo " DNS Suffix Search List. . . . . . : " & strDomain
59
60 Set colNicConfigs = objWMIService.ExecQuery _
61 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
62 sngOsVer = GetOsVer
63
64 ' Display per-adapter settings.
65 Seite 43 von 169
66 For Each objNicConfig In colNicConfigs
67 intIndex = objNicConfig.Index
68 Set objNic = objWMIService.Get("Win32_NetworkAdapter.DeviceID=" & intIndex)
Teil 3: Skripterstellung für die Verwaltung von Remotenetzwerken
Veröffentlicht: 19. Jul 2004
In diesem Abschnitt wird veranschaulicht, wie Skripts zum Durchführen von Aufgaben auf
Remotecomputern geschrieben werden. Außerdem werden geeignete Vorgehensweisen bei der
Skripterstellung hervorgehoben, die bei der Remoteausführung von Skripts zu befolgen sind.
Der Nutzen der Skripterstellung mit VBScript, WSH und WMI wird erst richtig deutlich, wenn Sie
versuchen, Skripts über das Netzwerk auf mehreren Computern auszuführen. Die einbezogenen
Verfahren sind nicht besonders schwierig, da der Remotebetrieb ein spezifischer Bestandteil von
WMI ist. Sie können alle im vorherigen Abschnitt, "Skripterstellung für grundlegende TCP/IP-
Netzwerke auf Clients", beschriebenen Verfahren auf einem oder mehreren Computern anwenden,
indem Sie ein paar relativ einfache Änderungen vornehmen.
Weitere Informationen zu diesen und verwandten Verfahren finden Sie in "Tales from the Script -
November 2002: Running WMI Scripts Against Multiple Computers" unter
http://go.microsoft.com/fwlink/?LinkId=24786 (nur auf Englisch verfügbar).
Hinweis
Das Objekt WshController des WSH bietet eine weitere Möglichkeit, um Skripts für
Remotecomputer auszuführen. Das WshController-Objekt ist hier jedoch nicht einbezogen, da WMI
einfachere und leistungsstärkere Möglichkeiten bietet, um die in diesem Dokument beschriebenen
Skripterstellungsaufgaben zu erreichen.
In diesem Abschnitt werden Informationen zum Verwalten von Remotecomputern bereitgestellt,
einschließlich der Schritte zur Skripterstellung und Beispielskripts für diese Themen:

Herstellen einer Verbindung zu einem Remotecomputer und Abrufen grundlegender Einstellungen.

Herstellen einer Verbindung zu einer Gruppe von Computern in einem Netzwerk.

Aufzeichnen der von den Netzwerkcomputern erfassten Daten.

Abrufen grundlegender Einstellungen eines Remotecomputers


Die meisten Systemadministratoren müssen in ihren Netzwerken Remotecomputer verwalten und
können dazu sehr hilfreich Skripts einsetzen. Im vorherigen Abschnitt wurden
Skripterstellungsverfahren zum Abrufen und Anzeigen von Einstellungen auf einem lokalen
Computer beschrieben. In diesem Abschnitt wird gezeigt, wie diese Skripts für die Verwendung mit
Remotecomputern geändert werden. Indem Sie die Verfahren einsetzen, die unter den nächsten beiden
Themen erläutert werden, können Sie mit WMI eine Verbindung zu einem Remotecomputer
herstellen, um die Einstellungen für diesen Computer abzurufen und anzuzeigen.

Verwenden von WMI zum Herstellen einer Verbindung zu einem


Remotecomputer
Weisen Sie den Namen des Remotecomputers einfach zu der im WMI-Objektpfad verwendeten
Hostvariable zu, um WMI zum Herstellen einer Verbindung zu einem Remotecomputer zu
verwenden. WMI behandelt die Details beim Herstellen der Verbindung zu Remotecomputern.
strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer)
Im vorhergehenden Beispiel hat WMI die Verbindung zu einem lokalen Computer hergestellt. Der
Punkt (.) repräsentiert den lokalen Computer in WMI-Objektpfaden. Die Verbindung wird zum
Standard-WMI-Namespace – normalerweise root\cimv2 – mithilfe des Parameters

Seite 44 von 169


"impersonationLevel" und dem Wert "impersonate" aufgebaut.
Ersetzen Sie "." durch den Namen eines Remotecomputers, damit WMI die Verbindung zu diesem
Remotecomputer herstellt.
strComputer = "client1" Set objWMIService = GetObject("winmgmts:\\" & strComputer)
Wie bei lokalen Computern müssen Sie auch auf dem Remotecomputer über entsprechende
Administratorrechte verfügen, um die in diesem Skript enthaltenen Schritte durchführen zu können.
Weitere Informationen zum Herstellen der Verbindung zu WMI finden Sie unter "Connecting to WMI
Using the WMI Moniker" im Kapitel "WMI Scripting Primer" des Windows 2000 Scripting Guide
unter http://go.microsoft.com/fwlink/?LinkId=29993 (nur auf Englisch verfügbar).

Abrufen der IP-Adressen und Subnetzmasken eines Remotecomputers


In dem folgenden Skript wird gezeigt, wie eine Reihe von TCP/IP-Clienteinstellungen von einem
Remotecomputer abgerufen werden. Der Code ist beinahe mit dem Code identisch, der zum
Herstellen der Verbindung zu WMI auf einem lokalen Computer verwendet wird. Der einzige
Unterschied ist, dass der Variablen strComputer der Name eines verfügbaren Remotecomputers
zugewiesen wird.
Schritte zur Skripterstellung
In Listing 13 werden die Eigenschaften IPAddress und IPSubnet (beides Arrays) für jede
Netzwerkadapterkonfiguration auf einem Remotecomputer abgerufen.
1.Aufrufen von "On Error Resume Next", dem Mechanismus von VBScript zur Fehlerbehandlung.
2.Erstellen einer Variablen zur Angabe des Remotecomputernamens. Dieser Code ist vergleichbar mit
dem, der in den meisten lokal ausgeführten Skripts in diesem Dokument verwendet wird. Das Skript
weist jedoch der Variable strComputer die Zeichenfolge "client1" (der Name eines
Remotecomputers) statt "." (der lokalen Computer) zu .
Wenn Sie dieses Skript ausführen möchten, ersetzen Sie "client1" in Zeile 3 durch den Namen eines
verfügbaren Remotecomputers, auf dem Sie über Administratorrechte verfügen.
3.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace
root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. Danach
strComputer in den Objektpfad eingefügt, damit das Skript die Verbindung zum Namespace
\root\cimv2 auf dem Remotecomputer herstellt. Der Parameter "impersonationlevel" und der
Namespace werden explizit angegeben.
4.Verwenden der Methode ExecQuery 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 den IP aktiviert ist.
5.Abrufen von Indexnummer, Beschreibung, IP-Adressen und Subnetzmasken für jede
Netzwerkadapterkonfiguration in der Auflistung.

Listing 13 Getip.vbs

Seite 45 von 169


1 On Error Resume Next
2
3 strComputer = "client1"
4 Set objWMIService = GetObject("winmgmts:" _
5 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
6 Set colNicConfigs = objWMIService.ExecQuery _
7 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
8
9 WScript.Echo VbCrLf & "Computer Name: " & strComputer
10WScript.Echo " IP Addresses & Subnet Masks"
11
12 For Each objNicConfig In colNicConfigs
13 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index
14 WScript.Echo " " & objNicConfig.Description & VbCrLf
15 WScript.Echo " IP Address(es):"
16 For Each strIPAddress In objNicConfig.IPAddress
17 WScript.Echo " " & strIPAddress
18 Next
19 WScript.Echo " Subnet Mask(s):"
20 For Each strIPSubnet In objNicConfig.IPSubnet
21 WScript.Echo " " & strIPSubnet
22 Next
23Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine
ähnliche Ausgabe wie die folgende angezeigt:
C:\scripts>getip.vbs
Computer Name: client1
IP Addresses & Subnet Masks
Network Adapter 1
3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet Scheduler
Miniport
IP Address(es):
192.168.0.11
Subnet Mask(s):
255.255.255.0

Herstellen einer Verbindung zu Gruppen von Computern in einem


Netzwerk
Wenn Sie WMI-basierte Skripts ausführen, um Netzwerkaufgaben für Computergruppen
durchzuführen, können Sie dies normalerweise effizienter und flexibler erreichen, als mit den meisten
Windows-Schnittstellen oder Befehlszeilentools.
Beim Herstellen einer Verbindung zu Remotecomputern gilt es immer bestimmte
Vorsichtsmaßnahmen in Ihren Skripts zu treffen. Diese Vorsichtsmaßnahmen können Ihnen dabei
helfen, dass Sie keine Zeit damit verschwenden, ein Skript auf Computern auszuführen, die nicht
erreichbar oder auf denen WMI nicht verfügbar ist. WMI ist auf Betriebssystemen vor Windows 2000
und Windows Millenium Edition nicht standardmäßig installiert.

Seite 46 von 169


Wenn Sie die Verbindung zu Remotecomputern herstellen, ist es empfehlenswert zu prüfen, ob alle
Computer über das Netzwerk erreichbar sind. Das Befehlszeilentool Ping.exe stellt dazu eine
traditionelle Möglichkeit bereit. Unter Windows XP und nachfolgenden Versionen von Windows
bietet WMI die neue Klasse Win32_PingStatus, die das Verhalten von Ping.exe weitestgehend
kopiert.
Da die Wahrscheinlichkeit größer ist, dass beim Ausführen eines Skripts auf Remotecomputern
Probleme auftreten, ist es empfehlenswert, den VBScript-Mechanismus zur Fehlerbehandlung zu
verwenden, der "On Error Resume Next" genannt wird. Auf diese Weise bringen die Netzwerk- oder
Remoteprobleme das Skript nicht zum Absturz. Wenn das Skript auf einem Computer einen Fehler
entdeckt, kann es auf diese Weise die Ausführung auf anderen Computern fortsetzen.
Sie können den Fehler auch erfassen und anschließend anzeigen oder protokollieren. Weitere
Informationen zur Fehlerbehandlung finden Sie im Abschnitt "Fehlerbehandlung" in Kapitel 2 des
Windows 2000 Scripting-Handbuchs unter
/germany/technet/datenbank/articles/600358.mspx#E0BW0AA.
In diesem Abschnitt werden die Schritte zur Skripterstellung und Beispielskripts für diese Themen
bereitgestellt:

Senden von Ping-Anforderungen an Netzwerkhosts vor dem Versuch, darauf Skripts auszuführen.

Behandeln von Fehlern mit VBScript.

Verwenden eines Arrays zum Eingeben einer Liste von Netzwerkhosts.

Abrufen der IP-Adressen und Subnetzmasken einer Gruppe von Remotecomputern.

Verwenden einer Textdatei mit einer Hostliste als Eingabe.

Herstellen der Verbindung zu einem Subnetz oder einem Bereich von IP-Adressen.

Andere Möglichkeiten zum Bereitstellen von Eingaben für Skripts.

Senden von Ping-Anforderungen an Netzwerkhosts vor dem Versuch, darauf


Skripts auszuführen
Es wird empfohlen, zu jedem Remotehost eine Verbindung herzustellen, um sicherzustellen, dass
dieser erreichbar ist, bevor versucht wird, darauf Aufgaben auszuführen. Wenn alle zu pingenden
Computer Windows XP oder Windows Server 2003 ausführen, können Sie die neue WMI-Klasse
Win32_PingStatus verwenden. Win32_PingStatus gibt ein Objekt mit 24 Eigenschaften zurück, die
ausführliche Details zu den Ping-Paketen bereitstellen, die von der Klasse gesendet werden.
Wenn auch ältere Betriebssysteme einbezogen sind, stellt das TCP/IP-Befehlszeilentool Ping.exe die
Standardlösung zum Prüfen der Verbindung dar. Sie können Ping und Befehlszeilenparameter mit der
Methode Exec() des Objekts WshShell ausführen. Ping sendet eine konfigurierbare Anzahl von
ICMP-Paketen an den Hostnamen oder die IP-Adresse und wartet dann auf Antworten. Das Skript
kann die über die Standardeingabe empfangenen Antworten hinsichtlich der Zeichenfolge "Antwort
von" analysieren, die nur vorkommt, wenn der Computer auf den Ping-Befehl geantwortet hat.
Hinweis
Der Ping-Befehl wird nur erfolgreich durchgeführt, wenn die Routinginfrastruktur die Ping-
Nachrichten weiterleitet und das Ziel keine Firewall verwendet, die den Empfang von Ping-
Nachrichten verhindert.

Seite 47 von 169


Senden von Ping-Signalen an einzelne Netzwerkhosts durch Ausführen von
"Ping.exe" über ein Skript
Wenn Sie ermitteln möchten, ob ein Computer im Netzwerk erreichbar ist, bevor Sie versuchen, die
Verbindung zu WMI herzustellen und eine Aufgabe darauf durchzuführen, kann Ping.exe über ein
Skript mithilfe von WSH aufgerufen werden. VBScript bietet Funktionen zur
Zeichenfolgenbehandlung, mit deren Hilfe das Skript den über die Standardeingabe eingehenden
StdOut-Zeichenstream analysieren kann, um zu sehen, ob der Remotecomputer entsprechend
geantwortet und reagiert hat.

Schritte zur Skripterstellung


Listing 14 veranschaulicht, wie Ping.exe mit der WshShell-Methode Exec() ausgeführt wird.
1.Aufrufen von "On Error Resume Next", dem Mechanismus von VBScript zur Fehlerbehandlung.
2.Erstellen einer Variablen zur Angabe des Remotecomputernamens.
Dieses Skript verwendet fast denselben Code, der in den meisten Skripts in diesem Dokument
verwendet wird. Hier wird allerdings "client1" (der Name des Remotecomputers) anstelle von "."
(der WMI-Name für den lokalen Computer) zu strComputer zugewiesen. WMI akzeptiert auch IP-
Adressen als Kennung für den Remotecomputer. Wenn Sie dieses Skript ausführen möchten,
ersetzen Sie "client1" durch den Namen oder die IP-Adresse eines verfügbaren Remotecomputers,
für den Sie über Administratorrechte verfügen.
3.Erstellen eines WshShell-Objekts und zuordnen zu objShell.
4.Ausführen der Methode Exec von objShell und dieser Parameter übergeben, die zum Senden zweier
Echo-Anforderungen mit einer Wartezeit von 1000 Millisekunden (eine Sekunde) für jede Antwort
an den Zielcomputer aufrufen. Zuordnen des sich ergebenden Objekts an objExec.
5.Lesen des gesamten vom Objekt objExec erzeugten StdOut-Streams und diesen in Kleinbuchstaben
konvertieren, um Probleme mit der Groß-/Kleinschreibung zu vermeiden sowie anschließendes
Zuordnen des Streams zur Variablen strPingResults.
6.Aufrufen der VBScript-Funktion InStr, die nach dem ersten Parameter sucht, der Zeichenfolge aus
Ergebnissen des Ping-Befehls für sämtliche Vorkommen des zweiten Parameters, der Zeichenfolge
"Antwort von". Wenn die Zeichenfolge gefunden wurde, ist der Ping-Befehl erfolgreich gewesen
und der Zielcomputer hat geantwortet.
InStr gibt die Zeichenposition in der ersten Zeichenfolge zurück, in der die zweite Zeichenfolge
gefunden wurde. Wenn diese nicht gefunden wird, gibt InStr den Wert "0" zurück.
Die If...Then-Anweisung interpretiert alle Zahlen mit Ausnahme von Null für ihre Bedingung als
"True" (wahr), woraufhin das Skript die Codezeilen ausführt, die bis zu Else folgen (7–14). Da der
Zielcomputer geantwortet hat, kann das Skript auf dem Zielcomputer die Verbindung zu WMI
herstellen und dessen Namen anzeigen. Dies ist nur ein einfaches Beispiel: Nachdem das Skript die
Verbindung zum Zielcomputer hergestellt hat, kann es beliebige Folgen von WMI- und ADSI-
Aufgaben durchführen.
7.Wenn InStr die Zeichenfolge "Antwort von" nicht findet und "0" zurückgibt, dann hat der
Remotecomputer nicht auf den Ping-Befehl geantwortet. In diesem Fall überträgt die If...Then-
Anweisung die Skriptausführung an die Else-Anweisung in Zeile 16 und das Skript zeigt eine
Meldung an, dass der Zielcomputer nicht auf den Ping-Befehl geantwortet hat. Das Skript versucht

Seite 48 von 169


dann nicht, die Verbindung zu WMI herzustellen oder die Aufgabe auf dem Remotecomputer
auszuführen, da dies zu einem Fehler führen würde.

Listing 15 Ping.vbs
1 On Error Resume Next
2
3 strTarget = "192.168.0.1" 'IP address or hostname
4 Set objShell = CreateObject("WScript.Shell")
5 Set objExec = objShell.Exec("ping -n 2 -w 1000 " & strTarget)
6 strPingResults = LCase(objExec.StdOut.ReadAll)
7 If InStr(strPingResults, "reply from") Then
8 WScript.Echo strTarget & " responded to ping."
9 Set objWMIService = GetObject("winmgmts:" _
10 & "{impersonationLevel=impersonate}!\\" & strTarget & "\root\cimv2")
11 Set colCompSystems = objWMIService.ExecQuery("SELECT * FROM " & _
12 "Win32_ComputerSystem")
13 For Each objCompSystem In colCompSystems
14 WScript.Echo "Host Name: " & LCase(objCompSystem.Name)
15 Next
16Else
17 WScript.Echo strTarget & " did not respond to ping."
18End If
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine
ähnliche Ausgabe wie die folgende angezeigt:
C:\scripts>ping.vbs
192.168.0.1 responded to ping.
Host Name: server1

Senden von Ping-Anforderungen an mehrere Netzwerkhosts durch Ausführen von


"Ping.exe" über ein Skript
Mit einigen zusätzlichen Codezeilen kann ein Skript nacheinander Ping-Anforderungen an mehrere
Computer senden, bevor versucht wird, auf diesen eine Aufgabe durchzuführen. Die Computernamen
werden in Form eines Arrays an das Skript übergeben, was eine einfache Methode zum Erreichen
dieses Ziels darstellt. Die Computernamen können jedoch auch aus einer Textdatei, aus einem
Tabellenblatt oder aus einer Datenbank abgerufen bzw. aus einer Active Directory-
Organisationseinheit heraus aufgelistet werden, indem nur etwas zusätzlicher Code hinzugefügt wird.

Schritte zur Skripterstellung


Listing 15 veranschaulicht, wie Ping.exe mit der WshShell-Methode Exec() für mehrere Computer
ausgeführt wird.
1.Aufrufen von "On Error Resume Next", dem Mechanismus von VBScript zur Fehlerbehandlung.
2.Erstellen eines Arrays mit der VBScript-Funktion Array und Hinzufügen der Namen oder IP-
Adressen von verfügbaren Computern im Netzwerk als Elemente. Der WMI-Dienst akzeptiert
sowohl Hostnamen als auch IP-Adressen im Objektpfad von Zeile 12. Ordnen Sie das Array der
Variable arrTargets zu.
3.Verwenden einer For Each-Schleife für die Iteration durch die einzelnen Elemente im Array.
Ausführen derselben Schritte für die einzelnen Computer, die im vorherigen Beispiel, Ping.vbs, auf
dem Remotecomputer durchgeführt wurden.

Seite 49 von 169


Listing 15 Ping-multi.vbs
1 On Error Resume Next
2
3 arrTargets = Array("192.168.0.1", "192.168.0.11", "192.168.0.12", _
4 "192.168.0.13")
5
6 For Each strTarget In arrTargets
7 Set objShell = CreateObject("WScript.Shell")
8 Set objExec = objShell.Exec("ping -n 2 -w 1000 " & strTarget)
9 strPingResults = LCase(objExec.StdOut.ReadAll)
10 If InStr(strPingResults, "reply from") Then
11 WScript.Echo VbCrLf & strTarget & " responded to ping."
12 Set objWMIService = GetObject("winmgmts:" _
13 & "{impersonationLevel=impersonate}!\\" & strTarget & "\root\cimv2")
14 Set colCompSystems = objWMIService.ExecQuery("SELECT * FROM " & _
15 "Win32_ComputerSystem")
16 For Each objCompSystem In colCompSystems
17 WScript.Echo "Host Name: " & LCase(objCompSystem.Name)
18 Next
19 Else
20 WScript.Echo VbCrLf & strTarget & " did not respond to ping."
21 End If
22Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine
ähnliche Ausgabe wie die folgende angezeigt:
C:\scripts>ping-multi.vbs
192.168.0.1 responded to ping.
Host Name: server1
192.168.0.11 responded to ping.
Host Name: client1
192.168.0.12 responded to ping.
Host Name: client2
192.168.0.13 did not respond to ping.

Senden von Ping-Anforderungen an einzelne Netzwerkhosts mithilfe der Klasse


"Win32_PingStatus"
Unter Windows XP und Windows Server 2003 kann die neue WMI-Klasse Win32_PingStatus mehr
Details des Ping-Vorgangs zurückgeben, als durch Ausführen von Ping.exe. Sie können diese WMI-
Klasse jedoch nur in einem Netzwerk verwenden, das nur diese beiden Betriebssysteme ausführt.
In einer solchen Situation kann dieses Skript als Vorlage zum Testen der Verbindung eines einzelnen
Remotecomputers mithilfe eines Ping-Befehls dienen, bevor versucht wird, die Verbindung zu WMI
herzustellen, um auf dem Computer Aufgaben auszuführen.
Die Eigenschaft StatusCode von Win32_PingStatus gibt die in Tabelle 6 gezeigten Statuscodes
zurück. Ihr Datentyp ist uint32 und sie sind schreibgeschützt. Damit sich dieses Skript als
benutzerfreundlicher erweist, können Sie die Statuscodes in eine beschreibende Zeichenfolge
umwandeln, die in Tabelle 6 angezeigt wird.

Seite 50 von 169


Tabelle 6 Statuscodes von "Win32_Pingstatus"
Wert Beschreibung
0 Erfolg
11001 Puffer zu klein
11002 Zielnetzwerk nicht erreichbar
11003 Zielhost nicht erreichbar
11004 Zielprotokoll nicht erreichbar
11005 Zielport nicht erreichbar
11006 Keine Ressourcen
11007 Unzulässige Option
11008 Hardwarefehler
11009 Zu großes Paket
11010 Anforderungszeitüberschreitung
11011 Unzulässige Anforderung
11012 Unzulässige Route
11013 TTL-Übertragungsüberschreitung
11014 Reassemblierung der abgelaufenen Gültigkeitsdauer
11015 Unzulässiger Parameter
11016 Quelldrosselung
11017 Zu große Option
11018 Unzulässiges Ziel
11032 IPSEC-Aushandlung
11050 Allgemeiner Fehler

Schritte zur Skripterstellung


Listing 16 veranschaulicht, wie die Verbindung eines Remotecomputers mithilfe der Klasse
Win32_PingStatus getestet wird und die Informationen zu den Pingergebnissen angezeigt werden,
die die Eigenschaften dieser Klasse zurückgeben können.
1.Aufrufen von "On Error Resume Next", dem Mechanismus von VBScript zur Fehlerbehandlung.
2.Erstellen einer Variablen mit dem Namen Computers, der das Skript ausführt.
3.Erstellen einer Variablen zum Angeben des Namens des Zielcomputers, an den das Pingsignal
gesendet wird.

Seite 51 von 169


4.Herstellen der Verbindung zum WMI-Dienst auf dem Computer, auf dem das Skript ausgeführt
wird.
Dieses Beispiel führt das Skript auf dem lokalen Computer (".") aus und richtet sich an die lokale
Loopbackadresse ("127.0.0.1"), aber Sie können das Skript auch auf einem Remotecomputer
ausführen und das Pingsignal an einen anderen Remotecomputer senden.
5.Aufrufen der Methode ExecQuery des WMI-Objekts, wobei dieser eine WQL-Abfrage übergeben
wird, die alle Eigenschaften (*) der Instanz von Win32_PingStatus anfordert, deren Adresse der
des Zielcomputers entspricht. Zuweisen der zurückgegebenen Auflistung von Instanzen (in diesem
Beispiel nur eine Instanz als Ergebnis) an die Variable colPings.
Die Arbeitsweise von Win32_PingStatus ist für WMI eher unüblich, da keine Methode aufgerufen
wird, um damit Aktionen durchzuführen. Stattdessen wird die Klasse einfach abgefragt, wobei die
Instanz mithilfe von WHERE gefiltert wird, bei der der Wert der Adresse, der eine der
Schlüsseleigenschaften darstellt, den Namen oder IP-Adresse des Zielcomputers enthält. Sie können
auch verschiedene andere Schlüsseleigenschaften filtern, um die Pingoperation zu konfigurieren.
Durch Ausführen einer solchen Abfrage leitet das Skript den Pingvorgang ein.
6.Wenn beim Abfragen der Klasse Win32_PingStatus kein Fehler auftritt, wird eine Iteration durch
die Auflistung der Pingobjekte durchgeführt (es ist gemäß der Art der Abfrage nur eine vorhanden).
7.Wenn bei der Iteration durch die Auflistung der Pingobjekte kein Fehler auftritt, wird der vom
Pingobjekt zurückgegebene Statuscode geprüft.
8.Ist der Statuscode "0" und weist somit darauf hin, dass das Ziel auf das Pingsignal geantwortet hat,
werden verschiedene der vom Pingobjekt zurückgegebenen Eigenschaften angezeigt.
9.Wenn ein Fehler auftritt, entweder beim Abfragen der Klasse Win32_PingStatus oder bei der
Iteration durch die Auflistung der Pingobjekte, wird der Statuscode gelöscht und die Beschreibung
des Statuscode angezeigt.

Listing 16 Pingstatus.vbs

Seite 52 von 169


1 On Error Resume Next
2
3 strComputer = "."
4 strTarget = " client1" 'IP address or hostname
5 Set objWMIService = GetObject("winmgmts:" _
6 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
7 Set colPings = objWMIService.ExecQuery _
8 ("Select * From Win32_PingStatus where Address = '" & strTarget & "'")
9 If Err = 0 Then
10 Err.Clear
11 For Each objPing in colPings
12 If Err = 0 Then
13 Err.Clear
14 If objPing.StatusCode = 0 Then
15 Wscript.Echo strTarget & " responded to ping."
16 Wscript.Echo "Responding Address: " & objPing.ProtocolAddress
17 Wscript.Echo "Responding Name: " & objPing.ProtocolAddressResolved
18 Wscript.Echo "Bytes Sent: " & objPing.BufferSize
19 Wscript.Echo "Time: " & objPing.ResponseTime & " ms"
20 Wscript.Echo "TTL: " & objPing.ResponseTimeToLive & " seconds"
21 Else
22 WScript.Echo strTarget & " did not respond to ping."
23 WScript.Echo "Status Code: " & objPing.StatusCode
24 End If
25 Else
26 Err.Clear
27 WScript.Echo "Unable to call Win32_PingStatus on " & strComputer & "."
28 End If
29 Next
30Else
31 Err.Clear
32 WScript.Echo "Unable to call Win32_PingStatus on " & strComputer & "."
33End If
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine
ähnliche Ausgabe wie die folgende angezeigt:
C:\scripts>pingstatus.vbs
client1 responded to ping.
Responding Address: 192.168.0.11
Responding Name:
Bytes Sent: 32
Time: 0 ms
TTL: 128 seconds

Senden von Ping-Anforderungen an mehrere Netzwerkhosts mithilfe der Klasse


"Win32_PingStatus"
Dieses Skript verwendet die Klasse Win32_PingStatus, um die Ping-Anforderung an eine Liste von
Computern zu senden, die in einem Array angegeben sind. Wenn der Host, auf dem Sie das Skript
ausführen, ein älteres Betriebssystem als Windows XP ausführt, erfasst das Skript den Fehler und
kehrt zur WSH-Methode Exec für das Senden von Ping-Anforderungen zurück.

Schritte zur Skripterstellung

Seite 53 von 169


Listing 17 veranschaulicht, wie die Klasse Win32_PingStatus zum Testen von Verbindungen zu
mehreren Computern verwendet wird.
1.Aufrufen von "On Error Resume Next", dem Mechanismus von VBScript zur Fehlerbehandlung.
2.Erstellen eines Arrays aus Zeichenfolgen, um die Namen der Zielcomputer anzugeben, an die die
Ping-Anforderung gesendet werden soll. Jedes Element muss aus dem Namen oder der IP-Adresse
eines verfügbaren Netzwerkhosts bestehen.
3.Verwenden Sie eine For Each-Schleife, um das Array mit den Namen der Zielcomputer zu
durchlaufen.
4.Aufrufen der Methode ExecQuery des WMI-Dienstobjekts auf jedem Zielcomputer, wobei dieser
eine WQL-Abfrage übergeben wird, die alle Eigenschaften (*)der Instanz von Win32_PingStatus
anfordert, deren Adresse der des Zielcomputers entspricht. Zuweisen der sich ergebenden
Auflistung von Instanzen (in diesem Beispiel nur eine Instanz) an die Variable colPings.
5.Wenn beim Versuch der Abfrage von Win32_PingStatus kein Fehler auftritt, wird eine Iteration
durch die Auflistung der Pingobjekte durchgeführt (es ist gemäß der Art der Abfrage nur eine
vorhanden) und die Eigenschaft StatusCode des Pingobjekts geprüft.
6.Wenn der Wert von StatusCode "0" ist, wurde der Ping-Befehl erfolgreich ausgeführt. Aufrufen
verschiedener zurückgegebener Eigenschaften und Aufrufen der Unterroutine GetName.
GetName zeigt die Eigenschaft Name der Klasse Win32_ComputerSystem an. Dies ist hilfreich,
da dieses Skript die IP-Adresse des Computers in der Liste der Zielcomputer als Kennung
verwenden kann.
7.Wenn StatusCode ungleich "0" ist, hat der Zielcomputer auf die Ping-Anforderung nicht
geantwortet. Zeigen Sie den Wert von StatusCode als Fehlermeldung an.
8.Wenn beim Abfragen von Win32_PingStatus ein Fehler aufgetreten ist, muss dieser bereinigt
werden. Dieser Fehler weist wahrscheinlich darauf hin, dass Win32_PingStatus auf dem
Zielcomputer nicht zur Verfügung stand.
9.Aufrufen der Funktion ExecPing.

ExecPing verwendet denselben Code wie Ping.vbs zum Ausführen des Befehlszeilentools
Ping.exe und interpretiert dessen Ausgabe.

ExecPing gibt einen booleschen Wert zurück, der "True"(wahr) ist, wenn die Ping-Anforderung
die Zeichenfolge "Antwort von" im zurückgegebenen Ausgabetext enthält (d. h. die Ping-
Anforderung wurde erfolgreich gesendet). Andernfalls ist der Wert "False" (falsch) und "Antwort
von" somit nicht enthalten.
10.Wenn ExecPing den Wert "True" (wahr) liefert, wird GetName aufgerufen, um den Namen des
Zielcomputers aufzurufen.
GetName erhält den Namen des Computers von der Eigenschaft Name von
Win32_ComputerSystem.

Listing 17 Pingstatus-multi.vbs

Seite 54 von 169


1 On Error Resume Next
2
3 strComputer = "."
4 arrTargets = Array("192.168.0.1", "192.168.0.11", "192.168.0.12", _
5 "192.168.0.13")
6
7 Set objWMIService = GetObject("winmgmts:" _
8 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
9
10 For Each strTarget In arrTargets
11
12 Set colPings = objWMIService.ExecQuery _
13 ("Select * From Win32_PingStatus where Address = '" & strTarget & "'")
14 If Err = 0 Then
15 Err.Clear
16 For Each objPing in colPings
17 If objPing.StatusCode = 0 Then
18 Wscript.Echo VbCrLf & strTarget & " responded to ping."
19 Wscript.Echo "Responding Address: " & objPing.ProtocolAddress
20 Wscript.Echo "Responding Name: " & objPing.ProtocolAddressResolved
21 Wscript.Echo "Bytes Sent: " & objPing.BufferSize
22 Wscript.Echo "Time: " & objPing.ResponseTime & " ms"
23 Wscript.Echo "TTL: " & objPing.ResponseTimeToLive & " seconds"
24 GetName
25 Else
26 WScript.Echo VbCrLf & strTarget & " did not respond to ping."
27 WScript.Echo "Status Code: " & objPing.StatusCode
28 End If
29 Next
30 Else
31 Err.Clear
32 If ExecPing = True Then
33 GetName
34 End If
35 End If
36
37 Next
38
39 '******************************************************************************
40
41 Function ExecPing
42
43 Set objShell = CreateObject("WScript.Shell")
44 Set objExec = objShell.Exec("ping -n 2 -w 1000 " & strTarget)
45 strPingResults = LCase(objExec.StdOut.ReadAll)
46 If InStr(strPingResults, "reply from") Then
47 WScript.Echo VbCrLf & strTarget & " responded to ping."
48 ExecPing = True
49 Else
50 WScript.Echo VbCrLf & strTarget & " did not respond to ping."
51 ExecPing = False
52 End If
53
54 End Function
55
56 '******************************************************************************
57
58 Sub GetName
59
60 Err.Clear
61 Set objWMIServiceRemote = GetObject("winmgmts:" _
62 & "{impersonationLevel=impersonate}!\\" & strTarget & "\root\cimv2")
63 If Err = 0 Then
64 Err.Clear
65 Seite
Set colCompSystems = objWMIServiceRemote.ExecQuery("SELECT * 55 von"169
FROM & _
66 "Win32_ComputerSystem")
67 For Each objCompSystem In colCompSystems
68 WScript.Echo "Host Name: " & LCase(objCompSystem.Name)
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.

Seite 56 von 169


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.

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


Eigenschaft Typ Beschreibung
DefaultIPGateway ZeichenfolgenarrayArray von IP-Adressen der Standardgateways, die vom

Seite 57 von 169


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.
DHCPLeaseObtainedDATETIME 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 Uint32 Kosten für die Verwendung der konfigurierten Routen für
den IP-Adapter und der gewichtete Wert für diese Routen in
(Neu bei Windows der IP-Routingtabelle. Wenn die IP-Routingtabelle mehrere
XP) 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


Methode Parameter Beschreibung
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 Aktiviert die statische TCP/IP-Adressierung für den
Zeichenfolgen Zielnetzwerkadapter. Infolgedessen wird DHCP für
diesen Netzwerkadapter deaktiviert.
SubnetMask – Array
von Zeichenfolgen
ReleaseDHCPLease Kein Gibt die an einen bestimmten DHCP-Netzwerkadapter
gebundene IP-Adresse frei.

Seite 58 von 169


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.
ReleaseDHCPLeaseAllKein 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 – Gibt eine Liste von Gateways für das Routing von
Array von Paketen an ein anderes Subnetz als dasjenige an, mit
Zeichenfolgen dem der Netzwerkadapter verbunden ist. Diese
Methode funktioniert nur, wenn sich der
GatewayCostMetric – Netzwerkadapter im statischen IP-Modus befindet.
unit16
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.

Seite 59 von 169


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.

Seite 60 von 169


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

Seite 61 von 169


1 On Error Resume Next
2
3 strComputer = "."
4
5 Set objWMIService = GetObject("winmgmts:" _
6 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
7 Set colNicConfigs = objWMIService.ExecQuery _
8 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
9
10 For Each objNicConfig In colNicConfigs
11 strDNSHostName = objNicConfig.DNSHostName
12 strIndex = objNicConfig.Index
13 strDescription = objNicConfig.Description
14 blnDHCPEnabled = objNicConfig.DHCPEnabled
15 If blnDHCPEnabled Then
16 strDHCPServer = objNicConfig.DHCPServer
17 dtmRawLeaseObtainedDate = objNicConfig.DHCPLeaseObtained
18 strDHCPLeaseObtained = WMIDateToString(dtmRawLeaseObtainedDate)
19 dtmRawLeaseExpiresDate = objNicConfig.DHCPLeaseExpires
20 strDHCPLeaseExpires = WMIDateToString(dtmRawLeaseExpiresDate)
21 End If
22 strDHCPSettings = strDHCPSettings & VbCrLf & VbCrLf & _
23 " Network Adapter " & strIndex & VbCrLf & _
24 " " & strDescription & VbCrLf & VbCrLf & _
25 " DHCP Enabled: " & blnDHCPEnabled
26 If blnDHCPEnabled Then
27 strDHCPSettings = strDHCPSettings & VbCrLf & _
28 " DHCP Server: " & strDHCPServer & VbCrLf & _
29 " DHCP Lease Obtained: " & strDHCPLeaseObtained & VbCrLf & _
30 " DHCP Lease Expires: " & strDHCPLeaseExpires
31 End If
32Next
33
34 WScript.Echo VbCrLf & "DHCP Settings" & VbCrLf & VbCrLf & _
35 "Host Name: " & strDNSHostName & strDHCPSettings
36
37 '******************************************************************************
38
39 Function WMIDateToString(dtmDate)
40
41 WMIDateToString = CDate(Mid(dtmDate, 5, 2) & "/" & _
42 Mid(dtmDate, 7, 2) & "/" & _
43 Left(dtmDate, 4) & " " & _
44 Mid(dtmDate, 9, 2) & ":" & _
45 Mid(dtmDate, 11, 2) & ":" & _
46 Mid(dtmDate, 13, 2))
47
48 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

Seite 62 von 169


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


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

Seite 63 von 169



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 On Error Resume Next
2
3 strComputer = "."
4 Set objWMIService = GetObject("winmgmts:" _
5 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
6 Set colNicConfigs = objWMIService.ExecQuery _
7 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
8
9 For Each objNicConfig In colNicConfigs
10 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index & _
11 VbCrLf & " " & objNicConfig.Description & VbCrLf
12 If Not objNicConfig.DHCPEnabled Then
13 WScript.Echo " Enabling DHCP ..."
14 intReturn = objNicConfig.EnableDHCP
15 If intReturn = 0 Then
16 strSuccess = " DHCP enabled."
17 Else
18 strSuccess = " Unable to enable DHCP."
19 End If
20 WScript.Echo VbCrLf & strSuccess
21
22 Else
23 WScript.Echo " DHCP already enabled" & VbCrLf & _
24 " DHCP Server: " & objNicConfig.DHCPServer
25 End If
26Next
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.

Seite 64 von 169


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


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 =

Seite 65 von 169


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.
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

Seite 66 von 169


1 On Error Resume Next
2
3 strComputer = "."
4 Set objWMIService = GetObject("winmgmts:" _
5 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
6 Set colNicConfigs = objWMIService.ExecQuery _
7 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
8
9 WScript.Echo VbCrLf & "Settings before releasing lease"
10
11 For Each objNicConfig In colNicConfigs
12
13 blnDHCPEnabled = objNicConfig.DHCPEnabled
14
15 WScript.Echo VbCrLf & _
16 " Network Adapter " & objNicConfig.Index & VbCrLf & _
17 " " & objNicConfig.Description & VbCrLf & VbCrLf & _
18 " DHCP Enabled: " & blnDHCPEnabled
19
20 If blnDHCPEnabled Then
21
22 dtmLeaseObtainedDate = objNicConfig.DHCPLeaseObtained
23 strDHCPLeaseObtained = WMIDateToString(dtmLeaseObtainedDate)
24 dtmLeaseExpiresDate = objNicConfig.DHCPLeaseExpires
25 strDHCPLeaseExpires = WMIDateToString(dtmLeaseExpiresDate)
26
27 WScript.Echo " DHCP Server: " & objNicConfig.DHCPServer & _
28 VbCrLf & " DHCP Lease Obtained: " & strDHCPLeaseObtained & _
29 VbCrLf & " DHCP Lease Expires: " & strDHCPLeaseExpires
30
31 intReleaseReturn = objNicConfig.ReleaseDHCPLease
32 WScript.Sleep 5000
33
34 If (intReleaseReturn = 0 Or intReleaseReturn = 1) Then
35 strSuccess = " DHCP lease released."
36 If intReleaseReturn = 1 Then
37 strSuccess = strSuccess & " Must reboot machine."
38 End If
39 Else
40 strSuccess = " Unable to release DHCP lease."
41 End If
42
43 WScript.Echo VbCrLf & strSuccess
44
45 End If
46
47 Next
48
49 Set colNicConfigs = objWMIService.ExecQuery _
50 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
51
52 WScript.Echo VbCrLf & "Settings after releasing lease"
53
54 For Each objNicConfig In colNicConfigs
55
56 blnDHCPEnabled = objNicConfig.DHCPEnabled
57
58 WScript.Echo VbCrLf & _
59 " Network Adapter " & objNicConfig.Index & VbCrLf & _
60 " " & objNicConfig.Description & VbCrLf & VbCrLf & _
61 " DHCP Enabled: " & blnDHCPEnabled
62
63 If blnDHCPEnabled Then
64
65 dtmLeaseObtainedDate = objNicConfig.DHCPLeaseObtainedSeite 67 von 169
66 strDHCPLeaseObtained = WMIDateToString(dtmLeaseObtainedDate)
67 dtmLeaseExpiresDate = objNicConfig.DHCPLeaseExpires
68 strDHCPLeaseExpires = WMIDateToString(dtmLeaseExpiresDate)
Teil 5: Skripterstellung für DNS auf Clients
Veröffentlicht: 07. Dez 2004
DNS (Domain Name System) ist der primäre Mechanismus für die Namensauflösung bei den
meisten TCP/IP-Netzwerken sowie das standardmäßige Namensauflösungsprotokoll für
Windows 2000, Windows XP und Windows Server 2003. Bei der Zusammenarbeit mit DHCP-
Servern können DNS-Server, die die dynamische DNS-Aktualisierung verwenden, nun viele
Aspekte der Namensauflösung automatisieren, die zuvor durch manuell konfigurierte HOSTS-
Dateien ausgeführt wurden. DNS kann auch in Active Directory integriert werden, um die
Namensauflösung mit der Verzeichnisverwaltung zu verbinden.
Wenn Clients DHCP verwenden, können sie die DNS-Konfiguration vom DHCP-Server
abrufen. Abbildung 10 zeigt das Dialogfeld Eigenschaften von Internetprotokoll (TCP/IP)
(Zugriff darauf über Netzwerkverbindungen). Darin können Sie diese Einstellung angeben,
indem Sie auf das Optionsfeld DNS-Serveradresse automatisch beziehen klicken. In diesem
Fall hilft Ihnen DHCP beim Automatisieren von DNS-Einstellungen auf Clients und verwendet
dazu keine Skripts.

Abbildung 10 Automatisieren der DNS-Einstellungen auf Clients über die Windows-


Benutzeroberfläche
Bild maximieren
Das Befehlszeilentool Ipconfig.exe kann DNS-Clienteinstellungen ebenfalls abrufen und
Aufgaben wie das Leeren des DNS-Clientauflösungscaches ausführen.
Es kann jedoch vorkommen, dass Sie DNS-Clients remote oder in Gruppen konfigurieren
müssen – beispielsweise, wenn Sie alte DNS-Server durch neue ersetzen, Änderungen an
Servern vornehmen oder Subnetzanordnungen ändern. Wenn dann jeder einzelne Host manuell
konfiguriert wird, beansprucht dieser Vorgang unnötig viel Verwaltungszeit. In derartigen Fällen
stellt WMI wie bei anderen TCP/IP-Protokollen Methoden und Eigenschaften der Klasse
Win32_NetworkAdapterConfiguration bereit, mit denen sich die DNS-Clientkonfiguration
automatisieren lässt.

Seite 68 von 169


Beachten Sie, dass die Klasse Win32_NetworkAdapterConfiguration keine Eigenschaft oder
Methode bereitstellt, die der Einstellung DNS-Serveradresse automatisch beziehen explizit
entspricht. Die DNSServerSearchOrder-Eigenschaft zeigt die IP-Adressen aller auf dem Client
konfigurierten DNS-Server an – unabhängig davon, ob diese lokal festgelegt oder vom DHCP-
Server abgerufen wurden.
Optional können Sie einen Wert entsprechend der Einstellung DNS-Serveradresse automatisch
beziehen abrufen oder festlegen. Zu diesem Zweck verwenden Sie die beiden
Registrierungseinträge DhcpNameServer und NameServer, die unter der folgenden Adresse zu
finden sind:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
\ {AdapterIdentifier}
Wenn NameServer den Wert 0 hat, versucht der Client, eine DNS-Serveradresse vom DHCP-
Server automatisch abzurufen. Wenn NameServer eine IP-Adresse als Wert enthält, setzt diese
Adresse jede vom DHCP-Server erhaltene DNS-Serveradresse außer Kraft. In diesem Fall wird
ein im Registrierungseintrag DhcpNameServer angegebener Wert im Dialogfeld nicht
angezeigt.
WMI umfasst auch einen DNS-Serveranbieter (zuerst im Windows 2000 Resource Kit enthalten,
jetzt Teil des Betriebssystems Windows Server 2003), der Ihnen das Automatisieren von
Servervorgängen mit Skripts ermöglicht. Informationen zur Skripterstellung für den DNS-
Serveranbieter würden den Rahmen dieses Dokumentes jedoch überschreiten.
Das Befehlszeilentool Dnscmd.exe stellt umfangreiche Optionen für die DNS-
Serverkonfiguration bereit.
In diesem Abschnitt werden die Schritte zur Skripterstellung und Beispielskripts für diese
Aufgaben bereitgestellt:

Anzeigen von DNS-Clientinformationen

Aktivieren von DNS

Ändern der Suchreihenfolge für DNS-Server, der DNS-Domäne, der Suchreihenfolge für DNS-
Domänensuffixe und der DNS-Registrierungseinstellungen

Anzeigen von DNS-Clientinformationen


Wie bei DHCP besteht der erste Schritt beim Verwalten von DNS auf Clients normalerweise
darin, die aktuellen Einstellungen zu ermitteln. Abbildung 11 zeigt die Registerkarte DNS des
Dialogfelds Erweiterte TCP/IP-Einstellungen, die eine Möglichkeit zum Zugreifen auf diese
Einstellungen über die Windows-Benutzeroberfläche bietet.

Seite 69 von 169


Abbildung 11 Anzeigen der aktuellen DNS-Einstellungen über die Windows-
Benutzeroberfläche
Bild maximieren
Bei Skripts, die WMI verwenden, bietet die Klasse Win32_NetworkAdapterConfiguration
mehrere Eigenschaften, die Ihnen das Erstellen von Skripts für die DNS-Clientkonfiguration
ermöglichen. In Tabelle 13 werden diese DNS-Eigenschaften beschrieben.

Tabelle 13 DNS-Eigenschaften von "Win32_NetworkAdapterConfiguration"


Eigenschaft Typ Beschreibung
DNSDomain Zeichenfolge Der Organisationsname, gefolgt von einem
Punkt und einer Erweiterung, die den Typ
der Organisation angibt, z. B.
microsoft.com. Der Name kann aus einer
beliebigen Kombination der Buchstaben
A–Z, der Ziffern 0–9 sowie des
Bindestrichs (-) bestehen; dazu kommt der
Punkt (.) als Trennzeichen.
Beispiel: "microsoft.com"
DNSDomainSuffixSearchOrder Zeichenfolge Durch Leerzeichen getrennte Liste der
DNS-Domänensuffixe, die während der
Namensauflösung an Hostnamen
angehängt werden. Wenn ein
vollqualifizierter Domänenname (FQDN)
von einem Hostnamen aufgelöst wird, wird
der lokale Domänenname angehängt. Falls
der Domänenname nicht angehängt werden
kann, werden anhand der
Seite 70 von 169
Domänensuffixliste zusätzliche FQDNs in
der aufgelisteten Reihenfolge erstellt und
die DNS-Server für jeden einzelnen
abgefragt.
Beispiel: "samples.microsoft.com
example.microsoft.com"
DNSEnabledForWINSResolutionBoolean-Wert TRUE gibt an, dass DNS für die
Namensauflösung über WINS (Windows
Internet Name Service) aktiviert ist. Wenn
der Name mithilfe von DNS nicht
aufgelöst werden kann, wird die
Anforderung an WINS weitergeleitet.
DNSHostName Zeichenfolge Der Hostname, der zum Identifizieren des
lokalen Computers für die
Authentifizierung durch einige
Dienstprogramme verwendet wird. Andere
TCP/IP-basierte Dienstprogramme können
diesen Wert verwenden, um den Namen
des lokalen Computers zu ermitteln. Die
Hostnamen werden auf DNS-Servern in
einer Tabelle gespeichert, die Namen IP-
Adressen zur Verwendung durch DNS
zuordnet. Der Name kann aus einer
beliebigen Kombination der Buchstaben
A–Z, der Ziffern 0–9 sowie des
Bindestrichs (-) bestehen; dazu kommt der
Punkt (.) als Trennzeichen. Standardmäßig
ist dieser Wert der Microsoft-
Netzwerkcomputername; der
Netzwerkadministrator kann jedoch einen
anderen Hostnamen zuweisen, ohne den
Computernamen zu ändern.
Beispiel: "corpdns"
DNSServerSearchOrder ZeichenfolgenarrayArray von Server-IP-Adressen, die für
DNS-Serverabfragen verwendet werden.
DomainDNSRegistrationEnabled Boolean-Wert TRUE gibt an, dass die IP-Adressen für
diese Verbindung in DNS – zusätzlich zu
ihrer Registrierung unter dem vollständigen
DNS-Namen des Computers – unter dem
Domänennamen der Verbindung registriert
sind. Der Domänenname der Verbindung
wird mithilfe der SetDNSDomain()-
Methode festgelegt oder durch DHCP
zugewiesen. Der registrierte Name ist der
Hostname des Computers mit dem
angehängten Domänennamen. Diese
Eigenschaft ist neu bei Windows XP.

Seite 71 von 169


FullDNSRegistrationEnabled Boolean-Wert TRUE gibt an, dass die IP-Adressen für
diese Verbindung in DNS unter dem
vollständigen DNS-Namen des Computers
registriert sind. Der vollständige DNS-
Name des Computers wird auf der
Registerkarte Netzwerkidentifikation der
Anwendung System in der
Systemsteuerung angezeigt. Diese
Eigenschaft ist neu bei Windows XP.
Alle Eigenschaften in der vorstehenden Tabelle sind schreibgeschützt.
In Tabelle 14 werden die Win32_NetworkAdapterConfiguration-Methoden zum Erstellen von
Skripts für die DNS-Clientkonfiguration beschrieben.

Tabelle 14 DNS-Methoden von "Win32_NetworkAdapterConfiguration"


Methode Parameter Beschreibung
EnableDNS DNSHostName – Zeichenfolge Aktiviert DNS auf dem Client.
DNSDomain – Zeichenfolge
DNSServerSearchOrder – Array
von Zeichenfolgen
DNSDomainSuffixSearchOrder
– Zeichenfolge
SetDNSDomain DNSDomain – Zeichenfolge Ermöglicht das Festlegen der
DNS-Domäne. Dieser
instanzabhängige
Methodenaufruf gilt auf
Adapterbasis. Unter Windows
2000 gilt die Einstellung für den
Zieladapter. Unter Windows NT
4.0 ist diese Einstellung global.
SetDNSServerSearchOrder DNSServerSearchOrder – Array Verwendet ein Array von
von Zeichenfolgen Zeichenfolgenelementen zum
Festlegen der Suchreihenfolge für
Server. Wenn Sie alle DNS-
Server aus der Suchreihenfolge
entfernen möchten, müssen Sie
Null statt einer leeren
Zeichenfolge verwenden. Dieser
instanzabhängige
Methodenaufruf gilt auf
Adapterbasis. Nachdem statische
DNS-Server angegeben wurden,
um die Verwendung von DHCP
statt statischer DNS-Server
einzuleiten, können Sie die
Methode aufrufen, ohne
Parameter für "in" angeben zu
müssen. Unter Windows 2000
gilt die Einstellung für den
Seite 72 von 169
Zieladapter. Unter Windows NT
4.0 ist die Einstellung global.
SetDNSSuffixSearchOrder DNSDomainSuffixSearchOrder Statische Methode. Verwendet
– Zeichenfolge ein Array von
Zeichenfolgenelementen zum
Festlegen der Suchreihenfolge für
Suffixe. Nur unter Windows NT:
Dieser instanzabhängige
Methodenaufruf gilt für alle
Adapter.
SetDynamicDNSRegistrationFullDNSRegistrationEnabled – Gibt den Modus der dynamischen
Boolean-Wert DNS-Registrierung von IP-
DomainDNSRegistrationEnabledAdressen für den IP-Adapter an.
– Boolean-Wert
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.
Das folgende Skript, Dnssettings.vbs, gibt die DNS-Einstellungen aus, die von der Klasse
Win32_NetworkAdapterConfiguration bereitgestellt werden. In diesem Fall wird die
DNSEnabledForWINSResolution-Eigenschaft, die nur bei Verwendung der NetBIOS-
Namensauflösung sinnvoll ist, in das Einstellungsskript einbezogen, das im Abschnitt zu WINS
dieses Dokumentes beschrieben wird. Unter Windows Server 2003 können Sie den Hostnamen
auch der DNSHostName-Eigenschaft der Klasse Win32_ComputerSystem entnehmen. Unter
älteren Betriebssystemen gibt diese Name-Eigenschaft möglicherweise den NetBIOS-Namen
zurück, wenn er anders als der DNS-Name lautet; dies hängt von der Client- und
Netzwerkkonfiguration ab.

Schritte zur Skripterstellung


Das Skript in Listing 28 zeigt die DNS-Clienteinstellungen 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, 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

Seite 73 von 169


= 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.Weisen Sie die Win32_NetworkAdapterConfiguration-Eigenschaften DNSHostName,
Index, Description, DNSDomain, DomainDNSRegistrationEnabled und
FullDNSRegistrationEnabled Variablen zu.
6.Führen Sie eine Iteration durch die von den Eigenschaften DNSDomainSuffixSearchOrder
und DNSServerSearchOrder zurückgegebenen Arrays durch, und konvertieren Sie sie in
formatierte Zeichenfolgen.
7.Verketten Sie die Variablen und Bezeichnungen in eine Zeichenfolge. Verketten Sie bei jeder
Iteration durch einen anderen Netzwerkadapter die zugehörigen Zeichenfolgen mit der
ursprünglichen Zeichenfolge.
8.Zeigen Sie den Hostnamen und die Einstellungen für jeden Adapter an.

Listing 28 Dnssettings.vbs

Seite 74 von 169


1 On Error Resume Next
2
3 strComputer = "."
4 Set objWMIService = GetObject("winmgmts:" _
5 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
6 Set colNicConfigs = objWMIService.ExecQuery _
7 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
8
9 For Each objNicConfig In colNicConfigs
10 strDNSSuffixSO = ""
11 strDNSServerSO = ""
12 strDNSHostName = objNicConfig.DNSHostName
13 strIndex = objNicConfig.Index
14 strDescription = objNicConfig.Description
15 strDNSDomain = objNicConfig.DNSDomain
16 strDNSSuffixSO = ""
17 If Not IsNull(objNicConfig.DNSDomainSuffixSearchOrder) Then
18 For Each strDNSSuffix In objNicConfig.DNSDomainSuffixSearchOrder
19 strDNSSuffixSO = strDNSSuffixSO & VbCrLf & String(37, " ") & _
20 strDNSSuffix
21 Next
22 End If
23 strDNSServerSO = ""
24 If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
25 For Each strDNSServer In objNicConfig.DNSServerSearchOrder
26 strDNSServerSO = strDNSServerSO & VbCrLf & String(37, " ") & _
27 strDNSServer
28 Next
29 End If
30 strDomainDNSRegistrationEnabled = _
31 objNicConfig.DomainDNSRegistrationEnabled
32 strFullDNSRegistrationEnabled = objNicConfig.FullDNSRegistrationEnabled
33 strDNSSettings = strDNSSettings & VbCrLf & VbCrLf & _
34 " Network Adapter " & strIndex & VbCrLf & _
35 " " & strDescription & VbCrLf & VbCrLf & _
36 " DNS Domain: " & strDNSDomain & VbCrLf & _
37 " DNS Domain Suffix Search Order:" & strDNSSuffixSO & VbCrLf & _
38 " DNS Server Search Order:" & strDNSServerSO & VbCrLf & _
39 " Domain DNS Registration Enabled: " & _
40 strDomainDNSRegistrationEnabled & VbCrLf & _
41 " Full DNS Registration Enabled: " & _
42 strFullDNSRegistrationEnabled
43
44Next
46
47 WScript.Echo VbCrLf & "DNS Settings" & VbCrLf & VbCrLf & _
48 "Host Name: " & strDNSHostName & strDNSSettings
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine
ähnliche Ausgabe wie die folgende angezeigt:
C:\scripts>dnssettings.vbs
DNS Settings
Host Name: client1
Network Adapter 1
3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet
Scheduler Miniport

Seite 75 von 169


DNS Domain:
DNS Domain Suffix Search Order:
DNS Server Search Order:
192.168.0.1
Domain DNS Registration Enabled:
Full DNS Registration Enabled:

Aktivieren von DNS


Für Situationen, in denen DNS auf Hosts aktiviert werden muss, z. B. bei der Aktualisierung
eines Netzwerks von einem anderen Namensauflösungssystem wie WINS, stellt die Klasse
Win32_NetworkAdapterConfiguration die EnableDNS()-Methode bereit.
Die Methode verwendet vier optionale Parameter: DNSHostName, DNSDomain,
DNSServerSearchOrder und DNSDomainSuffixSearchOrder. Die Datentypen der ersten
beiden sowie des letzten Parameters sind Zeichenfolgen; DNSServerSearchOrder ist ein Array
von Zeichenfolgen.
Die Klasse Win32_ComputerSystem umfasst eine Rename()-Methode, mit der Sie auch den
Computernamen ändern können. Zur Verwendung der Rename()-Methode müssen Sie der
lokalen Gruppe Administratoren angehören. Beachten Sie, dass mit dieser Methode keine
Remotehosts umbenannt werden können, die einer Domäne angehören. Diese Klasse stellt
außerdem die Methoden JoinDomainOrWorkgroup() und UnjoinDomainOrWorkgroup()
bereit. Alle drei Methoden sind neu bei Windows XP und Windows Server 2003.

Schritte zur Skripterstellung


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 29 aktiviert DNS für alle Netzwerkadapter auf einem Computer. Dabei
wird der Hostname auf client1, die DNS-Domäne auf fabrikam.com, die Suchreihenfolge für
DNS-Server als 192.168.0.1 und 192.168.0.2 sowie die Suffixe für die DNS-Suchreihenfolge als
fabrikam.com und na.fabrikam.com konfiguriert.
Führen Sie dazu die folgenden Schritte im Skript aus:
1.Erstellen Sie Variablen zur Angabe des Computernamens und der Parameter, der/die an die
EnableWINS-Methode übergeben werden soll(en).
2.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-
Namespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate"
fest.
3.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse
Win32_NetworkAdapterConfiguration, die nach den Instanzen gefiltert wird, bei denen IP
aktiviert ist.

Seite 76 von 169


Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem
Computer.
4.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben
aus.
5.Zeigen Sie die Indexnummer und Beschreibung für den Netzwerkadapter an.
6.Rufen Sie die EnableDNS-Methode auf, und übergeben Sie ihr die Variablen, die bereits mit
dem Hostnamen, der Domäne, der Suchreihenfolge für DNS-Server und der Suchreihenfolge
für DNS-Domänensuffixe initialisiert wurden.
7.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine
Erfolgsnachricht oder eine Fehlermeldung an.
8.Fragen Sie die Klasse Win32_NetworkAdapterConfiguration erneut ab, und zeigen Sie die
Konfiguration nach dem Vorgang an.

Listing 29 Dns-enable.vbs

Seite 77 von 169


1 On Error Resume Next
2
3 strComputer = "."
4 strDNSHostName = "client1"
5 strDNSDomain = "fabrikam.com"
6 arrDNSServerSearchOrder = Array("192.168.0.1", "192.168.0.2")
7 arrDNSDomainSuffixSearchOrder = Array("hr.fabrikam.com", "contoso.com")
8
9 Set objWMIService = GetObject("winmgmts:" _
10 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
11Set objNicConf = objWMIService.Get("Win32_NetworkAdapterConfiguration")
12
13 WScript.Echo VbCrLf & "DNS Host Name: " & strDNSHostName & VbCrLf & _
14 " Attempting to enable DNS"
15intEnableDNS = objNicConf.EnableDNS(strDNSHostName, strDNSDomain, _
16 arrDNSServerSearchOrder, arrDNSDomainSuffixSearchOrder)
17If intEnableDNS = 0 Then
18 WScript.Echo " Successfully enabled DNS."
19ElseIf intEnableDNS = 1 Then
20 WScript.Echo " Successfully enabled DNS." & VbCrLf & " Must reboot."
21Else
22 WScript.Echo " Unable to enable DNS."
23End If
24
25 WScript.Echo VbCrLf & String(80,"-")
26
27 Set colNicConfigs = objWMIService.ExecQuery _
28 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
29
30 For Each objNicConfig In colNicConfigs
31 strDNSHostName = objNicConfig.DNSHostName
32Next
33WScript.Echo VbCrLf & "DNS Host Name: " & strDNSHostName
34
35 For Each objNicConfig In colNicConfigs
36 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index & _
37 VbCrLf & " " & objNicConfig.Description
38 WScript.Echo " DNS Domain: " & objNicConfig.DNSDomain
39 WScript.Echo " DNS Server Search Order:"
40 If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
41 For Each strDNSServer In objNicConfig.DNSServerSearchOrder
42 WScript.Echo " " & strDNSServer
43 Next
44 End If
45 WScript.Echo " DNS Domain Suffix Search Order:"
46 If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
47 For Each strDNSDomainSuffix In objNicConfig.DNSDomainSuffixSearchOrder
48 WScript.Echo " " & strDNSDomainSuffix
49 Next
50 End If
51Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine
ähnliche Ausgabe wie die folgende angezeigt:
C:\scripts>dns-enable.vbs
DNS Host Name: client1
Attempting to enable DNS
Unable to enable DNS.

Seite 78 von 169


--------------------------------------------------------------------------------
DNS Host Name: client1
Network Adapter 1
3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet
Scheduler Miniport
DNS Domain:
DNS Server Search Order:
192.168.0.1
DNS Domain Suffix Search Order:
hr.fabrikam.com
contoso.com

Ändern der Suchreihenfolge für DNS-Server


Wenn Sie die DNS-Server für einen Client nicht mithilfe von DHCP ermitteln, können Sie jeden
Client mit einer Liste eines oder mehrerer DNS-Server, geordnet nach Priorität, konfigurieren,
um ihn für die DNS-Namensauflösung einzusetzen. Die Klasse
Win32_NetworkAdapterConfiguration stellt die DNSServerSearchOrder-Eigenschaft, in der
die Liste in einem Array von Zeichenfolgen enthalten ist, sowie die
SetDNSServerSearchOrder-Methode zur Änderung dieser Eigenschaft bereit.
Für die Eigenschaft und Methode ist der erste Server in der Liste der primäre DNS-Server für
den Netzwerkadapter. Mithilfe dieser Methode können Sie die Liste der DNS-Server durch eine
neue Liste ersetzen, oder Sie können ein oder mehrere Mitglieder an einer beliebigen Position
entfernen oder ersetzen. Die Verfahren zur Skripterstellung für diese Änderungen sind je nach
der auszuführenden Variation unterschiedlich. Wenn Sie alle DNS-Server aus der
Suchreihenfolge entfernen möchten, müssen Sie Null statt einer leeren Zeichenfolge verwenden.
In diesem Abschnitt werden die Schritte zur Skripterstellung und Beispielskripts für diese
Aufgaben bereitgestellt:

Ersetzen der gesamten Liste mit der Suchreihenfolge für DNS-Server

Ersetzen eines DNS-Servers durch einen anderen DNS-Server

Hinzufügen eines DNS-Servers am Ende oder Anfang der Suchreihenfolge

Ersetzen der Liste mit der Suchreihenfolge für DNS-Server


Wenn die Suchreihenfolge für DNS-Server geändert werden muss, besteht die einfachste
Alternative darin, die gesamte Liste durch eine neue Liste mit der Suchreihenfolge zu ersetzen.

Schritte zur Skripterstellung

Seite 79 von 169


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.
Bei jedem Netzwerkadapter ersetzt das Skript in Listing 30 die aktuelle Suchreihenfolge für
DNS-Server durch eine neue Liste.
1.Erstellen Sie eine Variable zur Angabe des Computernamens.
2.Weisen Sie IP-Adressen einem Array zu, das die neue Suchreihenfolge für DNS-Server
darstellt. Beachten Sie, dass Sie zum Entfernen aller DNS-Server aus der Suchreihenfolge den
Wert Null statt einer leeren Zeichenfolge verwenden müssen.
3.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-
Namespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate"
fest.
4.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.
5.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben
aus.
6.Zeigen Sie den Index und die aktuelle Liste mit der Suchreihenfolge für DNS-Server des
Netzwerkadapters an.
7.Rufen Sie die SetDNSServerSearchOrder-Methode der Klasse
Win32_NetworkAdapterConfiguration auf, und übergeben Sie ihr als Parameter das Array
von IP-Adressen, das die neue Suchreihenfolge für DNS-Server darstellt.
8.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine
Erfolgsnachricht oder eine Fehlermeldung an.
9.Fragen Sie die Klasse Win32_NetworkAdapterConfiguration erneut ab, und zeigen Sie die
neue Suchreihenfolge für DNS-Server an.

Listing 30 Dns-replaceserverlist.vbs

Seite 80 von 169


1 On Error Resume Next
2
3 strComputer = "."
4 arrNewDNSServerSearchOrder = Array("192.168.0.1", "192.168.0.2")
5
6 Set objWMIService = GetObject("winmgmts:" _
7 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
8 Set colNicConfigs = objWMIService.ExecQuery _
9 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
10
11 WScript.Echo VbCrLf & "Computer: " & strComputer
12
13 For Each objNicConfig In colNicConfigs
14 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index
15 WScript.Echo " DNS Server Search Order - Before:"
16 If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
17 For Each strDNSServer In objNicConfig.DNSServerSearchOrder
18 WScript.Echo " " & strDNSServer
19 Next
20 End If
21 intSetDNSServers = _
22 objNicConfig.SetDNSServerSearchOrder(arrNewDNSServerSearchOrder)
23 If intSetDNSServers = 0 Then
24 WScript.Echo " Replaced DNS server search order list."
25 Else
26 WScript.Echo " Unable to replace DNS server search order list."
27 End If
28Next
29
30 WScript.Echo VbCrLf & String(80, "-")
31
32 Set colNicConfigs = objWMIService.ExecQuery _
33 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
34
35 For Each objNicConfig In colNicConfigs
36 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index
37 WScript.Echo " DNS Server Search Order - After:"
38 If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
39 For Each strDNSServer In objNicConfig.DNSServerSearchOrder
40 WScript.Echo " " & strDNSServer
41 Next
42 End If
43Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine
ähnliche Ausgabe wie die folgende angezeigt:
C:\scripts>dns-replaceserverlist.vbs
Computer: .
Network Adapter 1
DNS Server Search Order - Before:
192.168.0.1
Replaced DNS server search order list.
--------------------------------------------------------------------------------
Network Adapter 1

Seite 81 von 169


DNS Server Search Order - After:
192.168.0.1
192.168.0.2

Ersetzen eines DNS-Servers durch einen anderen


Wenn nur ein DNS-Server geändert wurde und die anderen DNS-Server weiterhin gültig sind,
können Sie die IP-Adresse des alten Servers einfach durch die IP-Adresse des neuen Servers
ersetzen und die Adresse an derselben Position in der Suchreihenfolge beibehalten. Dies wird
möglicherweise erforderlich, wenn ein auf alter Hardware ausgeführter DNS-Server durch einen
neuen Computer ersetzt wird. Nach Abschluss der Änderung müssen die Clients des ersetzten
Servers mit der IP-Adresse des neuen Servers neu konfiguriert werden.

Schritte zur Skripterstellung


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 31 überprüft, ob sich die IP-Adresse eines bestimmten Servers in der Liste
mit der Suchreihenfolge für DNS-Server (in einem Zeichenfolgenarray der
DNSServerSearchOrder-Eigenschaft enthalten) für jede Netzwerkadapterkonfiguration auf
einem Computer befindet. Wird die IP-Adresse gefunden, wird sie durch das Skript entfernt und
stattdessen die IP-Adresse des neuen Servers mithilfe der SetDNSServerSearchOrder-Methode
hinzugefügt.
1.Erstellen Sie eine Variable zur Angabe des Computernamens.
2.Weisen Sie IP-Adressen den Variablen zu, die für den alten zu ersetzenden DNS-Server und
den neuen Server stehen.
3.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-
Namespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf
"impersonate" fest.
4.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.
5.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben
aus.
6.Zeigen Sie den Index und die aktuelle Liste mit der Suchreihenfolge für DNS-Server des
Netzwerkadapters an.
7.Führen Sie eine Iteration durch die Liste der IP-Adressen des DNS-Servers mit einer For-
Schleife durch. Wenn die zu ersetzende IP-Adresse gefunden wird, ersetzen Sie sie durch die
neue IP-Adresse, und setzen Sie ein boolesches Flag.

Seite 82 von 169


8.Wenn das Flag auf True gesetzt ist, rufen Sie die SetDNSServerSearchOrder-Methode der
Klasse Win32_NetworkAdapterConfiguration auf, und übergeben Sie ihr als Parameter das
aktualisierte Array von IP-Adressen, das die neue Suchreihenfolge für DNS-Server darstellt.
9.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine
Erfolgsnachricht oder eine Fehlermeldung an.
10.Wenn die zu ersetzende IP-Adresse nicht gefunden wird, zeigen Sie eine Meldung an.
11.Fragen Sie die Klasse Win32_NetworkAdapterConfiguration erneut ab, und zeigen Sie die
neue Suchreihenfolge für DNS-Server an.

Listing 31 Dns-replaceserver.vbs

Seite 83 von 169


1 On Error Resume Next
2
3 strComputer = "."
4 strOldDNSServer = "192.168.0.2"
5 strNewDNSServer = "192.168.0.5"
6
7 Set objWMIService = GetObject("winmgmts:" _
8 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
9 Set colNicConfigs = objWMIService.ExecQuery _
10 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
11
12 WScript.Echo VbCrLf & "Computer: " & strComputer
13
14 For Each objNicConfig In colNicConfigs
15 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index
16 arrDNSServerSearchOrder = objNicConfig.DNSServerSearchOrder
17 WScript.Echo " DNS Server Search Order - Before:"
18 If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
19 For Each strDNSServer In objNicConfig.DNSServerSearchOrder
20 WScript.Echo " " & strDNSServer
21 Next
22 End If
23 blnFound = 0
24 For i = 0 to UBound(arrDNSServerSearchOrder)
25 If arrDNSServerSearchOrder(i) = strOldDNSServer Then
26 arrDNSServerSearchOrder(i) = strNewDNSServer
27 blnFound = 1
28 End If
29 Next
30 If blnFound Then
31 retSetDNS =
32objNicConfig.SetDNSServerSearchOrder(arrDNSServerSearchOrder)
33 If retSetDNS = 0 Then
34 WScript.Echo " Replaced " & strOldDNSServer & " with " & _
35 strNewDNSServer & " in DNS search order."
36 Else
37 WScript.Echo " Unable to change DNS server search order."
38 End If
39 Else
40 WScript.Echo " DNS server " & strOldDNSServer & " not found."
41 End If
42Next
43
44 WScript.Echo VbCrLf & String(80, "-")
45
46 Set colNicConfigs = objWMIService.ExecQuery _
47 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
48
49 For Each objNicConfig In colNicConfigs
50 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index
51 WScript.Echo " DNS Server Search Order - After:"
52 If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
53 For Each strDNSServer In objNicConfig.DNSServerSearchOrder
54 WScript.Echo " " & strDNSServer
55 Next
56 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>dns-replaceserver.vbs

Seite 84 von 169


Computer: .
Network Adapter 1
DNS Server Search Order - Before:
192.168.0.3
192.168.0.1
192.168.0.2
192.168.0.4
Replaced 192.168.0.2 with 192.168.0.5 in DNS search order.
--------------------------------------------------------------------------------
Network Adapter 1
DNS Server Search Order - After:
192.168.0.3
192.168.0.1
192.168.0.5
192.168.0.4

Hinzufügen eines DNS-Servers am Ende der Suchreihenfolge


Statt in der Liste mit der Suchreihenfolge für DNS-Server die IP-Adresse eines alten DNS-
Servers durch die IP-Adresse eines neuen Servers zu ersetzen, können Sie den neuen Server am
Ende der Liste hinzufügen. Dieses Skript zeigt die dazu erforderliche Vorgehensweise.

Schritte zur Skripterstellung


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 32 fügt einen neuen DNS-Server am Ende der Liste mit der
Suchreihenfolge für DNS-Server für jede Netzwerkadapterkonfiguration auf einem Computer
hinzu.
1.Erstellen Sie eine Variable zur Angabe des Computernamens.
2.Weisen Sie der Variablen, die für den neuen DNS-Server steht, eine neue IP-Adresse zu.
3.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-
Namespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf
"impersonate" fest.
4.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse
Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE

Seite 85 von 169


IPEnabled = True" gefiltert wird.
Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem
Computer, für die IP aktiviert ist.
5.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben
aus.
6.Erstellen Sie die Variable intNewArraySize, und setzen Sie sie am Anfang der Schleife auf
0, um Werte aus vorherigen Iterationen zu löschen.
7.Zeigen Sie den Index und die aktuelle Liste mit der Suchreihenfolge für DNS-Server des
Netzwerkadapters an.
8.Weisen Sie das von der DNSServerSearchOrder-Eigenschaft zurückgegebene Array der
Variablen arrDNSServerSearchOrder zu.
9.Dimensionieren Sie arrDNSServerSearchOrder in Zeile 22 (mit der VBScript-Anweisung
ReDim) neu, wobei Sie die Anzahl der Arrayelemente um 1 inkrementieren, um die neue IP-
Adresse des DNS-Servers bereitzustellen. Beachten Sie, dass die von der ReDim-Anweisung
in VBScript verwendete Zahl um 1 niedriger als die resultierende Arraygröße ist.
10.Weisen Sie die IP-Adresse des neuen DNS-Servers dem letzten Arrayelement zu.
11.Rufen Sie die SetDNSServerSearchOrder-Methode der Klasse
Win32_NetworkAdapterConfiguration auf, und übergeben Sie ihr das geänderte Array von
IP-Adressen.
12.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine
Erfolgsnachricht oder eine Fehlermeldung an.
13.Fragen Sie die Klasse Win32_NetworkAdapterConfiguration erneut ab, und zeigen Sie die
neue Suchreihenfolge für DNS-Server an.

Listing 32 Dns-addserver-end.vbs

Seite 86 von 169


1 On Error Resume Next
2
3 strComputer = "."
4 strNewDNSServer = "192.168.0.4"
5
6 Set objWMIService = GetObject("winmgmts:" _
7 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
8 Set colNicConfigs = objWMIService.ExecQuery _
9 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
10
11 WScript.Echo VbCrLf & "Computer: " & strComputer
12
13 For Each objNicConfig In colNicConfigs
14 intNewArraySize = 0
15 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index
16 arrDNSServerSearchOrder = objNicConfig.DNSServerSearchOrder
17 WScript.Echo " DNS Server Search Order - Before:"
18 If Not IsNull(arrDNSServerSearchOrder) Then
19 For Each strDNSServer In arrDNSServerSearchOrder
20 WScript.Echo " " & strDNSServer
21 Next
22 End If
23 WScript.Echo " Adding " & strNewDNSServer & " to end of " & _
24 "DNS search order."
25 intNewArraySize = UBound(arrDNSServerSearchOrder) + 1
26 ReDim Preserve arrDNSServerSearchOrder(intNewArraySize)
27 arrDNSServerSearchOrder(intNewArraySize) = strNewDNSServer
28 intSetDNS = _
29 objNicConfig.SetDNSServerSearchOrder(arrDNSServerSearchOrder)
30 If intSetDNS = 0 Then
31 WScript.Echo " Added " & strNewDNSServer & _
32 " to end of DNS search order."
33 Else
34 WScript.Echo " Unable to change DNS server search order."
35 End If
36Next
37
38 WScript.Echo VbCrLf & String(80, "-")
39
40 Set colNicConfigs = objWMIService.ExecQuery _
41 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
42
43 For Each objNicConfig In colNicConfigs
44 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index
45 WScript.Echo " DNS Server Search Order - After:"
46 If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
47 For Each strDNSServer In objNicConfig.DNSServerSearchOrder
48 WScript.Echo " " & strDNSServer
49 Next
50 End If
51Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine
ähnliche Ausgabe wie die folgende angezeigt:
C:\scripts>dns-addserver-end.vbs
Computer: .
Network Adapter 1
DNS Server Search Order - Before:

Seite 87 von 169


192.168.0.1
192.168.0.2
Adding 192.168.0.4 to end of DNS search order.
Added 192.168.0.4 to end of DNS search order.
--------------------------------------------------------------------------------
Network Adapter 1
DNS Server Search Order - After:
192.168.0.1
192.168.0.2
192.168.0.4

Hinzufügen eines DNS-Servers am Anfang der Suchreihenfolge


Wenn Sie einen neuen DNS-Server am Anfang der Liste mit der Suchreihenfolge hinzufügen
möchten, sind die dazu erforderlichen Schritte im folgenden Skript enthalten. In diesem Fall
besteht die wichtigste Änderung darin, die eine Codezeile, mit der eine neue IP-Adresse am
Ende des Arrays in Dns-addserver-end.vbs (Zeile 21) hinzugefügt wird, durch vier Zeilen zu
ersetzen, die jedes Element im Array nach unten verschieben und die neue IP-Adresse am
Anfang hinzuzufügen (Zeilen 21–24).

Schritte zur Skripterstellung


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 33 fügt einen neuen DNS-Server am Anfang der Liste mit der
Suchreihenfolge für DNS-Server für jede Netzwerkadapterkonfiguration auf einem Computer
hinzu.
1.Erstellen Sie eine Variable zur Angabe des Computernamens.
2.Weisen Sie der Variablen, die für den neuen DNS-Server steht, eine neue IP-Adresse zu.
3.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-
Namespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf
"impersonate" fest.
4.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.
5.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben

Seite 88 von 169


aus.
6.Erstellen Sie die Variable intNewArraySize, und setzen Sie sie am Anfang der Schleife auf
0, um Werte aus vorherigen Iterationen zu löschen.
7.Zeigen Sie den Index und die aktuelle Liste mit der Suchreihenfolge für DNS-Server des
Netzwerkadapters an.
8.Weisen Sie das von der DNSServerSearchOrder-Eigenschaft zurückgegebene Array der
Variablen arrDNSServerSearchOrder zu.
9.Dimensionieren Sie arrDNSServerSearchOrder in Zeile 22 (mit der VBScript-Anweisung
ReDim) neu, wobei Sie die Anzahl der Arrayelemente um 1 inkrementieren, um die neue IP-
Adresse des DNS-Servers bereitzustellen. Beachten Sie, dass die von der ReDim-Anweisung
in VBScript verwendete Zahl um 1 niedriger als die resultierende Arraygröße ist.
10.Durchlaufen Sie alle Arrayelemente mit Ausnahme des letzten (des neuen Elements, das
weiterhin leer ist) in einer Schleife, und weisen Sie jedes Element dem folgenden Element im
Array zu. Damit wird das gesamte Array um einen Schritt nach unten verschoben.
11.Weisen Sie die IP-Adresse des neuen DNS-Servers dem ersten Arrayelement (mit dem Index
0) zu.
12.Rufen Sie die SetDNSServerSearchOrder-Methode der Klasse
Win32_NetworkAdapterConfiguration auf, und übergeben Sie ihr das geänderte Array von
IP-Adressen.
13.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine
Erfolgsnachricht oder eine Fehlermeldung an.
14.Fragen Sie die Klasse Win32_NetworkAdapterConfiguration erneut ab, und zeigen Sie die
neue Suchreihenfolge für DNS-Server an.

Listing 33 Dns-addserver-top.vbs

Seite 89 von 169


1 On Error Resume Next
2
3 strComputer = "."
4 strNewDNSServer = "192.168.0.3"
5
6 Set objWMIService = GetObject("winmgmts:" _
7 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
8 Set colNicConfigs = objWMIService.ExecQuery _
9 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
10
11 WScript.Echo VbCrLf & "Computer: " & strComputer
12
13 For Each objNicConfig In colNicConfigs
14 intNewArraySize = 0
15 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index
16 arrDNSServerSearchOrder = objNicConfig.DNSServerSearchOrder
17 WScript.Echo " DNS Server Search Order - Before:"
18 If Not IsNull(arrDNSServerSearchOrder) Then
19 For Each strDNSServer In arrDNSServerSearchOrder
20 WScript.Echo " " & strDNSServer
21 Next
22 End If
23 WScript.Echo " Adding " & strNewDNSServer & " to top of " & _
24 "DNS search order."
25 intNewArraySize = UBound(arrDNSServerSearchOrder) + 1
26 ReDim Preserve arrDNSServerSearchOrder(intNewArraySize)
27 For i = (intNewArraySize - 1) To 0 Step -1
28 arrDNSServerSearchOrder(i + 1) = arrDNSServerSearchOrder(i)
29 Next
30 arrDNSServerSearchOrder(0) = strNewDNSServer
31 intSetDNS = objNicConfig.SetDNSServerSearchOrder(arrDNSServerSearchOrder)
32 If intSetDNS = 0 Then
33 WScript.Echo " Added " & strNewDNSServer & _
34 " to top of DNS search order."
35 Else
36 WScript.Echo " Unable to change DNS server search order."
37 End If
38Next
39
30 WScript.Echo VbCrLf & String(80, "-")
41
42 Set colNicConfigs = objWMIService.ExecQuery _
43 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
44
45 For Each objNicConfig In colNicConfigs
46 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index
47 WScript.Echo " DNS Server Search Order - After:"
48 If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
49 For Each strDNSServer In objNicConfig.DNSServerSearchOrder
50 WScript.Echo " " & strDNSServer
51 Next
52 End If
53Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine
ähnliche Ausgabe wie die folgende angezeigt:
C:\scripts>dns-addserver-top.vbs
Computer: .
Network Adapter 1

Seite 90 von 169


DNS Server Search Order - Before:
192.168.0.1
192.168.0.2
192.168.0.4
Adding 192.168.0.3 to top of DNS search order.
Added 192.168.0.3 to top of DNS search order.
--------------------------------------------------------------------------------
Network Adapter 1
DNS Server Search Order - After:
192.168.0.3
192.168.0.1
192.168.0.2
192.168.0.4

Ändern der DNS-Domäne


Manchmal müssen Sie die DNS-Domäne auf mehreren Clients ändern – beispielsweise, wenn
Sie eine untergeordnete Domäne hinzufügen oder zwei Domänen zusammenführen. Wenn dies
viele oder weit verstreute Clients betrifft, kann die Skripterstellung eine zeitsparende und
fehlerreduzierende Alternative zur manuellen Konfiguration sein.
In Windows 2000, Windows XP und Windows Server 2003 können Sie mithilfe der
SetDNSDomain()-Methode der Klasse Win32_NetworkAdapterConfiguration die DNS-
Domäne für einen bestimmten Netzwerkadapter festlegen. Sie müssen dieser Methode einen
einzigen Parameter – eine Zeichenfolge zur Angabe des Namens der neuen DNS-Domäne –
übergeben. Unter Windows NT Server 4.0 gilt die Win32_NetworkAdapterConfiguration-
Einstellung global für alle Netzwerkadapter.
Unter Windows XP und Windows Server 2003 ermöglichen es Ihnen die
Win32_ComputerSystem-Methoden JoinDomainOrWorkgroup() und
UnjoinDomainOrWorkgroup(), einen Computer einer Active Directory-Domäne hinzuzufügen
oder aus ihr zu entfernen. Bei diesen Methoden gelten die Änderungen für alle Netzwerkadapter.
Wenn Sie die gleichen Änderungen über die Windows XP-Benutzeroberfläche vornehmen
möchten, können Sie dazu den Assistenten für die Netzwerkanmeldung verwenden.
Win32_ComputerSystem umfasst auch die Eigenschaften Domain und DomainRole zur
Rückgabe der Active Directory-Domänenmitgliedschaft sowie der Rolle, die der Computer dabei
spielt – z. B. "Mitglied der Domäne/Arbeitsgruppe" oder "Domänencontroller". Sie müssen die
Änderungen in DNS-Domänen möglicherweise mit entsprechenden Änderungen in Active
Directory koordinieren.

Ändern der DNS-Domäne bei "Win32_NetworkAdapterConfiguration"


Seite 91 von 169
Das folgende Skript zeigt, wie die SetDNSDomain()-Methode der Klasse
Win32_NetworkAdapterConfiguration verwendet wird, um die DNS-Domäne für alle
Netzwerkadapter festzulegen. Weil diese Methode auf Adapterbasis funktioniert, könnten Sie
damit auch die DNS-Domäne auf einem bestimmten Netzwerkadapter festlegen.

Schritte zur Skripterstellung


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.
1.Erstellen Sie eine Variable zur Angabe des Computernamens.
2.Erstellen Sie eine Variable zur Angabe des neuen DNS-Domänennamens.
3.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-
Namespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate"
fest.
4.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse
Win32_NetworkAdapterConfiguration.
Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem
Computer.
5.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben
aus.
6.Zeigen Sie den Index, die Beschreibung des DNS-Hostnamens und die aktuelle DNS-Domäne
des Netzwerkadapters an.
7.Rufen Sie die SetDNSDomain-Methode der Klasse Win32_NetworkAdapterConfiguration
auf, und übergeben Sie ihr die Variable mit dem neuen DNS-Domänennamen.
8.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine
Erfolgsnachricht oder eine Fehlermeldung an.
9.Fragen Sie die Klasse Win32_NetworkAdapterConfiguration erneut ab, und zeigen Sie die
neue DNS-Domäne an.
Listing 34 Dns-setdomain.vbs

Seite 92 von 169


1 On Error Resume Next
2
3 strComputer = "."
4 strDNSDomain = "fabrikam.com"
5
6 Set objWMIService = GetObject("winmgmts:" _
7 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
8 Set colNicConfigs = objWMIService.ExecQuery _
9 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
10
11 For Each objNicConfig In colNicConfigs
12 strDNSHostName = objNicConfig.DNSHostName
13Next
14WScript.Echo VbCrLf & "DNS Host Name: " & strDNSHostName
15
16 For Each objNicConfig In colNicConfigs
17 WScript.Echo VbCrLf & _
18 " Network Adapter " & objNicConfig.Index & VbCrLf & _
19 " " & objNicConfig.Description & VbCrLf & _
20 " DNS Domain - Before: " & objNicConfig.DNSDomain
21 intSetDomain = objNicConfig.SetDNSDomain(strDNSDomain)
22 If intSetDomain = 0 Then
23 WScript.Echo " Successfully set DNS domain to " & strDNSDomain
24 ElseIf intSetDomain = 1 Then
25 WScript.Echo " Successfully set DNS domain to " & strDNSDomain & _
26 VbCrLf & " Must reboot."
27 Else
28 WScript.Echo " Unable to set DNS domain."
29 End If
30Next
31
32 WScript.Echo VbCrLf & String(80, "-")
33
34 Set colNicConfigs = objWMIService.ExecQuery _
35 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
36
37 For Each objNicConfig In colNicConfigs
38 strDNSHostName = objNicConfig.DNSHostName
39Next
40WScript.Echo VbCrLf & "DNS Host Name: " & strDNSHostName
41
42For Each objNicConfig In colNicConfigs
43 WScript.Echo VbCrLf & _
44 " Network Adapter " & objNicConfig.Index & VbCrLf & _
45 " " & objNicConfig.Description & VbCrLf & _
46 " DNS Domain - After: " & objNicConfig.DNSDomain
47Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine
ähnliche Ausgabe wie die folgende angezeigt:
C:\scripts>dns-setdomain.vbs
DNS Host Name: client1
Network Adapter 1
3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet
Scheduler Miniport
DNS Domain - Before:

Seite 93 von 169


Successfully set DNS domain to fabrikam.com
--------------------------------------------------------------------------------
DNS Host Name: client1
Network Adapter 1
3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet
Scheduler Miniport
DNS Domain - After: fabrikam.com

Ändern der Domäne bei "Win32_ComputerSystem"


Das folgende Skript zeigt, wie die JoinDomainOrWorkgroup()-Methode der Klasse
Win32_ComputerSystem verwendet wird, um einen Computer einer Active Directory-Domäne
hinzuzufügen. Anders als bei der SetDNSDomain()-Methode der Klasse
Win32_NetworkAdapterConfiguration, die Änderungen nur auf jeden angegebenen Adapter
anwendet, gelten die hier vorgenommenen Änderungen für alle Netzwerkadapter.
Win32_ComputerSystem stellt auch eine UnjoinDomainOrWorkgroup()-Methode bereit.
Sowohl die JoinDomainOrWorkgroup()-Methode als auch die
UnjoinDomainOrWorkgroup()-Methode ist nur unter Windows XP und Windows Server 2003
verfügbar.
Sie müssen die Domänenänderungen möglicherweise mit den entsprechenden Änderungen in
Active Directory koordinieren.
In Tabelle 15 werden die fünf Parameter beschrieben, die von der
JoinDomainOrWorkgroup()-Methode akzeptiert werden.

Tabelle 15 Parameter für "JoinDomainOrWorkgroup()"


Parameter Beschreibung
Name Der Name der hinzufügenden Domäne oder Arbeitsgruppe. Darf nicht den
Wert NULL haben.
Kennwort Muss angegeben werden, wenn ein alternativer Username-Parameter
übergeben wird. Darf den Wert NULL haben, wenn kein Username-Parameter
übergeben wird.
Username NetBIOS-Name und -Benutzerkonto, im Format DOMÄNE\Benutzer. Wenn
der Wert dieses Parameters NULL ist, werden die Anmeldeinformationen
verwendet, unter denen das Skript ausgeführt wird.
AccountOU Optional. Darf den Wert NULL haben. Der vollständige Distinguished Name
der Active Directory-Organisationseinheit, z. B.
OU=HR,DC=fabrikam,DC=com.
FJoinOptions Eine Gruppe von Bitflags, die Optionen für das Hinzufügen einer Domäne oder
Arbeitsgruppe angeben. Wenn Sie diesen Parameter nicht festlegen, wird der
Standardwert 1 (Domäne beitreten) verwendet und der im ersten Parameter
angegebene Name als Arbeitsgruppe angenommen. Sie können 0 oder weitere
dieser Parameter gleichzeitig festlegen, indem Sie die erforderlichen Werte

Seite 94 von 169


mithilfe von der Bitoperation OR verknüpfen, wie das folgende Skript zeigt.
In Tabelle 16 werden die Werte für den Parameter FJoinOptions der
JoinDomainOrWorkgroup()-Methode beschrieben.

Tabelle 16 Werte für "FjoinOptions"


Wert: Wert Bedeutung
Dezimal
und Hex
1 Domäne beitreten Standard. Fügt einen Computer einer Domäne hinzu.
Falls dieser Wert nicht angegeben wird, wird der
&h00001 Computer einer Arbeitsgruppe hinzugefügt.
2 Kontenerstellung Erstellt ein Konto in einer Domäne.
&h00002
4 Kontenlöschung Löscht ein Konto, wenn eine Domäne vorhanden ist.
&h00004
16 Win9X-Update Der Beitrittsvorgang wird als Teil einer Aktualisierung
von Windows 95 oder Windows 98 auf Windows NT 4.0
&h00010 oder Windows 2000 durchgeführt.
32 Domänenbeitritt falls Fügt einen Computer einer neuen Domäne hinzu, auch
beigetreten wenn er bereits Mitglied einer Domäne ist.
&h00020
64 Unsicherer Beitritt Führt einen unsicheren Beitritt durch.
&h00040
128 Computerkennwort Das Kennwort für den Computer, nicht für den Benutzer,
weitergeleitet wird übergeben. Diese Option kann nur bei unsicheren
&h00080 Beitritten verwendet werden.
256 Zurückgestellter SPN-Satz Das Schreiben der Attribute SPN und DnsHostName auf
dem Computerobjekt sollte bis zum Umbenennen nach
&h00100 dem Beitritt zurückgestellt werden.
262144 Installationsaufruf Die APIs wurden während der Installation aufgerufen.
&h40000
Darüber hinaus enthält die Klasse Win32_ComputerSystem eine
UnjoinDomainOrWorkgroup()-Methode (ebenfalls neu bei Windows XP), die einen Computer
aus einer Domäne entfernt.

Schritte zur Skripterstellung


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.

Seite 95 von 169


Das Skript in Listing 35 ändert die Domäne global für das Computersystem.
1.Definieren Sie die Konstante JOIN_DOMAIN Mit dem Wert 1.
Hinweis
Beachten Sie, dass dieser Wert einen Computer einer Domäne nur dann hinzufügt, wenn er
nicht bereits Mitglied einer Domäne ist. Wenn Sie einen Computer, der bereits einer Domäne
hinzugefügt wurde, einer neuen Domäne hinzufügen möchten, erstellen Sie die Konstante
DOMAIN_JOIN_IF_JOINED mit dem Wert 32. Übergeben Sie die Konstante dann im
Aufruf der JoinDomainOrWorkgroup-Methode als letzten Parameter anstelle von
JOIN_DOMAIN.
2.Erstellen Sie eine Variable zur Angabe des Computernamens.
3.Erstellen Sie eine Variable zur Angabe des neuen DNS-Domänennamens.
4.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-
Namespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf
"impersonate" fest.
5.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse
Win32_ComputerSystem.
6.Die zurückgegebene Auflistung besteht aus allen Computersystemen auf dem Computer. Nur
ein Computersystem wird zurückgegeben.
7.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben
aus.
8.Zeigen Sie den Computernamen und die aktuelle Domäne an.
9.Rufen Sie die JoinDomainOrWorkgroup-Methode der Klasse Win32_ComputerSystem
auf, und übergeben Sie ihr zwei Parameter: die Variable zur Darstellung des neuen
Domänennamens und die Konstante JOIN_DOMAIN. Kennzeichnen Sie die Stellen für die
leeren optionalen Parameter durch Kommas.
10.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine
Erfolgsnachricht oder eine Fehlermeldung an.
11.Fragen Sie die Klasse Win32_ComputerSystem erneut ab, und zeigen Sie die geänderte
Domäne an.
12.Verwenden Sie eine Select Case-Anweisung, um die durch die DomainRole-Eigenschaft
zurückgegebene ganze Zahl in eine aussagekräftige Zeichenfolge zu konvertieren, und zeigen
Sie diese an.

Listing 35 Dns-setdomain-global.vbs

Seite 96 von 169


1 On Error Resume Next
2
3 Const JOIN_DOMAIN = 1
4 strComputer = "."
5 strDomainName = "fabrikam.com"
6
7 Set objWMIService = GetObject("winmgmts:" _
8 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
9 Set colCompSystems = objWMIService.ExecQuery _
10 ("SELECT * FROM Win32_ComputerSystem")
11
12 For Each objCompSystem In colCompSystems
13 WScript.Echo VbCrLf & "Computer Name: " & LCase(objCompSystem.Name)
14 WScript.Echo " Domain - Before: " & LCase(objCompSystem.Domain)
15 intJoinDomain = objCompSystem.JoinDomainOrWorkgroup(strDomainName,,,, _
16 JOIN_DOMAIN)
17 If intJoinDomain = 0 Then
18 WScript.Echo " Joined computer to " & strDomainName & " domain."
19 ElseIf intJoinDomain = 1 Then
20 WScript.Echo " Joined computer to " & strDomainName & " domain." & _
21 VbCrLf & " Must reboot."
22 Else
23 WScript.Echo " Unable to join computer to " & strDomainName & _
24 " domain."
25WScript.Echo "Return value of JoinDomainOrWorkgroup method: " &
26intJoinDomain
27 End If
28Next
29
30 WScript.Echo VbCrLf & String(80, "-")
31
32 Set colCompSystems = objWMIService.ExecQuery _
33 ("SELECT * FROM Win32_ComputerSystem")
34
35 For Each objCompSystem In colCompSystems
36 WScript.Echo VbCrLf & "Computer Name: " & LCase(objCompSystem.Name)
37 WScript.Echo " Domain - After: " & LCase(objCompSystem.Domain)
38 intDomainRole = objCompSystem.DomainRole
39 Select Case intDomainRole
40 Case 0 strDomainRole = "Standalone Workstation"
41 Case 1 strDomainRole = "Member Workstation"
42 Case 2 strDomainRole = "Standalone Server"
43 Case 3 strDomainRole = "Member Server"
44 Case 4 strDomainRole = "Backup Domain Controller"
45 Case 5 strDomainRole = "Primary Domain Controller"
46 Case Else strDomainRole = "Cannot determine domain role."
47 End Select
48 WScript.Echo " Domain Role: " & strDomainRole
Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine
ähnliche Ausgabe wie die folgende angezeigt:
C:\scripts>dns-setdomain-global.vbs
Computer Name: client1
Domain - Before:
Joined computer to fabrikam.com domain.
--------------------------------------------------------------------------------

Seite 97 von 169


Computer Name: client1
Domain - After: fabrikam.com
Domain Role: Member Workstation

Ändern der Suchreihenfolge für DNS-Domänensuffixe


Außer dem Ändern der DNS-Domäne eines Computers können Sie auch die Suchreihenfolge für
das DNS-Domänensuffix festlegen. Dies kann erforderlich sein, wenn der Host unvollständige
Namen auf DNS-Servern in mehr als einer Domäne auflösen muss. Eine derartige Situation
könnte eintreten, wenn ein Netzwerk mehrere sekundäre DNS-Server in unterschiedlichen
Domänen umfasst oder wenn bei einem mehrfach vernetzten Computer jeder Netzwerkadapter
einer anderen Domäne zugeordnet ist.
Das folgende Skript legt die DNS-Domänensuffixe fest, die denjenigen Namen entsprechen, die
Sie auf der Registerkarte DNS des Dialogfelds Erweiterte TCP/IP-Einstellungen im Textfeld
unter Diese DNS-Suffixe anhängen (in Reihenfolge) eingeben würden.
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.
SetDNSSuffixSearchOrder ist eine statische Methode, die für alle Instanzen der Klasse
Win32_NetworkAdapterConfiguration (also für alle IP-Netzwerkadapter) gilt. Dies bedeutet,
dass Sie die einfachere Get()-Methode des SwbemServices-Objekts (zurückgegeben durch den
vorherigen GetObject-Aufruf an den winmgmts:-Moniker) verwenden können, um ein Objekt
zur Darstellung der gesamten Klasse abzurufen, statt die komplexere ExecQuery()-Methode bei
einer WQL-Abfrage zu verwenden, um eine Auflistung von Objekten zur Darstellung von
Instanzen der Klasse abzurufen. Die Get()-Methode steht in Zeile 24:
Set objNetworkSettings =
objWMIService.Get("Win32_NetworkAdapterConfiguration")
Statt die SetDNSSuffixSearchOrder-Methode einfach ohne Parameter aufzurufen, wie bei
EnableDHCP, müssen Sie ihr ein Array von Zeichenfolgen mit den Suffixnamen übergeben.
Wenn Sie in einem Skript nur die SetDNSSuffixSearchOrder-Methode aufrufen müssten,
könnten Sie kompaktere Möglichkeiten der Bindung an die Klasse
Win32_NetworkAdapterConfiguration nutzen. Hier sind zwei Beispiele:
Set objNicConfig = GetObject("winmgmts:\\" & strComputer &_
"\root\cimv2:Win32_NetworkAdapterConfiguration")
Set objNicConfig = GetObject("winmgmts:").Get _
("Win32_NetworkAdapterConfiguration")
Das in einem bestimmten Kontext beste Verfahren ergibt sich oftmals aus Ihrem Programmierstil
oder den Organisationsstandards.

Schritte zur Skripterstellung


Das Skript in Listing 36 ersetzt die alte Liste mit der Suchreihenfolge für DNS-Domänensuffixe
durch eine neue Liste für alle Netzwerkadapter.
1.Erstellen Sie eine Variable zur Angabe des Computernamens.

Seite 98 von 169


2.Erstellen Sie eine Arrayvariable zur Angabe der Liste von DNS-Domänensuffixen.
3.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-
Namespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf
"impersonate" fest.
4.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.
5.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben
aus.
6.Überprüfen Sie, ob der Wert der DNSDomainSuffixSearchOrder-Eigenschaft nicht den
Wert Null hat.
7.Führen Sie eine Iteration durch das Array der Zeichenfolgen durch, die von der
DNSDomainSuffixSearchOrder-Eigenschaft zurückgegeben werden.
8.Verketten Sie die Arrayelemente in eine einzige Zeichenfolge.
9.Zeigen Sie die Zeichenfolge mit der Liste der DNS-Domänensuffixe in der richtigen
Reihenfolge an.
10.Rufen Sie die SetDNSSuffixSearchOrder-Methode der Klasse
Win32_NetworkAdapterConfiguration auf, und übergeben Sie ihr einen einzigen
Parameter: das Array mit der Liste der DNS-Domänensuffixe.
11.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine
Erfolgsnachricht oder eine Fehlermeldung an.
12.Fragen Sie die Klasse Win32_NetworkAdapterConfiguration erneut ab, und zeigen Sie die
geänderte Liste von DNS-Domänensuffixen an.
Listing 36 Dns-replacesuffixlist.vbs

Seite 99 von 169


1 On Error Resume Next
2
3 strComputer = "."
4 arrNewDNSSuffixSearchOrder = Array("hr.fabrikam.com", "contoso.com")
5
6 Set objWMIService = GetObject("winmgmts:" _
7 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
8 Set colNicConfigs = objWMIService.ExecQuery _
9 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
10
11 For Each objNicConfig In colNicConfigs
12 strDNSHostName = objNicConfig.DNSHostName
13Next
14WScript.Echo VbCrLf & "DNS Host Name: " & strDNSHostName
15
16 For Each objNicConfig In colNicConfigs
17 WScript.Echo VbCrLf & _
18 " Network Adapter " & objNicConfig.Index & VbCrLf & _
19 " " & objNicConfig.Description & VbCrLf & _
20 " DNS Domain Suffix Search Order - Before:"
21 If Not IsNull(objNicConfig.DNSDomainSuffixSearchOrder) Then
22 For Each strDNSSuffix In objNicConfig.DNSDomainSuffixSearchOrder
23 WScript.Echo " " & strDNSSuffix
24 Next
25 End If
26Next
27
28 WScript.Echo VbCrLf & String(80, "-")
29
30 Set objNetworkSettings = _
31 objWMIService.Get("Win32_NetworkAdapterConfiguration")
32intSetSuffixes = _
33 objNetworkSettings.SetDNSSuffixSearchOrder(arrNewDNSSuffixSearchOrder)
34If intSetSuffixes = 0 Then
35 WScript.Echo VbCrLf & "Replaced DNS domain suffix search order list."
36ElseIf intSetSuffixes = 1 Then
37 WScript.Echo VbCrLf & "Replaced DNS domain suffix search order list." & _
38 VbCrLf & " Must reboot."
39Else
40 WScript.Echo VbCrLf & "Unable to replace DNS domain suffix " & _
41 "search order list."
42End If
43
44 WScript.Echo VbCrLf & String(80, "-")
45
46 Set colNicConfigs = objWMIService.ExecQuery _
47 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
48For Each objNicConfig In colNicConfigs
49 WScript.Echo VbCrLf & _
50 " Network Adapter " & objNicConfig.Index & VbCrLf & _
51 " " & objNicConfig.Description & VbCrLf & _
52 " DNS Domain Suffix Search Order - After:"
53 If Not IsNull(objNicConfig.DNSDomainSuffixSearchOrder) Then
54 For Each strDNSSuffix In objNicConfig.DNSDomainSuffixSearchOrder
55 WScript.Echo " " & strDNSSuffix
56 Next
57 End If
58Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine
ähnliche Ausgabe wie die folgende angezeigt:
C:\scripts>dns-replacesuffixlist.vbs
Seite 100 von 169
DNS Host Name: client1
Network Adapter 1
3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet
Scheduler Miniport
DNS Domain Suffix Search Order - Before:
--------------------------------------------------------------------------------
Replaced DNS domain suffix search order list.
--------------------------------------------------------------------------------
Network Adapter 1
3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet
Scheduler Miniport
DNS Domain Suffix Search Order - After:
hr.fabrikam.com
contoso.com

Ändern der Einstellungen für dynamische DNS-Registrierung


Da sich IP-Adressen bei DHCP-Clients ändern, automatisieren die DNS-Registrierung und die
dynamische Aktualisierung den Prozess, mit dem die Änderung von Hostname und IP-
Adresszuordnungen auf den DNS-Servern auf dem neuesten Stand gehalten wird. Obwohl dieser
Aktualisierungsprozess von den Administratoren früher manuell ausgeführt werden musste,
ermöglicht es die dynamische DNS-Aktualisierung (RFC 2136) Clients und DHCP-Servern, die
Ressourceneinträge für Hosts (A) und Zeiger (PTR) auf dem DNS-Server ohne einen manuellen
Vorgang auf dem neuesten Stand zu halten.
Wie gewöhnlich enthält die Klasse Win32_NetworkAdapterConfiguration schreibgeschützte
Eigenschaften zum Bereitstellen der Einstellungen für die DNS-Registrierung und -
Aktualisierung sowie eine Methode für deren Änderung. Die an die
SetDynamicDNSRegistration-Methode zu übergebenden Parameter sowie die zwei davon
festgelegten booleschen Eigenschaften entsprechen zwei Kontrollkästchen im unteren Bereich
der Registerkarte DNS des Dialogfelds Erweiterte TCP/IP-Einstellungen. Dabei entspricht
Adressen dieser Verbindung in DNS registrieren in der Windows-Benutzeroberfläche der
FullDNSRegistrationEnabled-Eigenschaft und DNS-Suffix dieser Verbindung in DNS-
Registrierung verwenden der DomainDNSRegistrationEnabled-Eigenschaft. Beide
Eigenschaften und die Methode sind neu bei Windows XP und Windows Server 2003. Der Wert
von DomainDNSRegistrationEnabled, deren Standardwert False ist, wird nur verwendet, wenn
FullDNSRegistrationEnabled den Wert True aufweist; andernfalls wird er ignoriert.
Sie können auf der Windows-Benutzeroberfläche den Namen suchen, auf den sich die
FullDNSRegistrationEnabled-Eigenschaft bezieht. Öffnen Sie die Systemsteuerung, klicken
Sie auf System, dann auf die Registerkarte Computername, und zeigen Sie das Feld

Seite 101 von 169


VollständigerComputername an. Der Wert in diesem Feld besteht aus dem Hostnamen mit
angehängtem Domänennamen. Wenn die FullDNSRegistrationEnabled-Eigenschaft True
lautet, werden die IP-Adressen für den Netzwerkadapter in DNS unter Verwendung dieses
Namens registriert.
Lautet die DomainDNSRegistrationEnabled-Eigenschaft True, werden die IP-Adressen
zusätzlich in DNS registriert und dazu die DNSDomain-Eigenschaft für den jeweiligen
Netzwerkadapter verwendet.
So müssen Sie beispielsweise auf einem mehrfach vernetzten Computer, dessen
Netzwerkadapter jeweils mit einem anderen Netzwerk mit einer anderen Domänenstruktur
verbunden sind, bei der Domänenregistrierung verbindungsspezifische DNS-Suffixe verwenden.
In solchen Fällen kann der Client für jede Netzwerkverbindung ein anderes Domänensuffix
registrieren. Dies könnte durch Festlegen der Werte von FullDNSRegistrationEnabled und
DomainDNSRegistrationEnabled auf True ermöglicht werden.

Schritte zur Skripterstellung


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.
Dieses Skript ändert die Einstellungen für die Durchführung der dynamischen DNS-
Registrierung, indem es mithilfe der SetDynamicDNSRegistration()-Methode der Klasse
Win32_NetworkAdapterConfiguration die Eigenschaften DomainDNSRegistrationEnabled
und FullDNSRegistrationEnabled ändert.
Die Methode und die Eigenschaften sind neu bei Windows XP und Windows Server 2003. Das
Skript überprüft nicht, welche Betriebssystemversion verwendet wird; wenn
SetDynamicDNSRegistration jedoch nicht 0 (= erfolgreich) zurückgibt, fängt das Skript den
Fehler auf und zeigt eine Meldung an.
1.Erstellen Sie eine Variable zur Angabe des Computernamens.
2.Erstellen Sie zwei boolesche Variablen zur Angabe der gewünschten Einstellungen für die
Eigenschaften DomainDNSRegistrationEnabled und FullDNSRegistrationEnabled.
3.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-
Namespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate"
fest.
4.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.
5.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben
aus.
6.Zeigen Sie die aktuellen Einstellungen der dynamischen DNS-Registrierung an.
7.Rufen Sie die SetDynamicDNSRegistration-Methode der Klasse

Seite 102 von 169


Win32_NetworkAdapterConfiguration auf, und übergeben Sie ihr die beiden booleschen
Parameter, die am Anfang des Skripts festgelegt wurden.
8.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine
Erfolgsnachricht oder eine Fehlermeldung an.
9.Fragen Sie die Klasse Win32_NetworkAdapterConfiguration erneut ab, und zeigen Sie die
geänderten Einstellungen für die dynamische DNS-Registrierung an.

Listing 37 Dns-setdynreg.vbs
1 On Error Resume Next
2
3 strComputer = "."
4 blnFullDNSRegistrationEnabled = True
5 blnDomainDNSRegistrationEnabled = True
6
7 Set objWMIService = GetObject("winmgmts:" _
8 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
9 Set colNicConfigs = objWMIService.ExecQuery _
10 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
11
12 For Each objNicConfig In colNicConfigs
13 strDNSHostName = objNicConfig.DNSHostName
14Next
15WScript.Echo VbCrLf & "DNS Host Name: " & strDNSHostName
16
17 For Each objNicConfig In colNicConfigs
18 WScript.Echo VbCrLf & _
19 " Network Adapter " & objNicConfig.Index & VbCrLf & _
20 " " & objNicConfig.Description & VbCrLf & _
21 " DNS Full Registration Enabled - Before: " & _
22 objNicConfig.FullDNSRegistrationEnabled & VbCrLf & _
23 " DNS Domain Registration Enabled - Before: " & _
24 objNicConfig.DomainDNSRegistrationEnabled
25 intDynReg = objNicConfig.SetDynamicDNSRegistration _
26 (blnFullDNSRegistrationEnabled, blnDomainDNSRegistrationEnabled)
27 If intDynReg = 0 Then
28 WScript.Echo VbCrLf & " Successfully set dynamic DNS registration."
29 ElseIf intDynReg = 1 Then
30 WScript.Echo VbCrLf & _
31 " Successfully set dynamic DNS registration." & _
32 VbCrLf & " Must reboot."
33 Else
34 WScript.Echo VbCrLf & " Unable to set dynamic DNS registration."
35 End If
36Next
37
38 WScript.Echo VbCrLf & String(80, "-")
39
40 Set colNicConfigs = objWMIService.ExecQuery _
41 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
42
43 For Each objNicConfig In colNicConfigs
44 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index & _
45 VbCrLf & " " & objNicConfig.Description & VbCrLf & _
46 " DNS Full Registration Enabled - After: " & _
47 objNicConfig.FullDNSRegistrationEnabled & VbCrLf & _
48 " DNS Domain Registration Enabled - After: " & _
49 objNicConfig.DomainDNSRegistrationEnabled
50Next

Seite 103 von 169


Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine
ähnliche Ausgabe wie die folgende angezeigt:
C:\scripts>dns-setdynreg.vbs
DNS Host Name: client1
Network Adapter 1
3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet
Scheduler Miniport
DNS Full Registration Enabled - Before:
DNS Domain Registration Enabled - Before:
Successfully set dynamic DNS registration.
--------------------------------------------------------------------------------
Network Adapter 1
3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet
Scheduler Miniport
DNS Full Registration Enabled - After: True
DNS Domain Registration Enabled - After: True

Szenario: Ändern von DNS-Servern und -Domänen


Bei großen Veränderung in einem Unternehmen - zum Beispiel Fusionen, Übernahmen und
Umstrukturierungen - kann sich die DNS-Domänenhierarchie eines Unternehmens ändern, und
Hosts müssen möglicherweise neu konfiguriert werden, damit sie in der neuen Struktur
funktionieren.
In diesem Szenario weist die IT-Abteilung bei Fabrikam, Inc., Clients, die sich zuvor in der
Domäne der obersten Ebene, fabrikam.com, befanden, verschiedenen Unterdomänen zu:
hr.fabrikam.com, it.fabrikam.com und ac.fabrikam.com. Der primäre DNS-Server für jede
Unterdomäne dient außerdem zum Sichern der beiden anderen Unterdomänen.
Dieses Skript verwendet statt der EnableDNS()-Methodedie Methoden SetDNSDomain() und
SetDNSServerSearchOrder() der Klasse Win32_NetworkAdapterConfiguration. Für
EnableDNS() sind zwei weitere optionale Parameter erforderlich, die leer bleiben könnten; die
beiden anderen Methoden legen die für dieses Beispiel benötigten Parameter exakt fest. Bei
Bedarf könnten Sie das Skript problemlos erweitern, um auch die Einstellungen für die
dynamische Registrierung der Hosts mithilfe der SetDynamicDNSRegistration()-Methode zu
konfigurieren.
Denken Sie daran, dass bei einem Vorgang wie dem hier beschriebenen das Konfigurieren des
Clients nur einen Teil der Aufgabe darstellt: Darüber hinaus müssen Sie die entsprechenden
Änderungen auf den DNS-Servern vornehmen. Die Beschreibung der Skripterstellung für DNS-
Server würde den Rahmen dieses Dokumentes jedoch überschreiten.
Seite 104 von 169
Schritte zur Skripterstellung
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 38 verwendet eine Textdatei als Eingabe. Sie müssen diese Datei vor
Ausführung des Skripts erstellen. Der Pfad zur Datei wird in einer Variablen angegeben; in
diesem Beispiel lautet er C:\Scripts\Hosts.txt. Jede Zeile der Textdatei enthält einen Hostnamen
und einen neuen Domänennamen, die durch ein Komma getrennt werden (Leerzeichen zwischen
den Namen sind nicht zulässig). Die letzte Zeile in der Datei darf NICHT mit einem
Eingabezeichen abgeschlossen werden, weil dann die folgende Zeile vom Skript als leerer
Eintrag gelesen würde.
client1,hr
client2,it
server1,ac
Das Skript weist jedem Host den neuen Domänennamen und eine neue Suchreihenfolge für
DNS-Server zu. Die neue Reihenfolge hängt von dem neuen Domänennamen ab: Jede
Unterdomäne verfügt über einen eigenen primären DNS-Server, der als Sicherung für die
anderen beiden Unterdomänen dient.
Das Skript erstellt eine CSV-Textdatei und protokolliert darin die Ergebnisse dieser Vorgänge.
Der Pfad zur Datei wird in einer Variablen angegeben; in diesem Fall lautet er
C:\Scripts\Newhosts.csv.
1.Definieren Sie die notwendigen Konstanten für das Objekt FileSystemObject.
2.Erstellen Sie Variablen zur Angabe der Pfade zu den Ein- und Ausgabedateien.
3.Erstellen Sie Variablen zur Angabe des Namens der Domäne der obersten Ebene.
4.Erstellen Sie drei Arrays von Zeichenfolgen mit der jeweiligen Suchreihenfolge für DNS-
Server für jede Unterdomäne.
5.Erstellen Sie ein FileSystemObject-Objekt, und verwenden Sie es zum Öffnen der Datei und
zum Einlesen des Inhalts in eine Zeichenfolge.
6.Rufen Sie die GetInput-Funktion auf, und übergeben Sie ihr den Namen der
Eingabetextdatei. Die Funktion liest den Inhalt der Eingabedatei und gibt ihn als Zeichenfolge
zurück.
7.Verwenden Sie die VBScript-Funktion Split mit der VbCrLf-Konstante als Trennzeichen.
um die Zeichenfolge aus der Eingabedatei in ein Array aufzuteilen, bei dem jedes Element
aus einer Zeile der Textdatei besteht. Diese muss den Namen eines Computers und einer
Unterdomäne enthalten.
8.Überprüfen Sie, ob die angegebene Ausgabedatei vorhanden ist. Wenn dies zutrifft, öffnen
Sie sie zum Anhängen. Andernfalls müssen Sie sie erstellen und zum Schreiben öffnen.
9.Führen Sie eine Iteration durch jedes Arrayelement durch, das durch Aufteilen der
Eingabedateizeilen zurückgegeben wurde.
10.Verwenden Sie Split erneut, und teilen Sie jedes Element des Arrays beim Komma. Dabei

Seite 105 von 169


wird der Hostname in eine Variable und der Name der Unterdomäne in eine andere Variable
eingelesen.
11.Verketten Sie den Namen der Unterdomäne mit dem Namen der Domäne der obersten Ebene,
um den vollständigen Domänennamen zu erhalten.
12.Zeigen Sie den Hostnamen an.
13.Rufen Sie die PingClient-Funktion auf, und übergeben Sie ihr den Hostnamen.
14.Wenn die Funktion eine Antwort empfängt, stellen Sie eine Verbindung zum WMI-Dienst
her, und fangen Sie einen Fehler auf.
15.Wenn beim Herstellen der Verbindung mit WMI kein Fehler auftritt, fragen Sie den WMI-
Dienst nach der Auflistung aller IP-Netzwerkadapter ab.
16.Rufen Sie die Unterroutine GetSettings auf, um aktuelle DNS-Einstellungen anzuzeigen und
in die Ausgabedatei zu schreiben.
17.Rufen Sie die ChangeDNS-Funktion auf. Diese nimmt die in der Eingabedatei angegebenen
Änderungen an der Domäne und der DNS-Suchreihenfolge vor und protokolliert die
Ergebnisse in der Ausgabedatei.
18.Rufen Sie die Unterroutine GetSettings erneut auf, um die geänderten DNS-Einstellungen
anzuzeigen und in die Ausgabedatei zu schreiben.
19.Wenn beim Herstellen einer Verbindung mit WMI ein Fehler aufgetreten ist, zeigen Sie eine
Fehlermeldung an.
20.Wenn auf die Ping-Anforderung nicht reagiert wird, zeigen Sie eine Fehlermeldung an.
21.Die GetInput-Funktion verwendet eine Zeichenfolge mit dem Namen der Eingabetextdatei
als Parameter. Die Funktion gibt eine Zeichenfolge mit dem Text der Eingabedatei zurück.
Wenn die Datei leer oder nicht zu finden ist, zeigt die Funktion eine Fehlermeldung an und
beendet das Skript.
22.Die PingClient-Funktion verwendet eine Zeichenfolge mit dem Namen eines Hostcomputers
als Parameter. Die Funktion gibt True zurück, wenn auf die Ping-Anforderung reagiert wird;
andernfalls gibt sie False zurück.
23.Die Unterroutine GetSettings zeigt für jeden Netzwerkadapter die Indexnummer,
Beschreibung, DNS-Domäne, Suchreihenfolge für DNS-Server, IP-Adressen und
Subnetzmasken an.
24.Die Unterroutine ChangeDNS wählt eine Suchreihenfolge für DNS-Server auf der Grundlage
der Unterdomäne aus, die für den Host in der Eingabedatei angegeben wurde. Wenn es sich
bei der Unterdomäne um eine der in der Logik der Select Case-Anweisung enthaltenen
Unterdomänen handelt, versucht sie, die SetDNSDomain-Methode mit dem Namen der
neuen Domäne aufzurufen. Wenn diese Methode erfolgreich ist, versucht die Unterroutine
anschließend, die SetDNSServerSearchOrder-Methode mit der ausgewählten
Suchreihenfolge für DNS-Server aufzurufen. Die Unterroutine protokolliert die Ergebnisse
und eventuelle Fehler in der Ausgabedatei.

Listing 38 Dns-move.vbs

Seite 106 von 169


1 On Error Resume Next
2
3 ' Constants for FileSystemObject
4 Const FOR_READING = 1
5 Const FOR_WRITING = 2
6 Const FOR_APPENDING = 8
7
8 ' Paths to input and output files. Input file must be text file with name
9 ' of accessible machine, comma, and valid domain name on each line.
10 strFileInput = "c:\scripts\hosts.txt"
11 strFileOutput = "c:\scripts\newhosts.csv"
12
13 ' Domain name and DNS servers corresponding to subdomains
14 strTopDomain = "fabrikam.com"
15 arrDNSSrv1 = Array("192.168.0.1", "192.168.0.2", "192.168.0.3") 'hr
16 arrDNSSrv2 = Array("192.168.0.2", "192.168.0.3", "192.168.0.1") 'it
17 arrDNSSrv3 = Array("192.168.0.3", "192.168.0.1", "192.168.0.2") 'ac
18
19 ' Create a Script Runtime FileSystemObject.
20 Set objFSO = CreateObject("Scripting.FileSystemObject")
21
22 ' If the input file exists, dump contents of input file into a string.
23 strInput = GetInput(strFileInput)
24
25 ' Get computer info by breaking input stream into array at line breaks.
26 arrHosts = Split(strInput, VbCrLf)
27
28 ' Check to see if the output file exists. If so, open it for appending.
29 ' If not, create it and open it for writing.
30
31 If objFSO.FileExists(strFileOutput) Then
32 Set objOutputFile = objFSO.OpenTextFile (strFileOutput, FOR_APPENDING)
33 Else
34 Set objOutputFile = objFSO.CreateTextFile(strFileOutput)
35 End If
36 If Err <> 0 Then
37 Wscript.Echo "Unable to open " & strFileOutput & " for output."
38 WScript.Quit
39 End If
40
41 ' Write header for file.
42 objOutputFile.WriteLine "Inventory of computers moved to new domains." & _
43 VbCrLf & "Taken " & Now & VbCrLf & VbCrLf & String(120, "-") & VbCrLf
44
45 For Each strHost In arrHosts
46
47 ' Get names and domains by breaking each computer info array at commas.
48 arrComputers = Split(strHost, ",")
49 strComputer = arrComputers(0)
50 strSubDomain = arrComputers(1)
51 strDomain = strSubDomain & "." & strTopDomain
52 WScript.Echo VbCrLf & "Host: " & strComputer & VbCrLf
53
54 ' Ping remote computer. If no response display error message and end
55 script
56 blnPingSuccess = PingClient(strComputer)
57 If blnPingSuccess = True Then
58
59 ' Connect to the WMI service.
60 Set objWMIService = GetObject("winmgmts:" _
61 & "{impersonationLevel=impersonate}!\\" & strComputer &
62 "\root\cimv2")
63
64 If Err = 0 Then
65 Seite 107 von 169
66 ' Write header for each computer.
67 objOutputFile.WriteLine "Host:,," & strComputer & VbCrLf & VbCrLf &
68 _
Teil 6: Skripterstellung für WINS auf Clients
Veröffentlicht: 07. Dez 2004
Obwohl der Dienst WINS (Windows Internet Name Service) unter Windows XP und Windows Server
2003 hauptsächlich aus Gründen der Abwärtskompatibilität mit älteren NetBIOS-basierten Versionen
von Windows und Netzwerkanwendungen bereitgestellt wird, dient er vielfach weiterhin als
Namensauflösungssystem für NetBIOS-Namen. Abbildung 12 zeigt die Registerkarte WINS des
Dialogfelds Erweiterte TCP/IP-Einstellungen, die über die Windows-Benutzeroberfläche Zugriff
auf diese Einstellungen bietet.

Abbildung 12 Festlegen der NetBIOS-Namensauflösung über die Windows-Benutzeroberfläche


Bild maximieren
Bei Skripts, die WMI verwenden, stellt die Klasse Win32_NetworkAdapterConfiguration
Funktionalität zum Verwalten der WINS-Konfiguration bereit, die mit der Konfiguration zum
Verwalten von DNS vergleichbar ist.
Falls sowohl WINS als auch DNS in einem Netzwerk eingesetzt wird, kann DNS von WINS als
Sicherung für die Namensauflösung verwendet werden und umgekehrt. Wenn Sie WINS unter
Verwendung der Klasse Win32_NetworkAdapterConfiguration aktivieren, kann der Dienst von
einem der an die EnableWINS-Methode übergebenen Parameter so konfiguriert werden, dass er den
DNS-Server nach Namen abfragt, die bei der NetBIOS-Namensauflösung nicht aufgelöst werden
können.
Darüber hinaus bietet die Klasse Win32_NetworkAdapterConfiguration eine Methode, die den
Standardvorgang von NetBIOS über TCP/IP aktivieren oder deaktivieren kann. Wenn DHCP
verwendet wird, kann diese Methode einen Client zum Abrufen der NetBIOS-Einstellungen von
DHCP konfigurieren. In Tabelle 19 werden die WINS-Eigenschaften für die Klasse
Win32_NetworkAdapterConfiguration beschrieben.

Tabelle 19 WINS-Eigenschaften für die Klasse "Win32_NetworkAdapterConfiguration"

Seite 108 von 169


Eigenschaft Typ Beschreibung
DNSEnabledForWINSResolutionBoolscher TRUE gibt an, dass DNS für die Namensauflösung
Wert über WINS aktiviert ist. Wenn der Name mithilfe von
DNS nicht aufgelöst werden kann, wird die
Anforderung an WINS weitergeleitet.
TcpipNetbiosOptions Uint32 Einstellungen für NetBIOS über TCP/IP. Die Werte
lauten:
Neu bei Windows XP
0 = NetBIOS über DHCP aktivieren
1 = NetBIOS aktivieren
2 = NetBIOS deaktivieren
WINSEnableLMHostsLookup Boolscher TRUE gibt an, dass die lokale LMHosts-Datei
Wert verwendet wird. Diese enthält die Zuordnung von IP-
Adressen zu Hostnamen. Im lokalen System ist die
Datei im Pfad %systemroot%\System32\Drivers\etc
gespeichert.
WINSHostLookupFile ZeichenfolgePfad zu einer LMHosts-Datei im lokalen System.
Diese Datei enthält die Zuordnung von IP-Adressen zu
Hostnamen. Wenn die in dieser Eigenschaft
angegebene Datei gefunden wird, wird sie in den
Ordner %systemroot%\System32\Drivers\etc des
lokalen Systems kopiert. Diese Eigenschaft ist nur
gültig, wenn die WINSEnableLMHostsLookup-
Eigenschaft TRUE lautet.
WINSPrimaryServer ZeichenfolgeIP-Adresse für den primären WINS-Server.
WINSScopeID ZeichenfolgeWert, der an den NetBIOS-Namen angehängt wird und
eine Gruppe von Computersystemen isoliert, die nur
miteinander kommunizieren. Er wird für alle
NetBIOS-Transaktionen über TCP/IP-
Kommunikationen von dem betreffenden
Computersystem aus verwendet. Computer, die mit
identischen Bereichskennungen konfiguriert sind,
können mit diesem Computer kommunizieren.
TCP/IP-Clients mit anderen Bereichskennungen
ignorieren Pakete von Computern mit dieser
Bereichskennung. Diese Eigenschaft ist nur gültig,
wenn die EnableWINS-Methode erfolgreich
ausgeführt wurde.
WINSSecondaryServer ZeichenfolgeIP-Adresse für den sekundären WINS-Server.
Alle Eigenschaften in der vorstehenden Tabelle sind schreibgeschützt.
In Tabelle 20 werden die WINS-Methoden für die Klasse Win32_NetworkAdapterConfiguration
beschrieben.

Tabelle 20 WINS-Methoden für die Klasse "Win32_NetworkAdapterConfiguration"

Seite 109 von 169


Methode Parameter Beschreibung
EnableWINS DNSEnabledForWINSResolution – Statische Methode. Aktiviert die für
Boolean-Wert TCP/IP spezifischen Einstellungen, ist
jedoch unabhängig vom
WINSEnableLMHostsLookup – Boolean- Netzwerkadapter.
Wert
WINSHostLookupFile – Zeichenfolge
WINSScopeID – Zeichenfolge
SetWINSServer WINSPrimaryServer – Zeichenfolge Statische Methode. Legt den primären
und sekundären WINS-Server auf dem
WINSSecondaryServer – Zeichenfolge TCP/IP-Netzwerkadapter fest. Diese
Methode wird unabhängig vom
Netzwerkadapter angewendet.
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.
Dieser Abschnitt enthält die Schritte zur Skripterstellung sowie Beispielskripts für die entsprechenden
WINS-Aufgaben:

Anzeigen von WINS-Clientinformationen

Aktivieren von NetBIOS

Aktivieren von WINS

Festlegen von WINS-Servern für einen Client

Anzeigen von WINS-Clientinformationen


Beim Verwalten von WINS auf Clients besteht der erste Schritt wie bei DHCP und DNS
normalerweise darin, die aktuellen Einstellungen zu ermitteln. In diesem Abschnitt wird gezeigt, wie
die aktuellen NetBIOS- und WINS-Einstellungen abgerufen werden.

Schritte zur Skripterstellung


Das Skript in Listing 39 zeigt die WINS-Clienteinstellungen 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 beim
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 entweder aus einem Hostnamen oder einer IP-
Adresse bestehen.

Seite 110 von 169


2.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace
root\cimv2, 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.Weisen Sie die Eigenschaft DNSHostName der Klasse Win32_NetworkAdapterConfiguration
einer Variablen zu.
6.Verwenden Sie eine Select Case-Anweisung zum Konvertieren der Werte für die
TcpipNetbiosOptions-Eigenschaft in aussagekräftige Zeichenfolgen.
7.Verketten Sie die Bezeichnungen, die aussagekräftige Zeichenfolge für die TcpipNetbiosOptions-
Eigenschaft sowie die Werte für die Win32_NetworkAdapterConfiguration-Eigenschaften Index,
Description, WINSPrimaryServer, WINSSecondaryServer, WINSScopeID,
WINSEnableLMHostsLookup, WINSHostLookupFile und DNSEnabledForWINSResolution
zu einer Zeichenfolge.
8.Verketten Sie bei jeder nachfolgenden Iteration durch einen anderen Netzwerkadapter die
zugehörige Zeichenfolge mit der ursprünglichen Zeichenfolge.
9.Zeigen Sie den Hostnamen und die Einstellungen für jeden Adapter an.

Listing 39 Winssettings.vbs

Seite 111 von 169


1 On Error Resume Next
2
3 strComputer = "."
4
5 Set objWMIService = GetObject("winmgmts:" _
6 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
7 Set colNicConfigs = objWMIService.ExecQuery _
8 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
9
10 For Each objNicConfig In colNicConfigs
11 strDNSHostName = objNicConfig.DNSHostName
12 intNetBIOS = objNicConfig.TcpipNetbiosOptions
13 Select Case intNetBIOS
14 Case 0 strNetBIOS = "Use NetBIOS setting from the DHCP server."
15 Case 1 strNetBIOS = "Enable NetBIOS over TCP/IP."
16 Case 2 strNetBIOS = "Disable NetBIOS over TCP/IP."
17 Case Else strNetBIOS = "Unable to determine setting for NetBIOS " & _
18 "Over TCP/IP."
19 End Select
20 strWINSSettings = strWINSSettings & VbCrLf & VbCrLf & _
21 " Network Adapter " & objNicConfig.Index & VbCrLf & _
22 " " & objNicConfig.Description & VbCrLf & VbCrLf & _
23 " NetBIOS: " & strNetBIOS & VbCrLf & _
24 " WINS Primary Server: " & _
25 objNicConfig.WINSPrimaryServer & VbCrLf & _
26 " WINS Secondary Server: " & _
27 objNicConfig.WINSSecondaryServer & VbCrLf & _
28 " WINS Scope ID: " & _
29 objNicConfig.WINSScopeID & VbCrLf & _
30 " WINS Enable LMHosts Lookup: " & _
31 objNicConfig.WINSEnableLMHostsLookup & VbCrLf & _
32 " WINS Host Lookup File: " & _
33 objNicConfig.WINSHostLookupFile & VbCrLf & _
34 " DNS Enabled For WINS Resolution: " & _
35 objNicConfig.DNSEnabledForWINSResolution
36Next
37
38 WScript.Echo VbCrLf & "WINS Settings" & VbCrLf & VbCrLf & _
39 "Host Name: " & strDNSHostName & strWINSSettings
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine
ähnliche Ausgabe wie die folgende angezeigt:
C:\scripts>winssettings.vbs
WINS Settings
Host Name: client1
Network Adapter 1
3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet
Scheduler Miniport
NetBIOS: Enable NetBIOS over TCP/IP.
WINS Primary Server:
WINS Secondary Server:
WINS Scope ID:
Seite 112 von 169
WINS Enable LMHosts Lookup: True
WINS Host Lookup File:
DNS Enabled For WINS Resolution: False

Aktivieren von NetBIOS


Weil WINS NetBIOS-Namen auflöst, müssen Sie NetBIOS aktivieren, wenn Sie WINS auf einem
Client aktivieren. Wenn DHCP aktiviert ist, kann der Client NetBIOS-Einstellungen vom DHCP-
Server abrufen. Wenn ein Client aber eine statische IP-Adresse verwendet, müssen Sie WINS-
Einstellungen auf diesem Client konfigurieren.
Die Einstellung für NetBIOS über TCP/IP wird in der Windows-Benutzeroberfläche durch die drei
Optionsfelder im unteren Abschnitt der Registerkarte WINS des Dialogfelds Erweiterte TCP/IP-
Einstellungen bereitgestellt (siehe Abbildung 12).
Tabelle 21 zeigt, wie diese Optionsfelder den drei möglichen Werten der TcpipNetbiosOptions-
Eigenschaft von Win32_Network AdapterConfiguration entsprechen, die Sie mithilfe der
SetTCPIPNetBIOS()-Methode festlegen können.

Tabelle 21 Werte der "TcpipNetbiosOptions"-Eigenschaft


Wert Bedeutung Verwendung
0 NetBIOS über DHCP Wenn DHCP aktiviert ist, um NetBIOS-Einstellungen vom DHCP-
aktivieren Server abzurufen. Falls eine statische IP-Adresse verwendet wird
oder der DHCP-Server keine NetBIOS-Einstellung bereitstellt,
aktiviert diese Einstellung NetBIOS über TCP/IP.
1 NetBIOS aktivieren Wenn die statische IP-Adressierung aktiviert und DHCP
deaktiviert ist
2 NetBIOS deaktivieren Wenn NetBIOS im Netzwerk nicht verwendet wird
Schritte zur Skripterstellung
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 40 aktiviert NetBIOS auf einem Netzwerkadapter. Es verwendet die
SetTCPIPNetBIOS()-Methode der Klasse Win32_NetworkAdapterConfiguration zum Festlegen
der TcpipNetbiosOptions-Eigenschaft. Diese Eigenschaft ist neu bei Windows XP.
1.Definieren Sie Konstanten zur Darstellung der drei möglichen Werte für die
TcpipNetbiosOptions-Eigenschaft.
2.Erstellen Sie eine Variable zur Angabe des Computernamens.
3.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace
root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.
4.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse

Seite 113 von 169


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.
5.Zeigen Sie den Namen des Computers an.
6.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben aus.
7.Zeigen Sie die Index-Eigenschaft des Netzwerkadapters an.
8.Rufen Sie die SetTCPIPNetBIOS-Methode der Klasse Win32_NetworkAdapterConfiguration
auf, und übergeben Sie ihr als einzigen Parameter eine der drei Konstanten, die die Werte der
TcpipNetbiosOptions-Eigenschaft darstellen.
9.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine Erfolgsnachricht
oder eine Fehlermeldung an.
10.Fragen Sie die Klasse Win32_NetworkAdapterConfiguration erneut ab.
11.Zeigen Sie die neue TcpipNetbiosOptions-Eigenschaft an, und verwenden Sie dabei eine Select
Case-Anweisung zum Konvertieren der ganzen Zahl in eine erklärende Zeichenfolge.

Listing 40 Wins-enablenetbios.vbs

Seite 114 von 169


1 On Error Resume Next
2
3 Const ENABLE_NETBIOS_VIA_DHCP = 0
4 Const ENABLE_NETBIOS = 1
5 Const DISABLE_NETBIOS = 2
6 strComputer = "."
7
8 Set objWMIService = GetObject("winmgmts:" _
9 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
10Set colNicConfigs = objWMIService.ExecQuery _
11 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
12 WScript.Echo VbCrLf & "Host Name: " & strComputer
13For Each objNicConfig in colNicConfigs
14
15 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index & _
16 " " & objNicConfig.Description & VbCrLf & _
17 " Attempting to set NetBIOS over TCP/IP default."
18 intNetBIOS = objNicConfig.SetTCPIPNetBIOS(ENABLE_NETBIOS_VIA_DHCP)
19 If intNetBIOS = 0 Then
20 WScript.Echo " Successfully set NetBIOS over TCP/IP default."
21 ElseIf intNetBIOS = 1 Then
22 WScript.Echo " Successfully set NetBIOS over TCP/IP default." & _
23 VbCrLf & " Must reboot."
24 Else
25 WScript.Echo " Unable to set NetBIOS default."
26 End If
27Next
28
29 WScript.Echo VbCrLf & String(80, "-")
30
31 Set colNicConfigs = objWMIService.ExecQuery _
32 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
33
34 For Each objNicConfig In colNicConfigs
35 WScript.Echo VbCrLf & _
36 " Network Adapter " & objNicConfig.Index & VbCrLf & _
37 " " & objNicConfig.Description
38 intNetBIOS = objNicConfig.TcpipNetbiosOptions
39 Select Case intNetBIOS
40 Case 0 strNetBIOS = "Use NetBIOS setting from the DHCP server"
41 Case 1 strNetBIOS = "Enable NetBIOS over TCP/IP"
42 Case 2 strNetBIOS = "Disable NetBIOS over TCP/IP"
43 End Select
44 WScript.Echo " NetBIOS Over TCP/IP: " & strNetBIOS
45Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine
ähnliche Ausgabe wie die folgende angezeigt:
C:\scripts>wins-enablenetbios.vbs
Host Name: .
Network Adapter 1 3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX
Compatible) - Packet Scheduler Miniport
Attempting to set NetBIOS over TCP/IP default.
Successfully set NetBIOS over TCP/IP default.
--------------------------------------------------------------------------------

Seite 115 von 169


Network Adapter 1
3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet
Scheduler Miniport
NetBIOS Over TCP/IP: Enable NetBIOS over TCP/IP

Aktivieren von WINS


Wenn NetBIOS über DHCP aktiviert ist, brauchen Sie WINS nicht zu aktivieren oder WINS-Server
manuell zuzuweisen, weil der Client diese Einstellungen vom DHCP-Server abruft. Wenn NetBIOS
jedoch unabhängig von DHCP aktiviert ist, müssen Sie WINS aktivieren sowie IP-Adressen für einen
primären Server und (optional) für einen sekundären WINS-Server zuweisen.
Die Klasse Win32_NetworkAdapterConfiguration stellt hierfür zwei Methoden bereit: Eine
Methode aktiviert WINS und konfiguriert vier WINS-Einstellungen; eine andere Methode weist
primäre und sekundäre WINS-Server zu.

Schritte zur Skripterstellung


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 41 aktiviert WINS und legt vier Parameter fest, die an die EnableWINS-
Methode übergeben werden. In Tabelle 22 werden die Parameter der EnableWINS-Methode
beschrieben.

Tabelle 22 Parameter der "EnableWINS"-Methode


Parameter Typ Beschreibung
DNSEnabledForWINSResolutionBoolean- Ein Wert, der angibt, ob DNS als Sicherungsmethode
Wert für die Namensauflösung aktiviert werden soll.
WINSEnableLMHostsLookup Boolean- Ein Wert, der angibt, ob die Verwendung der
Wert LMHOSTS-Datei für die Zuordnung von NetBIOS-
Namen zu IP-Adressen aktiviert werden soll.
WINSHostLookupFile ZeichenfolgeDer Pfad zur LMHOSTS-Datei. Dieser Parameter ist
optional und wird nur verwendet, wenn der vorherige
Wert (WINSEnableLMHostsLookup) True lautet.
WINSScopeID ZeichenfolgeDie Bereichskennung, die an den NetBIOS-Namen des
Computers angehängt werden soll. Computer, die die
gleiche Bereichskennung verwenden, können
miteinander kommunizieren.
Der Name jedes Parameters ist auch der Name der Eigenschaft, die zum Abrufen des Wertes
verwendet werden kann.
EnableWINS ist eine statische Methode, die für alle Instanzen der Klasse (in diesem Fall für alle
Netzwerkadapter) gilt.

Seite 116 von 169


1.Erstellen Sie eine Variable zur Angabe des Computernamens.
2.Erstellen Sie Variablen zur Angabe der vier Parameter, die an die EnableWINS-Methode
übergeben werden sollen.
3.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace
root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.
4.Rufen Sie die Get-Methode für die Klasse Win32_NetworkAdapterConfiguration auf.
Damit wird ein Objektverweis auf die Klasse Win32_NetworkAdapterConfiguration selbst statt
einer Auflistung der Klasseninstanzen zurückgegeben. Dieser Verweis auf die Klasse muss zum
Aufrufen der statischen Methode EnableWINS verwendet werden.
5.Zeigen Sie den Namen des Computers an.
6.Rufen Sie die statische Methode EnableWINS von Win32_NetworkAdapterConfiguration auf,
und übergeben Sie ihr die vorstehend definierten vier Parameter.
7.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine Erfolgsnachricht
oder eine Fehlermeldung an.
8.Verwenden Sie die ExecQuery-Methode zum erneuten Abfragen der Klasse
Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled =
True" gefiltert wird.
9.Zeigen Sie die Einstellungen an, die mit der EnableWINS-Methode konfiguriert wurden.

Listing 41 Wins-enable.vbs

Seite 117 von 169


1 On Error Resume Next
2
3 strComputer = "."
4 blnDNSEnabledForWINSResolution = True
5 blnWINSEnableLMHostsLookup = True
6 strWINSHostLookupFile = ""
7 strWINSScopeID = "WORKGROUP"
8
9 Set objWMIService = GetObject("winmgmts:" _
10 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
11Set objNicConf = objWMIService.Get("Win32_NetworkAdapterConfiguration")
12
13 WScript.Echo VbCrLf & "Host Name: " & strComputer & VbCrLf & _
14 " Attempting to enable WINS"
15intEnableWINS = objNicConf.EnableWINS(blnDNSEnabledForWINSResolution, _
16 blnWINSEnableLMHostsLookup, strWINSHostLookupFile, strWINSScopeID)
17If intEnableWINS = 0 Then
18 WScript.Echo " Successfully enabled WINS on all network adapters."
19ElseIf intEnableWINS = 1 Then
20 WScript.Echo " Successfully enabled WINS on all network adapters." & _
21 VbCrLf & " Must reboot."
22Else
23 WScript.Echo " Unable to enable WINS."
24End If
25
26 WScript.Echo VbCrLf & String(80, "-")
27
28 Set colNicConfigs = objWMIService.ExecQuery _
29 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
30
31 For Each objNicConfig In colNicConfigs
32 WScript.Echo VbCrLf & _
33 " Network Adapter " & objNicConfig.Index & VbCrLf & _
34 " " & objNicConfig.Description
35 WScript.Echo " DNS Enabled For WINS Resolution: " & _
36 objNicConfig.DNSEnabledForWINSResolution
37 WScript.Echo " WINS Enable LMHosts Lookup: " & _
38 objNicConfig.WINSEnableLMHostsLookup
39 WScript.Echo " WINS Host Lookup File: " & _
40 objNicConfig.WINSHostLookupFile
41 WScript.Echo " WINS Scope ID: " & objNicConfig.WINSScopeID
42Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine
ähnliche Ausgabe wie die folgende angezeigt:
C:\scripts>wins-enable.vbs
Host Name: .
Attempting to enable WINS
Successfully enabled WINS on all network adapters.
--------------------------------------------------------------------------------
Network Adapter 1
3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet
Scheduler Miniport

Seite 118 von 169


DNS Enabled For WINS Resolution: True
WINS Enable LMHosts Lookup: True
WINS Host Lookup File:
WINS Scope ID: WORKGROUP

Festlegen von WINS-Servern für einen Client


Wenn NetBIOS unabhängig von DHCP aktiviert ist, müssen Sie IP-Adressen für einen primären
Server und (optional) für einen sekundären WINS-Server zuweisen sowie WINS aktivieren.
Die Klasse Win32_NetworkAdapterConfiguration stellt die SetWINSServer-Methode zum
Zuweisen von WINS-Servern zu einem Client bereit.

Schritte zur Skripterstellung


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 42 weist einem Client primäre und sekundäre WINS-Server zu.
SetWINSServer ist eine statische Methode, die für alle Instanzen der Klasse (in diesem Fall für alle
Netzwerkadapter) gilt.
1.Erstellen Sie eine Variable zur Angabe des Computernamens.
2.Erstellen Sie zwei Variablen zur Angabe der IP-Adressen des primären und sekundären WINS-
Servers, die an die EnableWINS-Methode übergeben werden sollen.
3.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace
root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.
4.Rufen Sie die Get-Methode für die Klasse Win32_NetworkAdapterConfiguration auf.
Damit wird ein Objektverweis auf die Klasse Win32_NetworkAdapterConfiguration selbst statt
einer Auflistung der Klasseninstanzen zurückgegeben. Dieser Verweis auf die Klasse muss zum
Aufrufen der statischen Methode SetWINSServer verwendet werden.
5.Zeigen Sie den Namen des Computers an.
6.Rufen Sie die statische Methode SetWINSServer der Klasse
Win32_NetworkAdapterConfiguration auf, und übergeben Sie ihr die vorstehend definierten
beiden Parameter.
7.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine Erfolgsnachricht
oder eine Fehlermeldung an.
8.Verwenden Sie die ExecQuery-Methode zum erneuten Abfragen der Klasse
Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled =
True" gefiltert wird.

Seite 119 von 169


9.Zeigen Sie die IP-Adressen der WINS-Server an, die mit der SetWINSServer-Methode konfiguriert
wurden.

Listing 42 Wins-setservers.vbs
1 On Error Resume Next
2
3 strComputer = "."
4 strWINSPrimaryServer = "192.168.0.1"
5 strWINSSecondaryServer = "192.168.0.2"
6
7 Set objWMIService = GetObject("winmgmts:" _
8 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
9 Set colNicConfigs = objWMIService.ExecQuery _
10 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
11
12 WScript.Echo VbCrLf & "Host Name: " & strComputer & VbCrLf & _
13 " Attempting to set WINS primary and secondary servers ..."
14
15 For Each objNicConfig In colNicConfigs
16 WScript.Echo VbCrLf & _
17 " Network Adapter " & objNicConfig.Index & VbCrLf & _
18 " " & objNicConfig.Description
19 intSetWINSServer = objNicConfig.SetWINSServer(strWINSPrimaryServer, _
20 strWINSSecondaryServer)
21 If intSetWINSServer = 0 Then
22 WScript.Echo " Successfully set WINS servers."
23 ElseIf intSetWINSServer = 1 Then
24 WScript.Echo " Successfully set WINS servers." & _
25 VbCrLf & " Must reboot."
26 Else
27 WScript.Echo " Unable to set WINS servers."
28 End If
29Next
30
31 WScript.Echo VbCrLf & String(80, "-")
32
33 Set colNicConfigs = objWMIService.ExecQuery _
34 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
35
36 For Each objNicConfig In colNicConfigs
37 WScript.Echo VbCrLf & _
38 " Network Adapter " & objNicConfig.Index & VbCrLf & _
39 " " & objNicConfig.Description
40 WScript.Echo " Primary WINS Server: " & objNicConfig.WINSPrimaryServer
41 WScript.Echo " Secondary WINS Server: " & _
42 objNicConfig.WINSSecondaryServer
43Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine
ähnliche Ausgabe wie die folgende angezeigt:
C:\scripts>wins-setservers.vbs
Host Name: .
Attempting to set WINS primary and secondary servers ...
Network Adapter 1
3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet

Seite 120 von 169


Scheduler Miniport
Successfully set WINS servers.
--------------------------------------------------------------------------------
Network Adapter 1
3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet
Scheduler Miniport
Primary WINS Server: 192.168.0.1
Secondary WINS Server: 192.168.0.2

Szenario: Vorbereiten eines Clients für WINS


Wenn Sie WINS auf einem Client konfigurieren möchten, müssen Sie zuerst entscheiden, ob und wie
NetBIOS aktiviert werden soll. Wenn NetBIOS deaktiviert ist, können Sie WINS nicht verwenden. Ist
NetBIOS über DHCP aktiviert, kann der Client die korrekten Einstellungen vom DHCP-Server
abrufen. Wenn NetBIOS jedoch unabhängig von DHCP aktiviert ist, müssen Sie WINS aktivieren
sowie den primären und sekundären WINS-Server zuweisen.
Mithilfe der im Abschnitt "Skripterstellung für die Verwaltung von Remotenetzwerken" dieses
Dokumentes beschriebenen Verfahren können Sie dieses Skript problemlos zur Ausführung für
mehrere Clients erweitern.

Schritte zur Skripterstellung


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 43 ermöglicht Ihnen das Konfigurieren von Einstellungen für NetBIOS und
WINS in einem Änderungsblock am Anfang des Listings. Zunächst wird der Modus von NetBIOS
über TCP/IP auf jedem Netzwerkadapter festgelegt. Wenn NetBIOS aktiviert ist (allerdings nicht über
DHCP), aktiviert das Skript WINS, konfiguriert die WINS-Einstellungen und legt die IP-Adressen der
WINS-Server für den zu verwendenden Client fest.
1.Definieren Sie Konstanten zur Darstellung der drei möglichen Werte für die
TcpipNetbiosOptions-Eigenschaft.
2.Erstellen Sie eine Variable zur Angabe des Computernamens.
3.Erstellen Sie Variablen zur Angabe der Parameter, die an die EnableWINS-Methode übergeben
werden sollen.
4.Erstellen Sie Variablen zur Angabe der IP-Adressen des primären und sekundären WINS-Servers,
die an die EnableWINS-Methode übergeben werden sollen.
5.Initialisieren Sie zwei Variablen mit dem Wert False.

Seite 121 von 169


6.Stellen Sie eine Verbindung zum WMI-Dienst her.
7.Rufen Sie die Unterroutine GetSettings auf, die die aktuellen NetBIOS- und WINS-Einstellungen
abruft.
8.Rufen Sie die SetNetbios-Funktion auf, die den Modus für NetBIOS über TCP/IP auf den Wert
festlegt, der in der Variablen intNetbiosTcpipSet angegeben wird.
9.Wenn die resultierende Einstellung für NetBIOS über TCP/IP TCP/IP ENABLE_NETBIOS
lautet, rufen Sie die SetWins-Funktion auf.
Lautet die Einstellung ENABLE_NETBIOS_VIA_DHCP bzw. DISABLE_NETBIOS,
konfiguriert das Skript die WINS-Einstellungen nicht.
10.Nach Abschluss eventueller Änderungen an den NetBIOS- oder WINS-Einstellungen rufen Sie die
Unterroutine GetSettings erneut auf.
11.Die Unterroutine GetSettings ruft die Werte für alle NetBIOS- oder WINS-Einstellungen ab und
zeigt sie an.
12.Die SetNetbios-Funktion überprüft die aktuelle Einstellung der TcpipNetbiosOptions-
Eigenschaft. Wenn diese Eigenschaft mit der in der Variablen intNetbiosTcpipSet angegebenen
Einstellung nicht identisch ist, ändert SetNetbios die Einstellung auf den Wert von
intNetbiosTcpipSet. Die Funktion gibt den Wert True zurück, wenn der Wert für NetBIOS over
TCP/IP festgelegt wurde; wenn dieser Wert nicht festgelegt wurde, gibt sie False zurück.
13.Die SetWins-Funktion ruft zuerst die EnableWINS-Methode auf und verwendet dazu die
Parameter, die in den Variablen am Anfang des Skripts angegeben wurden. Anschließend ruft die
Funktion die SetWINSServer-Methode mit Parametern auf, die die IP-Adressen des primären und
sekundären WINS-Servers angeben. Die Funktion gibt den Wert True zurück, wenn sowohl
EnableWINS als auch SetWINSServer den Wert 0 zurückgegeben haben; wenn eine der beiden
Methoden einen anderen Wert als 0 zurückgegeben hat, gibt die Funktion False zurück.

Listing 43 Wins-client.vbs

Seite 122 von 169


1 On Error Resume Next
2
3 Const ENABLE_NETBIOS_VIA_DHCP = 0
4 Const ENABLE_NETBIOS = 1
5 Const DISABLE_NETBIOS = 2
6
7 strComputer = "."
8 blnDNSEnabledForWINSResolution = True
9 blnWINSEnableLMHostsLookup = True
10 strWINSHostLookupFile = ""
11 strWINSScopeID = "WORKGROUP"
12 strWINSPrimaryServer = "192.168.0.1"
13 strWINSSecondaryServer = "192.168.0.2"
14 intNetbiosTcpipSet = ENABLE_NETBIOS
15 blnNetbiosSet = False
16 blnWinsSet = False
17
18 Set objWMIService = GetObject("winmgmts:" _
19 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
20
21 WScript.Echo VbCrLf & "Host Name: " & strComputer
22
23 WScript.Echo VbCrLf & "NetBIOS and WINS settings before:"
24
25 GetSettings
26
27 WScript.Echo VbCrLf & String(80, "-")
28
29 blnNetbiosSet = SetNetbios
30 If blnNetbiosSet = True Then
31 Select Case intNetbiosTcpipSet
32 Case 0
33 WScript.Echo VbCrLf & " NetBIOS settings obtained from the DHCP " & _
34 "server." & VbCrLf & " WINS parameters not set."
35 Case 1
36 WScript.Echo VbCrLf & " NetBIOS over TCP/IP enabled." & _
37 VbCrLf & " Setting WINS parameters ..."
38 blnWinsSet = SetWins
39 If blnWinsSet = True Then
40 WScript.Echo VbCrLf & " All WINS parameters set."
41 Else
42 WScript.Echo VbCrLf & " Unable to set all WINS parameters."
43 End If
44 Case 2
45 WScript.Echo VbCrLf & " NetBIOS over TCP/IP disabled." & _
46 VbCrLf & " WINS parameters not set."
47 Case Else
48 WScript.Echo VbCrLf & " Could not determine setting for NetBIOS " & _
49 "Over TCP/IP." & VbCrLf & " WINS parameters not set."
50 End Select
51 Else
52 WScript.Echo VbCrLf & " NetBIOS Over TCP/IP could not be enabled" & _
53 VbCrLf & " WINS parameters not set."
54 End If
55
56 WScript.Echo VbCrLf & String(80, "-")
57
58 WScript.Echo VbCrLf & "NetBIOS and WINS settings after:"
59
60 GetSettings
61
62 '******************************************************************************
63
64 Sub GetSettings
65 Seite 123 von 169
66 Set colNicConfigs = objWMIService.ExecQuery _
67 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
68
Teil 7: Erstellen von Skripts für andere Netzwerkprotokolle
Veröffentlicht: 07. Dez 2004
In diesem Abschnitt wird die Verwendung von WMI für die Skriptverwaltung zahlreicher TCP/IP- und
zugehöriger Protokolle auf Clients erörtert. Dies umfasst TCP/IP-Filter, routingbezogene ARP-, IP-
und TCP-Einstellungen, IPX-Einstellungen (Internetwork Packet Exchange) sowie die Aufzählung von
auf Hosts ausgeführten Netzwerkprotokollen. Anhand der Beispielskripts werden weitere
Eigenschaften und Methoden der Klasse Win32_NetworkAdapterConfiguration aufgezeigt, und es
wird die neue WMI-Klasse Win32_NetworkProtocol vorgestellt.
In diesem Abschnitt werden die Schritte der Skripterstellung und Beispielskripts für diese
protokollbasierten Aufgaben bereitgestellt:

Verwalten von TCP/IP-Filtereinstellungen

Verwalten weiterer TCP/IP-Einstellungen
Dies umfasst Abschnitte über das Verwalten und Abrufen von ARP-Einstellungen, TCP-Einstellungen
und IP-Paketeinstellungen.

Verwalten von IPX

Auflisten der Netzwerkprotokolle auf einem Computer

Verwalten von TCP/IP-Filtereinstellungen


Bekanntermaßen treten leider immer mehr Netzwerksicherheitsrisiken wie Viren und Würmer auf. In
diesem Zusammenhang hat Internet Protocol Security (IPSec – Internetprotokollsicherheit) als
integrierte Gruppe interoperabler, kryptografiebasierter Sicherheitsdienste für den Datenverkehr auf
Netzwerkebene zwischen TCP/IP-Knoten zunehmend an Akzeptanz gewonnen. Informationen zur
Basisarchitektur von IPSec finden Sie in dem von der IETF (Internet Engineering Task Force)
bereitgestellten Dokument, und zwar in RFC 2401, " Security Architecture for the Internet Protocol ",
unter http://go.microsoft.com/fwlink/?LinkId=24797 (nur auf Englisch verfügbar).
WMI ermöglicht mithilfe mehrerer Eigenschaften und Methoden der Klasse
Win32_NetworkAdapterConfiguration das Erstellen von Skripts zum Abrufen und Konfigurieren
von TCP/IP-Clienteinstellungen, die sich auf einen Aspekt von IPSec, auf TCP/IP-Filter, beziehen.
Der erste Schritt beim Implementieren von TCP/IP-Filtern mit WMI besteht darin, die Filter zu
aktivieren. Legen Sie hierzu die IPFilterSecurityEnabled-Eigenschaft mithilfe der
EnableIPFilterSec-Methode auf True fest. Nach dem Aktivieren der TCP/IP-Filter können Sie die zu
filternden TCP- und UDP-Ports (User Datagram Protocol) festlegen und bestimmte Protokolle über IP
zulassen oder ausschließen. Weitere Informationen zu TCP/IP-Filtern finden Sie im WMI-SDK in den
Themen zu den Methoden "EnableIPSec" und "EnableIPFilterSec" der Klasse
"Win32_NetworkAdapterConfiguration" unter http://go.microsoft.com/fwlink/?LinkId=29991 (nur
auf Englisch verfügbar).
Vorsicht
Stellen Sie vor dem Ändern dieser Einstellungen sicher, dass die neue Konfiguration mit den in Ihrem
Netzwerk implementierten TCP/IP-Filtern übereinstimmt. Überprüfen Sie derartige Änderungen
grundsätzlich zuerst in einem Testnetzwerk, bevor Sie diese in einer Produktivumgebung vornehmen.
Beachten Sie, dass die zwei TCP/IP-Filtermethoden EnableIPSec und EnableIPFilterSec nicht mit
der Funktionsteilung zwischen den zwei Einstellungen IP-Sicherheit und TCP/IP-Filter

Seite 124 von 169


übereinstimmten (Sie finden die Einstellungen unter Windows 2000 im Dialogfeld Erweiterte
TCP/IP-Einstellungen auf der Registerkarte Optionen. Unter Windows XP und Windows Server
2003 wird auf der Registerkarte Optionen nur eine Option, TCP/IP-Filterung, aufgeführt - siehe
Abbildung 13.)

Abbildung 13 Verwalten der TCP/IP-Filterung über die Windows-Benutzeroberfläche


Bild maximieren
In diesem Abschnitt werden zunächst zwei Beispielskripts aufgeführt. Anhand dieser Beispiele wird
aufgezeigt, wie Sie diese Methoden separat verwenden. Anschließend wird in diesem Abschnitt ein
drittes Skript bereitgestellt, das die Methoden miteinander kombiniert, um aufzuzeigen, wie TCP/IP-
Filter aktiviert und Port- und Protokollfilter innerhalb desselben Skripts festgelegt werden (Aufgaben,
die Administratoren häufig durchführen möchten). Das Skript prüft zuerst, ob TCP/IP-Filter aktiviert
sind. Ist dies nicht der Fall, werden diese aktiviert. Anschließend werden die Filter festgelegt, die den
Zugriff für die angegebenen TCP- und UDP-Ports sowie für die angegebenen IP-Protokolle erteilen.
In Tabelle 25 werden die TCP/IP-Filtereigenschaften für die Klasse
Win32_NetworkAdapterConfiguration beschrieben.

Tabelle 25 TCP/IP-Filtereigenschaften für die Klasse "Win32_NetworkAdapterConfiguration"


Eigenschaft Typ Beschreibung
IPFilterSecurityEnabledBoolean-Wert TRUE gibt an, dass die IP-Portsicherheit global für alle IP-
Netzwerkadapter aktiviert ist und die Sicherheitswerte der
einzelnen Netzwerkadapter aktiv sind. Diese Eigenschaft
wird mit folgenden Eigenschaften verwendet:
IPSecPermitTCPPorts, IPSecPermitUDPPorts und
IPSecPermitIPProtocols. FALSE gibt an, dass die IP-
Filtersicherheit für alle Netzwerkadapter deaktiviert ist und
der gesamte Port- und Protokollverkehr nicht gefiltert wird.

Seite 125 von 169


IPSecPermitIPProtocolsZeichenfolgenarrayArray der Protokolle, die über IP ausgeführt werden
können. Die Liste der Protokolle wird mit der
EnableIPSec-Methode definiert. Diese Liste ist leer oder
enthält numerische Werte. Der Wert 0 gibt an, dass alle
Protokolle über Zugriffsrechte verfügen. Eine leere
Zeichenfolge gibt an, dass kein Protokoll ausgeführt
werden kann, wenn die IPFilterSecurityEnabled-
Eigenschaft auf TRUE festgelegt ist.
IPSecPermitTCPPorts ZeichenfolgenarrayArray der Ports mit Zugriffsberechtigungen für TCP. Die
Liste der Protokolle wird mit der EnableIPSec-Methode
definiert. Diese Liste ist leer oder enthält numerische
Werte. Der Wert 0 gibt an, dass alle Ports über
Zugriffsrechte verfügen. Eine leere Zeichenfolge gibt an,
dass keinem Port die Zugriffsberechtigung erteilt wurde,
wenn die IPFilterSecurityEnabled-Eigenschaft auf TRUE
festgelegt ist.
IPSecPermitUDPPorts ZeichenfolgenarrayArray der Ports mit UDP-Zugriffsberechtigungen (User
Datagram Protocol). Die Liste der Protokolle wird mit der
EnableIPSec-Methode definiert. Diese Liste ist leer oder
enthält numerische Werte. Der Wert 0 gibt an, dass alle
Ports über Zugriffsrechte verfügen. Eine leere Zeichenfolge
gibt an, dass keinem Port die Zugriffsberechtigung erteilt
wurde, wenn die IPFilterSecurityEnabled-Eigenschaft auf
TRUE festgelegt ist.
Alle Eigenschaften in der vorstehenden Tabelle sind schreibgeschützt.
In Tabelle 26 werden die TCP/IP-Filtermethoden und die entsprechenden Parameter für die Klasse
Win32_NetworkAdapterConfiguration aufgeführt.

Tabelle 26 TCP/IP-Filtermethoden für "Win32_NetworkAdapterConfiguration"


Methode Parameter Beschreibung
EnableIPFilterSec IPFilterSecurityEnabled – Statische Methode. Aktiviert TCP/IP-Filter global für
Boolean-Wert alle IP-Netzwerkadapter. Wenn die Sicherheit aktiviert
ist, können die funktionalen Sicherheitseigenschaften
für jeden Netzwerkadapter mit der für Netzwerkadapter
spezifischen EnableIPSec-Methode gesteuert werden.
EnableIPSec IPSecPermitTCPPorts – Aktiviert TCP/IP-Filter auf einem TCP/IP-aktivierten
Zeichenfolgenarray Netzwerkadapter. Die Ports werden nur geschützt,
wenn die IPFilterSecurityEnabled-Eigenschaft in
IPSecPermitUDPPorts – Win32_NetworkAdapterConfiguration auf TRUE
Zeichenfolgenarray festgelegt ist.
IPSecPermitIPProtocols –
Zeichenfolgenarray
Alle Methoden in der vorstehenden Tabelle geben eine positive ganze Zahl zurück:

0 bedeutet: erfolgreicher Abschluss.

Seite 126 von 169



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.
Das Befehlszeilentool Ipseccmd.exe und der Befehl netsh ipsec stellen umfassendere Funktionen für
die Einsatzmöglichkeiten von IPSec bereit.

Anzeigen von TCP/IP-Filtereinstellungen


Zum Abrufen von TCP/IP-Filtereinstellungen stellt die Klasse
Win32_NetworkAdapterConfiguration mehrere für Netzwerkadapter spezifische Eigenschaften
bereit. IPFilterSecurityEnabled ist jedoch eine globale Eigenschaft, die für alle IP-Netzwerkadapter
gilt. Beachten Sie, dass IPFilterSecurityEnabled die veraltete IPPortSecurityEnabled-Eigenschaft
ersetzt.
Die Eigenschaften IPSecPermitIPProtocols, IPSecPermitTCPPorts und IPSecPermitUDPPorts
geben jeweils Zeichenfolgenarrays zurück, die die Ports oder Protokolle darstellen, denen
Zugriffsberechtigungen erteilt wurden. Dabei gibt der Wert 0 an, dass alle Protokolle oder Ports über
Zugriffsrechte verfügen, während eine leere Zeichenfolge angibt, dass keinem Port die
Zugriffsberechtigung erteilt wurde.

Schritte zur Skripterstellung


In dem Skript in Listing 44 werden die TCP/IP-Filtereinstellungen aller installierten Netzwerkadapter
mit den Eigenschaften der Klasse Win32_NetworkAdapterConfiguration angezeigt.
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, 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.Zeigen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die Indexnummer, die
Beschreibung und den Wert für die IPFilterSecurityEnabled-Eigenschaft an.
5.Wenn die Eigenschaften IPSecPermitIPProtocols, IPSecPermitTCPPorts und
IPSecPermitUDPPorts nicht den Wert Null aufweisen, sollten Sie die zurückgegebenen Arrays
durchlaufen und die zugehörigen Werte anzeigen.

Listing 44 Ipfiltersettings.vbs

Seite 127 von 169


1 On Error Resume Next
2
3 strComputer = "."
4
5 Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
6 Set colNicConfig = objWMIService.ExecQuery _
7 ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")
8
9 For Each objNicConfig in colNicConfig
10 WScript.Echo VbCrLf & "Network Adapter " & objNicConfig.Index & _
11 VbCrLf & " " & objNicConfig.Description
12 WScript.Echo " IP Filter Security Enabled: " & _
13 objNicConfig.IPFilterSecurityEnabled
14 WScript.Echo " Protocols Permitted over IP:"
15 If Not IsNull(objNicConfig.IPSecPermitIPProtocols) Then
16 For Each strIPProtocol In objNicConfig.IPSecPermitIPProtocols
17 WScript.Echo " " & strIPProtocol
18 Next
19 End If
20 WScript.Echo " TCP Ports Permitted:"
21 If Not IsNull(objNicConfig.IPSecPermitTCPPorts) Then
22 For Each strTCPPort In objNicConfig.IPSecPermitTCPPorts
23 WScript.Echo " " & strTCPPort
24 Next
25 End If
26 WScript.Echo " UDPPorts Permitted:"
27 If Not IsNull(objNicConfig.IPSecPermitUDPPorts) Then
28 For Each strUDPPort In objNicConfig.IPSecPermitUDPPorts
29 WScript.Echo " " & strUDPPort
30 Next
31 End If
32Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche
Ausgabe wie die folgende angezeigt:
C:\scripts>ipfiltersettings.vbs
Network Adapter 1
3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet
Scheduler Miniport
IP Filter Security Enabled: False
Protocols Permitted over IP:
0
TCP Ports Permitted:
0
UDPPorts Permitted:
0

Aktivieren von TCP/IP-Filtern mithilfe von "EnableIPFilterSec"

Seite 128 von 169


für alle IP-Netzwerkadapter. Nachdem Sie die TCP/IP-Filter für alle Netzwerkadapter aktiviert haben,
können Sie für jeden Netzwerkadapter bestimmte TCP/IP-Filtereinstellungen mit der EnableIPSec-
Methode konfigurieren.
EnableIPFilterSec ist eine statische Methode, die für alle Instanzen der Klasse
Win32_NetworkAdapterConfiguration (also für alle Netzwerkadapter) gilt. Dies bedeutet, dass Sie
die Get()-Methode des SwbemServices-Objekts zum Abrufen der Klasse
Win32_NetworkAdapterConfiguration verwenden können, statt die Instanzen der Klasse mithilfe
der ExecQuery()-Methode abzurufen. Anstatt die Methode einfach ohne Parameter aufzurufen, wie bei
EnableDHCP, müssen Sie der IPFilterSecurityEnabled-Eigenschaft einen booleschen Wert (True
oder False) zuweisen.
Wenn das Skript nur statische Methoden aufruft, können Sie auch kompaktere Möglichkeiten der
Bindung an die Klasse Win32_NetworkAdapterConfiguration nutzen. Sie können beispielsweise
eine der folgenden Zeilen verwenden:
Set objNicConfig = GetObject("winmgmts:\\" & strComputer & _
"\root\cimv2:Win32_NetworkAdapterConfiguration")
Set objNicConfig = GetObject("winmgmts:").Get _
("Win32_NetworkAdapterConfiguration")
Schritte zur Skripterstellung
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 45 aktiviert die IP-Filtersicherheit für alle installierten Netzwerkadapter mithilfe
der EnableIPFilterSec-Methode der Klasse Win32_NetworkAdapterConfiguration. Mit dieser
Methode wird die IPFilterSecurityEnabled-Eigenschaft auf True festgelegt. Unter Windows XP und
Windows Server 2003 wird die IP-Filtersicherheit im Dialogfeld Erweiterte TCP/IP-Einstellungen
auf der Registerkarte Optionen als TCP/IP-Filterung bezeichnet.
1.Erstellen Sie eine Variable zur Angabe des Computernamens.
2.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace
root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.
3.Verwenden Sie die statische Get-Methode des SWbemServices-Objekts zum Abrufen eines
SWbemObject-Objekts, das die Klasse Win32_NetworkAdapterConfiguration darstellt.
Die an diesem Objekt vorgenommenen Änderungen gelten für alle Netzwerkadapter auf dem
Computer.
4.Rufen Sie die statische EnableIPFilterSec-Methode der Klasse
Win32_NetworkAdapterConfiguration auf, und weisen Sie ihr den booleschen Parameter True zu.
5.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine Erfolgsnachricht
oder eine Fehlermeldung an.

Listing 45 Ipfilter-enableipfilter.vbs

Seite 129 von 169


1 On Error Resume Next
2
3 strComputer = "."
4
5 Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
6 Set objNicConfig = objWMIService.Get("Win32_NetworkAdapterConfiguration")
7
8 If Not objNicConfig.IPFilterSecurityEnabled Then
9 intFilterReturn = objNicConfig.EnableIPFilterSec(True)
10 If intFilterReturn = 0 Then
11 WScript.Echo "IP Filtering enabled for all network adapters."
12 ElseIf intFilterReturn = 1 Then
13 WScript.Echo "IP Filtering enabled for all network adapters." & _
14 VbCrLf & "Must reboot for changes to take effect."
15 Else
16 WScript.Echo "Unable to enable IP Filtering."
17 End If
18Else
19 WScript.Echo "IP Filtering already enabled."
20End If
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche
Ausgabe wie die folgende angezeigt:
C:\scripts>ipfilter-enableipfilter.vbs
IP Filter Security Enabled:
IP Filtering enabled for all network adapters.
Must reboot for changes to take effect.

Implementieren von TCP/IP-Filtern mithilfe von "EnableIPSec"


Nachdem Sie die TCP/IP-Filter mithilfe von EnableIPFilterSec aktiviert haben, können Sie die
EnableIPSec-Methode verwenden, um Zugriffsberechtigungen für den TCP- und UDP-Datenverkehr
für bestimmte Ports zu erteilen bzw. zu verweigern. Sie können auch Protokolle, die über IP ausgeführt
werden, zulassen oder ausschließen. Diese spezifischen Sicherheitsoptionen werden mit der
EnableIPSec-Methode für jeden Netzwerkadapter festgelegt.
Beachten Sie, dass die Funktionalität Methoden EnableIPSec und EnableIPFilterSec im Bezug auf
die zwei Einstellungen IP-Sicherheit und TCP/IP-Filter vertauscht ist. (Sie finden diese Einstellungen
unter Windows 2000 im Dialogfeld Erweiterte TCP/IP-Einstellungen auf der Registerkarte
Optionen. Unter Windows XP und Windows Server 2003 sind diese zwei Einstellungen auf der
Registerkarte Optionen in einer einzigen Option, TCP/IP-Filterung, zusammengefasst.)
Auf der Registerkarte Optionen können Sie durch Klicken auf die Schaltfläche Eigenschaften das
Dialogfeld TCP/IP-Filterung (Windows 2000: TCP/IP-Filter) öffnen. Dieses Dialogfeld enthält das
Kontrollkästchen TCP/IP-Filter aktivieren (alle Adapter) (Windows 2000: TCP/IP-Filter
aktivieren (alle Netzwerkkarten)) und ermöglicht separate Einstellungen für TCP-Ports, UDP-Ports
und IP-Protokolle. Sie können für jede einzelne dieser Optionen entweder Alle zulassen oder Nur
zulassen auswählen, so dass Sie die zulässigen Ports oder Protokolle angeben können.

Schritte zur Skripterstellung


Das Skript in Listing 46 aktiviert die IP-Filtersicherheit für bestimmte Netzwerkadapter mithilfe der
EnableIPSec-Methode. Dieses Skript erteilt die Zugriffsberechtigungen für alle TCP-, UDP- und IP-
Ports.

Seite 130 von 169


Wichtig
Vor dem Ausführen dieses Skripts müssen Sie die IPFilterSecurityEnabled-Eigenschaft mithilfe der
EnableIPFilterSec-Methode der Klasse Win32_NetworkAdapterConfiguration auf True festlegen.
Informationen zur Durchführung dieses Schrittes finden Sie unter “Aktivieren von TCP/IP-Filtern
mithilfe von EnableIPFilterSec ” weiter oben in diesem Dokument.
Bei den drei Parametern von EnableIPSec, IPSecPermitIPProtocols, IPSecPermitTCPPorts und
IPSecPermitUDPPorts gibt der Wert 0 an, dass alle Protokolle oder Ports über Zugriffsrechte
verfügen, und ein NULL-Wert (keine leere Zeichenfolge, sondern ein leerer Array) gibt an, dass
keinem Protokoll oder Port die Zugriffsberechtigung erteilt wurde. Ansonsten muss es sich bei
IPSecPermitTCPPorts und IPSecPermitUDPPorts um Zeichenfolgenarrays handeln, die die Ports
darstellen, denen Zugriffsberechtigungen erteilt werden, und IPSecPermitIPProtocols muss ein
Zeichenfolgenarray sein, das die zulässigen Protokolle darstellt.
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.
1.Definieren Sie eine Konstante, um alle Ports und Protokolle zuzulassen.
2.Erstellen Sie eine Variable zur Angabe des Computernamens.
3.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace
root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.
4.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.
5.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben aus.
6.Weisen Sie die ALLOW_ALL-Konstante als Parameter zu den Arrays der zulässigen TCP- und
UDP-Ports und der zulässigen IP-Protokolle zu.
Sie können das Skript ändern, so dass nur bestimmte Ports und Protokolle angegeben werden.
7.Rufen Sie die EnableIPSec-Methode der Klasse Win32_NetworkAdapterConfiguration auf, und
weisen Sie ihr die Arrays der zulässigen TCP- und UDP-Ports und der zulässigen IP-Protokolle zu.
8.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine Erfolgsnachricht
oder eine Fehlermeldung an.
Listing 46 Ipfilter-enableipsec.vbs

Seite 131 von 169


1 On Error Resume Next
2
3 Const ALLOW_ALL = 0
4 arrPermittedTCPPorts = Array(ALLOW_ALL)
5 arrPermittedUDPPorts = Array(ALLOW_ALL)
6 arrPermittedIPProtocols = Array(ALLOW_ALL)
7
8 strComputer = "."
9
10 Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
11Set colNicConfig = objWMIService.ExecQuery _
12 ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")
13
14 For Each objNicConfig in colNicConfig
15 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index
16 If objNicConfig.IPFilterSecurityEnabled Then
17 intIPSecReturn = objNicConfig.EnableIPSec(arrPermittedTCPPorts, _
18 arrPermittedUDPPorts, arrPermittedIPProtocols)
19 If intIPSecReturn = 0 Then
20 WScript.Echo " IP Filtering enabled for specified ports and protocols."
21 ElseIf intIPSecReturn = 1 Then
22 WScript.Echo " IP Filtering enabled for specified ports and protocols." _
23 & VbCrLf & " Must reboot for changes to take effect."
24 Else
25 WScript.Echo " Unable to enable IP Filtering for " & _
26 "specified ports and protocols."
27 End If
28 Else
29 WScript.Echo " IP Filtering not enabled. Must enable before " & _
30 "specifying port and protocols."
31 End If
32Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche
Ausgabe wie die folgende angezeigt:
C:\scripts>ipfilter-enableipsec.vbs
Network Adapter 1
IP Filtering enabled for specified ports and protocols.
Must reboot for changes to take effect.

Aktivieren und Implementieren von TCP/IP-Filtern in einem einzigen Skript


In diesem Skript werden die in den zwei vorherigen Abschnitten erörterten Verfahren
zusammengefasst. Dabei wird aufgezeigt, wie durch die Zusammenfügung der Methoden
EnableIPFilterSec und EnableIPSec TCP/IP-Filter aktiviert und spezifische Einstellungen für alle
Netzwerkadapter konfiguriert werden.
Das Skript prüft zuerst, ob TCP/IP-Filter aktiviert sind. Ist dies nicht der Fall, wird EnableIPFilterSec
aufgerufen. Anschließend werden die zulässigen TCP- und UDP-Ports und die zulässigen IP-Protokolle
festgelegt.
Zwecks Vereinfachung ist dieses Skript so ausgelegt, dass für jeden Netzwerkadapter dieselben
EnableIPSec-Parameter festgelegt werden. Bei Verwendung eines komplexeren Skripts könnten auch
unterschiedliche Einstellungen für bestimmte Netzwerkadapter festgelegt werden.
Dieses Skript definiert zwei Konstanten, die als Parameter zu EnableIPSec zugewiesen werden.
Seite 132 von 169

Der Wert von ALLOW_ALL ist eine Zeichenfolge mit der Zahl 0, die alle Ports oder Protokolle
zulässt. Diese Konstante wird EnableIPSec als Parameter für die zulässigen UDP-Ports zugewiesen.

Der Wert von ALLOW_NONE ist eine leere Zeichenfolge (""), die allen Ports oder Protokollen die
Berechtigung verweigert. Diese Konstante wird EnableIPSec als Parameter für die zulässigen IP-
Protokolle zugewiesen.
Für die zulässigen TCP-Ports übergibt das Skript der Methode direkt zwei literale Zeichenfolgenwerte
(80 und 443).

Schritte zur Skripterstellung


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.
1.Definieren Sie eine Konstante, um alle Ports und Protokolle zuzulassen (0), und definieren Sie eine
Konstante, um keine Ports und Protokolle zuzulassen (leere Zeichenfolge).
2.Erstellen Sie eine Konstante für den Wert, der den gesamten Datenverkehr zulässt, und erstellen Sie
eine Variable zur Angabe des Computernamens.
3.Legen Sie die boolesche Variable, die den Status der IPFilterSecurityEnabled-Eigenschaft angibt,
auf False fest.
4.Weisen Sie Port 80 und Port 443 zum Array der zulässigen TCP-Ports zu.
5.Weisen Sie die ALLOW_NONE-Konstante zum Array der zulässigen UDP-Ports zu.
6.Weisen Sie die ALLOW_ALL-Konstante zu den Arrays der zulässigen IP-Protokolle zu.
7.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace
root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.
8.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 eine Iteration durch die Auflistung der Netzwerkadapter durch, und zeigen Sie die
aktuellen TCP/IP-Filtereinstellungen an.
10.Wenn die IPFilterSecurityEnabled-Eigenschaft auf False festgelegt ist, rufen Sie die statische
Get-Methode des SWbemServices-Objekts auf, um ein SWbemObject-Objekt abzurufen, das die
Klasse Win32_NetworkAdapterConfiguration darstellt.
Die an diesem Objekt vorgenommenen Änderungen gelten für alle Netzwerkadapter auf dem
Computer.
11.Rufen Sie die EnableIPFilterSec-Methode der Klasse Win32_NetworkAdapterConfiguration in
dem Klassenobjektverweis auf, und weisen Sie ihr den Parameter True zu.

Seite 133 von 169


12.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine Erfolgsnachricht
oder eine Fehlermeldung an.
13.Fragen Sie die Klasse Win32_NetworkAdapterConfiguration mithilfe der ExecQuery-Methode
erneut ab, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird.
14.Führen Sie erneut eine Iteration durch die Auflistung der Netzwerkadapter durch, und rufen Sie
dabei für jeden Netzwerkadapter die EnableIPSec-Methode der Klasse
Win32_NetworkAdapterConfiguration auf, und weisen Sie ihr die Arrays der zulässigen TCP-
und UDP-Ports und der zulässigen IP-Protokolle zu.
15.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine Erfolgsnachricht
oder eine Fehlermeldung an.
16.Fragen Sie die Klasse Win32_NetworkAdapterConfiguration mithilfe der ExecQuery-Methode
erneut ab, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird.
17.Führen Sie eine Iteration durch die Auflistung der Netzwerkadapter durch, und zeigen Sie die
TCP/IP-Filtereinstellungen einschließlich aller Änderungen an.

Listing 47 Ipfilter-enable.vbs

Seite 134 von 169


1 On Error Resume Next
2
3 Const ALLOW_ALL = "0"
4 Const ALLOW_NONE = ""
5
6 strComputer = "."
7 blnIPFilterSecurityEnabled = "False"
8 arrPermittedTCPPorts = Array("80", "443")
9 arrPermittedUDPPorts = Array(ALLOW_NONE)
10 arrPermittedIPProtocols = Array(ALLOW_ALL)
11
12 Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
13 Set colNicConfig = objWMIService.ExecQuery _
14 ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")
15 WScript.Echo VbCrLf & "Settings Before Enabling IP Filtering"
16
17 For Each objNicConfig in colNicConfig
18 blnIPFilterSecurityEnabled = objNicConfig.IPFilterSecurityEnabled
19 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index & VbCrLf & _
20 " IP Filtering Enabled: " & blnIPFilterSecurityEnabled
21 WScript.Echo " TCP Ports:"
22 If Not IsNull(objNicConfig.IPSecPermitTCPPorts) Then
23 For Each strTCPPort In objNicConfig.IPSecPermitTCPPorts
24 WScript.Echo " " & strTCPPort
25 Next
26 End If
27 WScript.Echo " UDP Ports:"
28 If Not IsNull(objNicConfig.IPSecPermitUDPPorts) Then
29 For Each strUDPPort In objNicConfig.IPSecPermitUDPPorts
30 WScript.Echo " " & strUDPPort
31 Next
32 End If
33 WScript.Echo " IP Protocols:"
34 If Not IsNull(objNicConfig.IPSecPermitIPProtocols) Then
35 For Each strIPProtocol In objNicConfig.IPSecPermitIPProtocols
36 WScript.Echo " " & strIPProtocol
37 Next
38 End If
39 Next
40
41 If blnIPFilterSecurityEnabled = False Then
42 WScript.Echo VbCrLf & "Enabling IP Filtering ..."
43 Set objAllNicsConfig = objWMIService.Get("Win32_NetworkAdapterConfiguration")
44 intFilterReturn = objAllNicsConfig.EnableIPFilterSec(True)
45 If intFilterReturn = 0 Then
46 WScript.Echo " IP Filtering enabled for all network adapters."
47 SpecifyFilters
48 ElseIf intFilterReturn = 1 Then
49 WScript.Echo " IP Filtering enabled for all network adapters." _
50 & VbCrLf & " Must reboot for changes to take effect."
51 SpecifyFilters
52 Else
53 WScript.Echo " Unable to enable IP Filtering."
54 End If
55 Else
56 WScript.Echo VbCrLf & "IP Filtering already enabled for all network adapters."
57 SpecifyFilters
58 End If
59
60 Set colNicConfig = objWMIService.ExecQuery _
61 ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")
62 WScript.Echo VbCrLf & "Settings After Enabling IP Filtering"
63
64 For Each objNicConfig in colNicConfig
65 Seite 135 &von
WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index 169 & _
VbCrLf
66 " IP Filtering Enabled: " & objNicConfig.IPFilterSecurityEnabled
67 WScript.Echo " TCP Ports:"
68 If Not IsNull(objNicConfig.IPSecPermitTCPPorts) Then
Teil 8: Verwenden von fortgeschrittenen Verfahren für die
Verwaltung von Netzwerken
Veröffentlicht: 07. Dez 2004
Neben Klassen wie Win32_NetworkAdapterConfiguration und und ihren Funktionen enthält WMI noch w
Klassen und Funktionen, die sich insbesondere bei der Verwaltung von Netzwerkclients als nützlich erweisen
Abschnitt befasst sich mit den fortgeschrittenen Skripterstellungstechniken und enthält die notwendigen
Einzelschritte ebenso wie Beispielskripts für die folgenden Aufgaben:

Koordinieren der Systemzeit über das Netzwerk
Verschiedene Klassen ermöglichen die Koordination von Systemdatum und -uhrzeit mithilfe von Skripts.

Ändern von Netzwerkeinstellungen in der Registrierung
Auf die Windows-Registrierung einschließlich aller Einstellungen kann unter Verwendung des WMI-Anbiet
die Systemregistrierung per Skript zugegriffen werden.
Diese fortgeschrittenen Skripterstellungstechniken können außer für die TCP/IP-Vernetzung auch für die Erst
von Skripts für andere Bereiche der Systemverwaltung eingesetzt werden.

Koordinieren der Systemzeit über das Netzwerk


Einige Funktionen des Betriebssystems und von Client-/Serveranwendungen sind von synchronisierten Datum
Uhrzeitangaben auf den Computern im Netzwerk abhängig. Beispielsweise führt der Vergleich der Zeitstemp
Dateien oder Ereignissen auf unterschiedlichen Computern nur dann zu zuverlässigen Ergebnissen, wenn die
Systemuhrzeiten auf den Computern übereinstimmen.

Vorsicht
Active Directory synchronisiert Datum und Uhrzeit auf Computern, die über Konten im Verzeichnisdienst ve
automatisch. Ändern Sie also nicht das Datum oder die Uhrzeit auf einem Computer, der Mitglied einer Activ
Directory-Domäne ist.
Anstatt Datums- und Uhrzeitfunktionen in einer oder zwei Klassen zu konzentrieren, verteilt WMI diese auf m
Klassen, von denen einige eher allgemeine Container darstellen:

So enthalten z. B. die Klassen Win32_ComputerSystem und Win32_OperatingSystem neben vielen ander
Eigenschaften und Methoden auch solche zum Verwalten von Datums- und Uhrzeiteinstellungen:

Win32_TimeZone, Win32_CurrentTime, Win32_LocalTime und Win32_UTCTime (die drei zuletzt gen
sind unter Windows XP neu hinzugekommen) enthalten ebenfalls schreibgeschützte Eigenschaften, mit dene
jede Komponente der Einstellungen von Datum und Uhrzeit, Zeitzone und Sommerzeit anzeigen lässt.

Das SWbemDateTime-Objekt aus der WMI-Skriptingbibliothek, welches ebenfalls mit Windows XP neu
eingeführt wurde, kann zudem in Verbindung mit den anderen Klassen verwendet werden, um Datums- und
Uhrzeitobjekte zu manipulieren.

Win32_OperatingSystem
Tabelle 39 enthält eine Liste der schreibgeschützten Eigenschaften, die mit der Klasse Win32_OperatingSys
die Verwaltung von Datums- und Uhrzeiteinstellungen bereitstehen.

Tabelle 39 Datums- und Uhrzeiteigenschaften von "Win32_OperatingSystem"


Eigenschaft Typ Beschreibung

Seite 136 von 169


CurrentTimeZone sint16 Gibt den Offset des Betriebssystems von GMT (Greenwic
Time) in Minuten an. Die Zahl ist positiv, negativ oder N
(schreibgeschützt)
LocalDateTime datetime Das vom Betriebssytem verwendete Format für Datum un
Tageszeit.
(schreibgeschützt)
Tabelle 40 erläutert die Methode der Klasse Win32_OperatingSystem zum Verwalten von Datums- und
Uhrzeiteinstellungen.

Tabelle 40 Datums- und Uhrzeitmethode von "Win32_OperatingSystem"


Methode Parameter Beschreibung
SetDateTime LocalDateTime – datetime Legt die aktuelle Systemzeit auf dem Computer fest. D
aufrufende Prozess muss über das Recht
Ein Zeitwert. SE_SYSTEMTIME_NAME verfügen.
Diese Methode gibt eine positive Ganzzahl zurück.

0 bedeutet: erfolgreicher Abschluss.

Zahlen größer als 0 weisen auf einen Fehler hin.

Win32_ComputerSystem
Tabelle 41 listet die Eigenschaften von Win32_ComputerSystem auf, von denen zwei gelesen und geschrieb
werden können, um Datums- und Uhrzeiteinstellungen zu verwalten.

Tabelle 41 Datums- und Uhrzeiteigenschaften von "Win32_ComputerSystem"


Eigenschaft Typ Beschreibung
CurrentTimeZone sint16 Gibt den Offset des Computersystems von UTC (Coordin
Universal Time) in Minuten an.
(Lesen/Schreiben) Einheit: Minuten
DaylightInEffect Boolean-Wert Sommerzeitmodus ist aktiviert.
(schreibgeschützt)
EnableDaylightSavingsTime Boolean-Wert Aktiviert die Sommerzeit (Daylight Saving Time, DST) a
einem Computer. Der Wert "Wahr" gibt an, dass die Syste
(Lesen/Schreiben) zu Beginn oder Ende der Sommerzeit eine Stunde zurück
vorgestellt wird. Der Wert "Falsch" gibt an, dass die Syste
Nur Windows XP und Windows
zu Beginn oder Ende der Sommerzeit keine Stunde zurüc
Server 2003
vorgestellt wird. Der Wert NULL gibt an, dass der Status
auf dem System unbekannt ist.

Win32_TimeZone
Win32_TimeZone umfasst die Zeitzoneninformationen eines Windows-Systems, wozu auch die Änderungen
gehören, die für die Umschaltung auf Sommerzeit notwendig sind. Diese Klasse enthält mehrere Eigenschafte
alle schreibgeschützt sind, jedoch keine Methoden. Zu den Eigenschaften gehören die Komponenten von Dat
Uhrzeit für Standard- und Sommerzeit sowie die jeweiligen Abweichungen.

Seite 137 von 169


Win32_CurrentTime
Anstelle dieser Klasse empfiehlt sich die Verwendung der Klassen Win32_LocalTime oder Win32_UTCTim
Neu in Windows XP und Windows Server 2003
Als abstrakte Klasse ohne Instanzen dient Win32_CurrentTime als Vorlage für die anderen Zeitklassen. Sie
beschreibt einen bestimmten Zeitpunkt über Elemente wie Sekunden, Minuten, Stunden, Tagen, Tagen der W
Woche im Monat, Monaten, Quartalen und Jahren. Beachten Sie, dass die Eigenschaft Milliseconds im SDK
für diese Klasse aufgeführt wird, jedoch noch nicht implementiert wurde.
Die Klassen Win32_LocalTime und Win32_UTCTime erben jeweils von der Klasse Win32_CurrentTime

Win32_LocalTime
Neu in Windows XP und Windows Server 2003
Die Klasse Win32_LocalTime repräsentiert die Ortszeit auf dem Computer. Diese Klasse erbt von
Win32_CurrentTime und weist die gleichen Eigenschaften auf. Die Eigenschaft Hour gibt die Ortszeit im 2
Stunden-Format zurück. Beachten Sie, dass die Eigenschaft Milliseconds im SDK zwar für diese Klasse aufg
wird, jedoch noch nicht implementiert wurde.

Win32_UTCTime
Neu in Windows XP und Windows Server 2003
Die Klasse Win32_UTCTime repräsentiert die Ortszeit auf dem Computer. Diese Klasse erbt von
Win32_CurrentTime und weist die gleichen Eigenschaften auf. Die Eigenschaft Hour gibt die UTC-Zeit
(Coordinated Universal Time) im 24-Stunden-Format zurück. Beachten Sie, dass die Eigenschaft Millisecond
SDK zwar für diese Klasse aufgeführt wird, jedoch noch nicht implementiert wurde.

Objekt "SWbemDate Time" aus der WMI-Skriptingbibliothek


Neu in Windows XP und Windows Server 2003
Dieses Hilfsobjekt analysiert und konvertiert WMI-Datums-/Uhrzeitwerte (z. B. die Eigenschaft LocalDateT
Von der Klasse Win32_OperatingSystem) in und aus anderen Formaten. Weitere Informationen enthält der
Abschnitt "SWbemDateTime" im WMI SDK unter http://go.microsoft.com/fwlink/?LinkId=29997
(englischsprachig).

VBScript-Funktion "Now"
Diese Funktion extrahiert das aktuelle Systemdatum und die Systemuhrzeit des Computers mithilfe eines Skr

Abrufen der aktuellen Uhrzeit mithilfe der VBScript-Funktion "Now"


Das nachstehende Skript ruft die aktuelle Systemzeit eines Computers mithilfe der VBScript-Funktion Now a

Listing 52 Time-get.vbs
1WScript.Echo "Current Date and Time: " & Now
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausga
die folgende angezeigt:

Seite 138 von 169


C:\scripts>time-get.vbs
Current Date and Time: 5/19/2004 2:46:29 PM

Abrufen der Ortszeit mithilfe von WMI


WMI bietet eine etwas komplexere, dafür aber auch flexiblere Methode als die VBScript-Funktion Now zum
Auslesen des lokalen Datums und der Uhrzeit. Die Klasse Win32_LocalTime umfasst Eigenschaften zur Dar
von Jahr, Quartal, Monat, Woche im Monat, Datum, Tag der Woche, Stunde (basierend auf der 24-Stunden-U
Minute und Sekunde der lokalen Systemzeit.

Schritte zur Skripterstellung


Mit Listing 53 wird die Ortszeit eines Computers mit der WMI-Klasse Win32_LocalTime abgerufen. Diese K
wurde für Windows XP neu eingeführt, daher kann das Skript nur unter Windows XP und Windows Server 2
ausgeführt werden.
1.Erstellen Sie eine Variable, und weisen Sie ihr den Namen eines Computers zu. Geben Sie beim lokalen Co
einfach "." als Computernamen an. Wenn Sie dieses Skript remote ausführen möchten, geben Sie den Name
verfügbaren Remotecomputers im Netzwerk an, für den Sie Administratorrechte besitzen. Der Name kann e
aus einem Hostnamen oder einer IP-Adresse bestehen.
2.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cim
legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.
3.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_LocalTime.
Hiermit wird eine aus einem Objekt bestehende Auflistung zurückgegeben, die die Ortszeit auf dem Compu
repräsentiert.
4.Verwenden Sie die Eigenschaften des LocalTime-Objekts zum Anzeigen von Monat, Tag, Jahr, Quartal, W
Monat, Tag der Woche und Uhrzeit.

Listing 53 Time-get-local.vbs
1 On Error Resume Next
2
3 strComputer = "."
4 Set objWMIService = GetObject("winmgmts:" _
5 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
6 Set colLocalTimes = objWMIService.ExecQuery("Select * from Win32_LocalTime")
7
8 For Each objLocalTime in colLocalTimes
9 Wscript.Echo "Date: " & objLocalTime.Month & "/" & objLocalTime.Day & _
10 "/" & objLocalTime.Year
11 Wscript.Echo "Quarter: " & objLocalTime.Quarter
12 Wscript.Echo "Week In the Month: " & objLocalTime.WeekInMonth
13 Wscript.Echo "Day Of the Week: " & objLocalTime.DayOfWeek
14 Wscript.Echo "Time: " & objLocalTime.Hour & ":" & objLocalTime.Minute & _
15 ":" & objLocalTime.Second
16Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausga
die folgende angezeigt:
C:\scripts>time-get-local.vbs
Date: 5/19/2004

Seite 139 von 169


Quarter: 2
Week In the Month: 4
Day Of the Week: 3
Time: 16:55:39

Abrufen der UTC-Zeit mithilfe von WMI


Die koordinierte Weltzeit (Coordinated Universal Time, UTC) ist die internationale Standardzeit und wird vo
Observatorium in Greenwich/Großbritannien bereitgestellt. Die UTC weicht von der Ortszeit um die von der
jeweiligen lokalen Zeitzone vorgegebenen Differenz ab, welche von anderen Klassen bereitgestellt wird, die a
späterer Stelle in diesem Abschnitt beschrieben werden. Beim Vergleich der Systemzeiten von Computern in
unterschiedlichen Zeitzonen kann sich UTC als nützlich erweisen, da es sich hierbei um die aktuelle Uhrzeit i
Greenwich-Observatorium handelt und der Wert daher überall auf der Welt gleich ist.

Schritte zur Skripterstellung


Mit Listing 54 wird auf einem Computer unter Verwendung der WMI-Klasse Win32_UTCTime die aktuelle
abgerufen. Wie bei der Klasse Win32_LocalTime wird auch bei Win32_UTCTime die Zeit im 24-Stunden-
dargestellt. Diese Klasse wurde für Windows XP neu eingeführt, daher kann das Skript nur unter Windows X
Windows Server 2003 ausgeführt werden.
1.Erstellen Sie eine Variable zur Angabe des Computernamens.
2.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cim
legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.
3.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_LocalTime.
Hiermit wird eine aus einem Objekt bestehende Auflistung zurückgegeben, die die UTC auf dem jeweiligen
Computer repräsentiert.
4.Verwenden Sie die Eigenschaften des UTC-Objekts zum Anzeigen von Monat, Tag, Jahr, Quartal, Woche i
Monat, Tag der Woche und Uhrzeit.

Listing 54 Time-get-utc.vbs
1 On Error Resume Next
2
3 strComputer = "."
4 Set objWMIService = GetObject("winmgmts:" _
5 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
6 Set colUTCTimes = objWMIService.ExecQuery("Select * from Win32_UTCTime")
7
8 For Each objUTCTime in colUTCTimes
9 Wscript.Echo "Date: " & objUTCTime.Month & "/" & objUTCTime.Day & _
10 "/" & objUTCTime.Year
11 Wscript.Echo "Quarter: " & objUTCTime.Quarter
12 Wscript.Echo "Week In the Month: " & objUTCTime.WeekInMonth
13 Wscript.Echo "Day Of the Week: " & objUTCTime.DayOfWeek
14 Wscript.Echo "Time: " & objUTCTime.Hour & ":" & objUTCTime.Minute & _
15 ":" & objUTCTime.Second
16Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausga
die folgende angezeigt:

Seite 140 von 169


C:\scripts>time-get-utc.vbs
Date: 5/19/2004
Quarter: 2
Week In the Month: 4
Day Of the Week: 3
Time: 23:56:29

Abrufen der Uhrzeit von einem Remotecomputer


Wie bei anderen WMI-Klassen muss zum Abrufen der UTC oder der Ortszeit von einem Remotecomputer ein
nur der Name des Computers in der Variablen strComputer (siehe Zeile 3 des Skripts) in den eines
Remotecomputers geändert werden, für den Sie über Verwaltungsrechte verfügen, und der Rest wird von WM
selbsttätig erledigt.

Vergleichen der Ortszeiten zweier Computer


Eine Möglichkeit zum Vergleichen von Systemdatum und -uhrzeit auf zwei Computern in der gleichen Zeitzo
die LocalDateTime-Eigenschaft der Klasse Win32_OperatingSystem bereit. Diese schreibgeschützte Eigen
gibt die lokale Datums- und Uhrzeiteinstellung des Betriebssystems einschließlich des Offsets von der GMT
(Greenwich Mean Time) zurück, wodurch die Zeitzone angegeben wird. Diese Vorgehensweise funktioniert a
Netzwerken, in denen Computer mit Betriebssystemen vor Windows XP und Windows Server 2003 betrieben
werden.
Zum Vergleichen von Datum und Uhrzeit auf Computern in unterschiedlichen Zeitzonen kann dieses Skript z
Kompensation der Zeitzonen angepasst werden, indem der Unterschied zwischen den letzten vier Ziffern des
LocalDateTime zurückgegebenen Datum-/Uhrzeitwertes berechnet und angewendet wird. Diese Ziffern begi
mit einem positiven oder negativen Vorzeichen, worauf ein dreistelliger Offsetwert folgt, der die Anzahl der M
angibt, um die die örtliche Zeitzone von UTC abweicht.
Optional können die Angaben mit dem von der Klasse Win32_UTCTime zurückgegebenen Wert verglichen
Die so ermittelten Datums- und Uhrzeitangaben sind auf zwei synchronisierten Computern gleich, ungeachtet
Zeitzone. Diese Klasse wird mit Windows XP und Windows Server 2003 neu eingeführt.

Schritte zur Skripterstellung


Listing 55 ermöglicht den Vergleich von Datum und Uhrzeit auf zwei Computern, entweder auf einem lokale
einem Remotecomputer oder auf zwei Remotecomputern.
1.Erstellen Sie Variablen zur Angabe der Namen der beiden Computer.
2.Verwenden Sie auf jedem der beiden Computer einen GetObject-Aufruf zum Herstellen einer Verbindung
WMI-Namespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.
3.Verwenden Sie zudem auf beiden Computern die ExecQuery-Methode zum Abfragen der Klasse
Win32_OperatingSystem.
Hiermit werden zwei Auflistungen von Betriebssystemobjekten mit je einem Objekt pro Auflistung
zurückgegeben.
4.Rufen Sie nach dem Eintreffen des Rückgabewertes jedes ExecQuery-Aufrufs die VBScript-Funktion No

Seite 141 von 169


und weisen Sie die Sekunden jeder Zeitangabe einer Variablen zu.
Die Funktion Now gibt das Systemdatum und die Systemuhrzeit zum Zeitpunkt der Ausführung zurück.
5.Wenn der Unterschied zwischen den beiden Zeitvariablen nicht 0 ist, weisen Sie diesen einer Variablen zu
ist der Unterschied zwischen den Zeiten, zu denen die Ausführung der beiden Abfragen der Klasse
Win32_OperatingSystem beendet war.
Die mit der LocalDateTime-Eigenschaft auf jedem Computer abgerufene Zeit ist von dem exakten Zeitpu
abhängig, zu dem die Abfrage ausgeführt wird.
6.Durchlaufen Sie jedes Betriebssystemobjekt in der Auflistung auf dem ersten Computer mit einer For Eac
Schleife.
7.Durchlaufen Sie innerhalb der ersten For Each-Schleife jedes Betriebssystemobjekt in der Auflistung auf
zweiten Computer mit einer verschachtelten For Each-Schleife.
8.Rufen Sie mithilfe der LocalDateTime-Eigenschaft die lokale Systemzeit von beiden Computern ab.
9.Kürzen Sie die von LocalDateTime zurückgegebenen Datums-/Uhrzeitobjekte auf die Datums-, Stunden-
Minutenwerte, und wenn es eine Differenz zwischen den beiden von Now zurückgegebenen Werten gibt, p
Sie anhand dieser Abweichung die erste Zeit an, bevor Sie beide Zeiten vergleichen.
10.Rufen Sie die Funktion WMIDateToString auf, um die beiden angepassten Systemdatums- und -uhrzeita
in einem besser lesbaren Format anzuzeigen.
Weitere Informationen über WMIDateToString finden Sie im Abschnitt "Anzeigen von DHCP-
Clientinformationen" an früherer Stelle in diesem Dokument.
11.Vergleichen Sie die beiden angepassten Datums- und Uhrzeitwerte, und geben Sie das Resultat des Vergle
aus.

Hinweis
Die von diesen beiden Auflistungen zurückgegebenen Datums- und Uhrzeitwerte sind nach der Ausführun
ExecQuery() statisch. Das heißt, es handelt sich um einen Momentaufnahmen des Datums und der Uhrzei
Zeitpunkt der Ausführung der Abfrage. Unter der Voraussetzung, dass die Netzwerkverbindung gut ist und
beiden Computer nicht ausgelastet sind, liegt ggf. weniger als eine Sekunde zwischen den beiden Abfragen
ist nicht notwendig, diese Verzögerung zu kompensieren. Wenn zwischen dem ersten und dem zweiten Au
Funktion Now jedoch mehr als eine Sekunde liegt, kompensiert das Skript die Verzögerung, indem die Dif
der vom ersten Computer abgerufenen Zeit (Zeile 28) hinzuaddiert wird.

Listing 55 Time-compare.vbs

Seite 142 von 169


1 On Error Resume Next
2
3 strComputer1 = "."
4 strComputer2 = "server-d1"
5 Set objWMIService1 = GetObject("winmgmts:" _
6 & "{impersonationLevel=impersonate}!\\" & strComputer1 & "\root\cimv2")
7 Set objWMIService2 = GetObject("winmgmts:" _
8 & "{impersonationLevel=impersonate}!\\" & strComputer2 & "\root\cimv2")
9 Set colOSes1 = objWMIService1.ExecQuery("Select * from " & _
10 "Win32_OperatingSystem")
11strTime1 = Now
12
13Set colOSes2 = objWMIService2.ExecQuery("Select * from " & _
14 "Win32_OperatingSystem")
15strTime2 = Now
16intSeconds1 = CInt(Left(Right(strTime1, 5), 2))
17intSeconds2 = CInt(Left(Right(strTime2, 5), 2))
18intDiff = 0
19If intSeconds1 <> intSeconds2 Then
20 intDiff = intSeconds2 - intSeconds1
21End If
22
23 For Each objOS1 in colOSes1
24 For Each objOS2 in colOSes2
25 intDateTime1 = Left(objOS1.LocalDateTime, 14)
26 intDateTime2 = Left(objOS2.LocalDateTime, 14)
27 If intDiff <> 0 Then
28 intDateTime1 = intDateTime1 + intDiff
29 End If
30 WScript.Echo "Adjusted time on " & strComputer1 & ": " & _
31 WMIDateToString(intDateTime1)
32 WScript.Echo "Adjusted time on " & strComputer2 & ": " & _
33 WMIDateToString(intDateTime2)
34 If intDateTime1 = intDateTime2 Then
35 Wscript.Echo "Dates and times are equal."
36 Else
37 Wscript.Echo "Dates and times are not equal."
38 End If
39 Next
40Next
41
42 '******************************************************************************
43
44 Function WMIDateToString(dtmDate)
45
46 WMIDateToString = CDate(Mid(dtmDate, 5, 2) & "/" & _
47 Mid(dtmDate, 7, 2) & "/" & _
48 Left(dtmDate, 4) & " " & _
49 Mid(dtmDate, 9, 2) & ":" & _
50 Mid(dtmDate, 11, 2) & ":" & _
51 Mid(dtmDate, 13, 2))
52
53 End Function
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausga
die folgende angezeigt:
C:\scripts>time-compare.vbs
Adjusted time on .: 5/19/2004 5:01:26 PM
Adjusted time on server1: 5/19/2004 5:05:52 PM

Seite 143 von 169


Dates and times are not equal.

Festlegen der Uhrzeit auf einem Computer mithilfe von Befehlszeilentools


Zum Einstellen des Systemdatums und der Uhrzeit auf einem lokalen Computer stehen zwei Befehlszeilentoo
Date.exe und Time.exe, bereit.

Date.exe verwendet die folgende Syntax:
dateDatumTag / Monat / Jahr
Beispielsweise wird das Systemdatum mit der folgenden Befehlszeile auf den 8. März 2004 festgelegt:
date 03/08/2004
Wird dieser Befehl ohne Argumente ausgeführt, gibt er das aktuelle Systemdatum zurück.

Time.exe verwendet die folgende Syntax, wobei Stunden: Minuten im 24-Stunden-Format angegeben wird:
timeStunden: Minuten
Beispielsweise wird die Systemuhrzeit mit der folgenden Befehlszeile auf den 18:25 festgelegt:
time 18:25
Wird dieser Befehl ohne Argumente ausgeführt, gibt er die aktuell Systemuhrzeit zurück.
Die Befehlszeilentools Date.exe und Time.exe stehen unter allen Windows-Betriebssystemen zur Verfügung
Der Befehl net time bietet Optionen zur Synchronisation der Zeit mit einem Zeitserver.

Festlegen der Uhrzeit auf einem Computer mithilfe von WMI


Mit WMI können Uhrzeiten auf lokalen und auf Remotecomputern ausgelesen und eingestellt werden. Die W
Klasse Win32_OperatingSystem umfasst eine schreibgeschützte Eigenschaft, LocalDateTime, die die lokal
Datums- und Uhrzeiteinstellung des Betriebssystems einschließlich des Offsets von der GMT (Greenwich Me
Time) zurückgibt, wodurch die Zeitzone angegeben wird.

Vorsicht
Active Directory synchronisiert Datum und Uhrzeit auf Computern, die über Konten im Verzeichnisdienst ve
automatisch. Ändern Sie also nicht das Datum oder die Uhrzeit auf einem Computer, der Mitglied einer Activ
Directory-Domäne ist.
Die Klasse Win32_OperatingSystem enthält zudem eine Methode, SetDateTime(), die ein Datum und eine
in Form eines DATETIME-Objekts als Parameter akzeptiert und diese Angabe als aktuelles Datum und Uhrz
Computers festlegt. SetDateTime() gibt den Wert 0 zurück, wenn die Ausführung erfolgreich war, im Falle e
Fehlers eine beliebige andere Zahl. Zum Ausführen von SetDateTime() muss das Script von einem Benutzer
ausgeführt werden, dessen Anmeldeinformationen das Recht SE_SYSTEMTIME_NAME umfassen.
Das folgende Skript verwendet die LocalDateTime-Eigenschaft und die SetDateTime()-Methode zum Festle
eines neuen Datums und einer neuen Uhrzeit auf einem lokalen oder einem Remotecomputer.
Das neue Datum und die neue Uhrzeit müssen im Format DATETIME vorliegen, einem WMI-Datentyp, bei d
sich um eine Zeichenfolge mit fester Länge handelt, die in WMI ein bestimmtes Datum und eine bestimmte U
repräsentiert. Die Zeichenfolge hat folgendes Format:
yyyymmddHHMMSS.mmmmmmsUUU
In Tabelle 42 sind die gültigen Werte für die DATETIME-Felder aufgeführt. Sämtliche Feldinhalte müssen d
der Tabelle angegebenen Feldlängen entsprechen. Verwenden Sie im Bedarfsfall führende Nullen.

Seite 144 von 169


Tabelle 42 Beschreibungen zum DATETIME-Feld
Feld Beschreibung
jjjj Vierstellige Variable für die Jahreszahl (0000-9999)
mm Zweistellige Variable für den Monat (01-12)
tt Zweistellige Variable für den Tag des Monats (01-31) Dieser Wert muss für den jeweiligen M
geeignet sein. Beispielsweise ist ein 31. Februar ungültig. Allerdings muss Ihre Implementier
Daten nicht auf Gültigkeit prüfen.
HH Zweistellige Variable für die Stunde des Tages bei Verwendung der 24-Stunden-Uhr (00-23)
MM Zweistellige Variable für die Minuten der Stunde (00-59)
SS Zweistellige Variable für die Sekunden der Minute (00-59)
mmmmmm Sechsstellige Variable für die Mikrosekunden der Sekunde (000000–999999)
s Pluszeichen (+) oder Minuszeichen (-), um einen positiven oder negativen Offset von UTC
anzugeben.
UUU Dreistelliger Offset, der die Anzahl der Minuten angibt, um die die Zeitzone von UTC abwei
WMI ist es ratsam, jedoch nicht zwingend, Zeitangaben in GMT (mit einem UTC-Offset von
umzuwandeln.
Zum Füllen nicht verwendeter Felder oder als Platzhalter kann das Sternchen (*) verwendet werden. Beispiels
kann ein Datum und eine Uhrzeit mit unbestimmten Jahr in jedem beliebigen Jahr auftreten, wie im folgenden
Beispiel:
****0416******.******+***
Soll ein Feld unbestimmt bleiben, muss das gesamte Feld mit Sternchen gefüllt werden. Das folgende Beispie
gültige und ungültige Varianten der Verwendung von Sternchen:
19980416******.000000+*** ' Gültig
1998-04-16 ******:*** ' Ungültig
199*0416******.000000+*** ' Ungültig
199*-04-16 ******:*** ' Ungültig
Weitere Informationen über den Datentyp DATETIME finden Sie im WMI SDK im Abschnitt "Date and Tim
Format", aus dem auch diese Erläuterung übernommen wurde. Weitere Informationen über das Arbeiten mit D
und Uhrzeitangaben in Skripten enthalten die Abschnitte "Working with Dates and Times" in Kapitel 6 des W
2000 Scripting-Handbuchs unter /germany/technet/datenbank/articles/600362.mspx.

Schritte zur Skripterstellung


Mit Listing 56 wird die Systemzeit auf einem lokalen oder Remotecomputer eingestellt. Dieses Skript zeigt, w
SetDateTime-Methode der Klasse Win32_OperatingSystem eingesetzt wird. Allerdings ist die Genauigkeit
dieser Vorgehensweise in der Regel auf die Minute und nicht auf die Sekunde beschränkt, da hierbei die korre
im letzten Moment eingegeben werden muss.
1.Erstellen Sie eine Variable, und weisen Sie ihr den Namen eines Computers zu.
2.Erstellen Sie eine Variable, und weisen Sie ihr eine Zeichenfolge (im WMI-Format DATETIME) zu, die da
Datum und die Uhrzeit repräsentiert, die festgelegt werden sollen. Ersetzen Sie kurz vor Ausführung des Sk
das WMI DATETIME-Format durch die tatsächliche Uhrzeit, die festgelegt werden soll. Als Beispieldatum
uhrzeit wird im Skript der 7. Mai 2004, 17:01 mit einem negativen Offset von 8 Stunden (480 Minuten) von

Seite 145 von 169


verwendet.
3.Verwenden Sie einen GetObject()-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cim
und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.
4.Rufen Sei die ExecQuery-Methode zum Abfragen der Win32-OperatingSystem-Klasse auf.
Hiermit wird eine Auflistung bestehend aus einem Objekt zurückgegeben, das das Betriebssystem repräsent
5.Führen Sie für jedes Betriebssystemobjekt in der Auflistung die folgenden Aufgaben aus.
6.Rufen Sie die SetDateTime-Methode der Win32_OperatingSystem-Klasse auf, und übergeben Sie den Da
/Uhrzeitwert.
7.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine Erfolgs- oder Fehlermeld
8.Fragen Sie die Klasse Win32_OperatingSystem erneut ab, und rufen Sie die aktualisierte LocalDateTime
Eigenschaft ab, die die Änderung wiedergibt.
9.Rufen Sie die Funktion WMIDateToString auf, um den Datums-/Uhrzeitwert in einem besser lesbaren Form
anzuzeigen. Weitere Informationen über diese Funktion finden Sie im Abschnitt "Anzeigen von DHCP-
Clientinformationen" an früherer Stelle in diesem Dokument.

Listing 56 Time-set.vbs
1 On Error Resume Next
2
3 strComputer = "."
4 dtmNewDateTime = "20040520151300.000000-480"
5 Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate, " _
6 & "(Systemtime)}!\\" & strComputer & "\root\cimv2")
7 Set colOSes = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem")
8
9 For Each objOS In colOSes
10 intSet = objOS.SetDateTime(dtmNewDateTime)
11 If intSet = 0 Then
12 Wscript.Echo "Successfully set new date and time."
13 Else
14 Wscript.Echo "Unable to set mew date and time."
15 End If
16Next
17
18 Set colOSes = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem")
19For Each objOS In colOSes
20 Wscript.Echo "New date and time: " & WMIDateToString(objOS.LocalDateTime)
21Next
22
23 '******************************************************************************
24
25 Function WMIDateToString(dtmDate)
26WMIDateToString = CDate(Mid(dtmDate, 5, 2) & "/" & _
27 Mid(dtmDate, 7, 2) & "/" & _
28 Left(dtmDate, 4) & " " & _
29 Mid(dtmDate, 9, 2) & ":" & _
30 Mid(dtmDate, 11, 2) & ":" & _
31 Mid(dtmDate, 13, 2))
32End Function
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausga
die folgende angezeigt:

Seite 146 von 169


C:\scripts>time-set.vbs
Successfully set new date and time.
New date and time: 5/20/2004 3:08:49 PM

Synchronisieren der Uhrzeiten auf zwei Computern


Der Betrieb eines Netzwerkes setzt häufig voraus, dass die Systemzeiten netzwerkübergreifend synchronisier
werden. Einige Anwendungen wie solche, die Dateien basierend auf Zeitstempeln vergleichen, erfordern, das
Zeiten auf unterschiedlichen Hosts weitestgehend übereinstimmen.
Bei den fortschrittlicheren Methoden zur Sicherstellung einer akkuraten und synchronisierten Uhrzeit im gesa
Netzwerk kommen Tools zum Einsatz, die eine Synchronisation mit öffentlichen Zeitservern durchführen. In
Abschnitt soll jedoch gezeigt werden, wie mithilfe eines einfache Skripts die Zeiten auf zwei Computern verg
werden können und, sofern keine Übereinstimmung vorliegt, die Zeit auf dem Zielcomputer auf die Zeit des
Referenzcomputers festgelegt werden kann. Bei dieser Vorgehensweise wird davon ausgegangen, dass bereits
eine externe Quelle zugegriffen und auf dem Referenzcomputer die korrekte Zeit eingestellt wurde.
Mit einem komplexeren Skript könnte automatisch eine Referenzzeit von einer externen Quelle abgerufen und
auf den Zielcomputern entsprechend eingestellt werden. Zwar wird diese Funktion von WMI nicht geboten, k
jedoch über ein Befehlszeilentool oder eine Webanwendung ausgeführt werden, das oder die über die WSH E
Methode ausgeführt wird.

Vorsicht
Active Directory synchronisiert Datum und Uhrzeit auf Computern, die über Konten im Verzeichnisdienst ve
automatisch. Ändern Sie also nicht das Datum oder die Uhrzeit auf einem Computer, der Mitglied einer Activ
Directory-Domäne ist.
Der Befehl net time bietet Optionen zur Synchronisation der Zeit mit einem Zeitserver.

Schritte zur Skripterstellung


In Listing 57 wird mithilfe der LocalDateTime-Eigenschaft der Klasse Win32_OperatingSystem die System
(zeitzonenbereinigt) auf zwei Computern verglichen Auf jedem Computer zieht das Skript die vierzehn ganz
befindlichen Zeichen von LocalDateTime heran (die, mit denen Datum und Uhrzeit sekundengenau angegeb
werden) und vergleicht die gekürzten Zeichenfolgen
Wenn die Zeit auf dem ersten Computer nicht mit der auf dem zweiten übereinstimmt, verwendet das Skript d
SetDateTime-Methode der Win32-OperatingSystem-Klasse, um den zweiten Computer auf die Zeit des ers
einzustellen. Hierbei werden sommerzeitbedingte Unterschiede berücksichtigt, denn wenn sich beide Comput
gleichen Zeitzone befinden und die Zeit die gleiche ist, muss auch die Sommerzeiteinstellung der Computer d
gleiche sein.
Bei Verwendung dieses Skripts ist die Genauigkeit der Zeitsynchronisation in der Regel auf die Minute und n
die Sekunde beschränkt, da Netzwerklatenz und die Zeit zum Ausführen des Codes berücksichtigt werden mü
Führen Sie dazu im Skript die folgenden Schritte aus:
1.Erstellen Sie Variablen zur Angabe der Namen der beiden Computer.
2.Verwenden Sie auf jedem der beiden Computer einen GetObject-Aufruf zum Herstellen einer Verbindung
WMI-Namespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.
Beachten Sie, dass dieses Skript nicht die Netzwerkkonnektivität zum jeweiligen Computer prüft.

Seite 147 von 169


3.Verwenden Sie auf beiden Computern die ExecQuery-Methode zum Abfragen der Win32_OperatingSys
Klasse.
Hiermit werden zwei Auflistungen von Betriebssystemobjekten mit je einem Objekt pro Auflistung
zurückgegeben.
4.Rufen Sie nach dem Eintreffen des Rückgabewertes jedes ExecQuery-Aufrufs die VBScript-Funktion No
und weisen Sie die Sekunden jeder Zeitangabe einer Variablen zu.
Die Funktion Now gibt das Systemdatum und die Systemuhrzeit zum Zeitpunkt der Ausführung zurück.
5.Weisen Sie die Differenz zwischen den beiden Zeitvariablen einer weiteren Variablen zu, die die Differenz
zwischen den Zeiten repräsentiert, zu denen die Abfragen von Win32_OperatingSystem ausgeführt wurd
Zeitpunkt, zu dem die jeweilige Abfrage ausgeführt wurde, bestimmt die Zeit, die die LocalDateTime-
Eigenschaft von diesem Computer abruft.
6.Wenn die Differenz zwischen den beiden Zeitvariablen nicht 0 beträgt, weisen Sie diese einer Variablen zu
die Differenz zwischen den Zeiten repräsentiert, zu denen die Ausführung der beiden Abfragen von
Win32_OperatingSystem abgeschlossen war.
Die mit der LocalDateTime-Eigenschaft auf jedem Computer abgerufene Zeit ist von dem exakten Zeitpu
abhängig, zu dem die Abfrage ausgeführt wird.
7.Durchlaufen Sie jedes Betriebssystemobjekt in der Auflistung auf dem ersten Computer mit einer For Eac
Schleife.
8.Durchlaufen Sie innerhalb der ersten For Each-Schleife jedes Betriebssystemobjekt in der Auflistung auf
zweiten Computer mit einer verschachtelten For Each-Schleife.
9.Rufen Sie mithilfe der LocalDateTime-Eigenschaft die lokale Systemzeit von beiden Computern ab.
10.Weisen Sie die LocalDateTime-Eigenschaft des ersten (Referenz-)Computers einer Variablen zu, die verw
wird, um die Zeit auf dem zweiten (Ziel-)Computer im Bedarfsfall einzustellen.
11.Kürzen Sie die von LocalDateTime zurückgegebenen Datums-/Uhrzeitobjekte auf den Datums-, Stunden-
Minutenwert.
12.Falls es eine Abweichung zwischen den beiden Now-Werten gibt, verwenden Sie diese zum Anpassen der
Referenzzeit, bevor Sie die beiden Zeiten vergleichen.
13.Vergleichen Sie die beiden angepassten Datums- und Uhrzeitwerte.
14.Wenn Datums- und Uhrzeitangaben gleich sind, geben Sie eine Meldung aus.
15.Wenn Datums- und Uhrzeitangaben nicht gleich sind, rufen Sie auf dem Zielcomputer die SetDateTime-M
von Win32-OperatingSystem auf.
16.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine Erfolgs- oder Fehlermel
an.

Listing 57 Time-sync.vbs

Seite 148 von 169


1 On Error Resume Next
2
3 strComputer1 = "."
4 strComputer2 = "client1"
5
6 Set objWMIService1 = GetObject("winmgmts:" _
7 & "{impersonationLevel=impersonate}!\\" & strComputer1 & "\root\cimv2")
8 Set objWMIService2 = GetObject("winmgmts:{impersonationLevel=impersonate, " _
9 & "(Systemtime)}!\\" & strComputer2 & "\root\cimv2")
10
11 Set colOSes1 = objWMIService1.ExecQuery("SELECT * FROM Win32_OperatingSystem")
12strTime1 = Now
13Set colOSes2 = objWMIService2.ExecQuery("SELECT * FROM Win32_OperatingSystem")
14strTime2 = Now
15intSeconds1 = CInt(Left(Right(strTime1, 5), 2))
16intSeconds2 = CInt(Left(Right(strTime2, 5), 2))
17intDiff = 0
18If intSeconds1 <> intSeconds2 Then
19 intDiff = intSeconds2 - intSeconds1
20End If
21
22 For Each objOS1 in colOSes1
23 For Each objOS2 in colOSes2
24 dtmRefDateTime = objOS1.LocalDateTime
25 intDateTime1 = Left(dtmRefDateTime, 14)
26 intDateTime2 = Left(objOS2.LocalDateTime, 14)
27 If intDiff <> 0 Then
28 intDateTime1 = intDateTime1 + intDiff
29 End If
30 If intDateTime1 = intDateTime2 Then
31 Wscript.Echo "Dates and times on " & strComputer1 & " and " & _
32 strComputer2 & "are equal."
33 Else
34 intSet = objOS2.SetDateTime(dtmRefDateTime)
35 If intSet = 0 Then
36 Wscript.Echo "Successfully synchronized date and time on " & _
37 strComputer2 & " with reference (" & strComputer1 & ")."
38 Else
39 Wscript.Echo "Unable to set new date and time on " & strComputer2 & "."
40 End If
41 End If
42 Next
43Next
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausga
die folgende angezeigt:
C:\scripts>time-sync.vbs
Successfully synchronized date and time on client1 with reference (.).

Synchronisieren der Uhrzeiten auf mehreren Computern


Die Erweiterung des Zeitvergleichs von zwei auf eine beliebige Anzahl Computer gestaltet sich relativ einfac
folgenden Skript wird grundlegend der gleiche Code wie in Time-sync.vbs verwendet. Allerdings wird eine L
Computern aus einem Array abgerufen und dann eine Iteration durchgeführt, bei der die Systemzeiten mit der
Referenzcomputers verglichen und im Bedarfsfall synchronisiert werden.
Das Skript verwendet einen groben Algorithmus für Zeitvergleich und Synchronisation und zeigt so eine Mög
zum Synchronisieren von Computerzeiten mithilfe von Skripten auf. Wenn die Netzwerklatenz jedoch zu hoc

Seite 149 von 169


Weise von der Referenzzeit abweichen.

Vorsicht
Active Directory synchronisiert Datum und Uhrzeit auf Computern, die über Konten im Verzeichnisdienst ve
automatisch. Ändern Sie also nicht das Datum oder die Uhrzeit auf einem Computer, der Mitglied einer Activ
Directory-Domäne ist.

Schritte zur Skripterstellung


In Listing 58 wird die Systemzeit (zeitzonenbereinigt) auf mehreren Computern verglichen, deren Namen ode
Adresse aus einem Array abgerufen werden. Wenn die Zeit auf einem der Computer nicht mit der Standardze
übereinstimmt, wird sie vom Skript zurückgesetzt.
1.Erstellen Sie eine Variable zur Angabe des Namens des Referenzcomputers.
2.Erstellen Sie ein Array, das die Namen oder IP-Adressen der Zielcomputer aufnehmen soll.
3.Verwenden Sie auf dem Referenzcomputer einen GetObject-Aufruf zum Herstellen einer Verbindung zum
Namespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.
4.Durchlaufen Sie das Array mit den Zielcomputern mit einer Schleife und führen Sie für jeden Computer di
folgenden Aufgaben durch.
5.Verwenden Sie die Exec-Methode des WshShell-Objekts, um per "Ping" zu prüfen, ob eine Verbindung z
Zielcomputer hergestellt werden kann.
6.Verwenden Sie auf jedem Computer die ExecQuery-Methode zum Abfragen der Win32_OperatingSyste
Klasse.
Hiermit werden zwei Auflistungen von Betriebssystemobjekten mit je einem Objekt pro Auflistung
zurückgegeben.
7.Rufen Sie nach dem Eintreffen des Rückgabewertes jedes ExecQuery-Aufrufs die VBScript-Funktion No
und weisen Sie die Sekunden jeder Zeitangabe einer Variablen zu.
Die Funktion Now gibt das Systemdatum und die Systemuhrzeit zum Zeitpunkt der Ausführung zurück.
8.Weisen Sie die Differenz zwischen den beiden Zeitvariablen einer weiteren Variablen zu, die die Differenz
zwischen den Zeiten repräsentiert, zu denen die Abfragen von Win32_OperatingSystem ausgeführt wurd
Zeitpunkt, zu dem die jeweilige Abfrage ausgeführt wird, bestimmt die Zeit, die von der LocalDateTime-
Eigenschaft auf diesem Computer zurückgegeben wird.
9.Wenn der Unterschied zwischen den beiden Zeitvariablen nicht 0 ist, weisen Sie diesen einer Variablen zu
Variable repräsentiert den Unterschied zwischen den Zeiten, zu denen die Ausführung der beiden
Win32_OperatingSystem-Abfragen beendet war.
Die mit der LocalDateTime-Eigenschaft auf jedem Computer abgerufene Zeit ist von dem exakten Zeitpu
abhängig, zu dem die Abfrage ausgeführt wird.
10.Durchlaufen Sie jedes Betriebssystemobjekt in der Auflistung auf dem ersten Computer mit einer For Eac
Schleife.
11.Durchlaufen Sie innerhalb der ersten For Each-Schleife jedes Betriebssystemobjekt in der Auflistung auf
zweiten Computer mit einer verschachtelten For Each-Schleife.
12.Rufen Sie mithilfe der LocalDateTime-Eigenschaft die lokale Systemzeit von beiden Computern ab.

Seite 150 von 169


13.Weisen Sie die LocalDateTime-Eigenschaft des ersten (Referenz-)Computers einer Variablen zu, die verw
wird, um die Zeit auf dem zweiten (Ziel-)Computer im Bedarfsfall einzustellen.
14.Kürzen Sie die von LocalDateTime zurückgegebenen Datums-/Uhrzeitobjekte auf den Datums-, Stunden-
Minutenwert.
15.Falls es eine Abweichung zwischen den beiden Now-Werten gibt, verwenden Sie diese zum Anpassen der
Referenzzeit, bevor Sie die beiden Zeiten vergleichen.
16.Vergleichen Sie die beiden angepassten Datums- und Uhrzeitwerte.
17.Wenn Datums- und Uhrzeitangaben gleich sind, geben Sie eine Meldung aus.
18.Wenn Datums- und Uhrzeitangaben nicht gleich sind, rufen Sie auf dem Zielcomputer die SetDateTime-M
von Win32-OperatingSystem auf.
19.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine Erfolgs- oder Fehlermel
an.

Listing 58 Time-sync-multi.vbs

Seite 151 von 169


1 On Error Resume Next
2
3 strReference = "."
4 arrTargets = Array("client1", "client2", "192.168.0.1", "192.168.0.2")
5
6 Set objWMIService1 = GetObject("winmgmts:" _
7 & "{impersonationLevel=impersonate}!\\" & strReference & "\root\cimv2")
8
9 For Each strTarget In arrTargets
10
11 WScript.Echo VbCrLf & String(80, "-") & VbCrLf & "Target: " & strTarget _
12 & VbCrLf
13 Set objShell = CreateObject("WScript.Shell")
14 Set objExec = objShell.Exec("ping -n 2 -w 1000 " & strTarget)
15 strPingResults = LCase(objExec.StdOut.ReadAll)
16 If InStr(strPingResults, "reply from") Then
17
18 Set objWMIService2 = GetObject("winmgmts:{impersonationLevel=" _
19 & "impersonate, (Systemtime)}!\\" & strTarget & "\root\cimv2")
20 Set colOSes1 = objWMIService1.ExecQuery("SELECT * FROM " & _
21 "Win32_OperatingSystem")
22 strTime1 = Now
23 Set colOSes2 = objWMIService2.ExecQuery("SELECT * FROM " & _
24 "Win32_OperatingSystem")
25 strTime2 = Now
26 intSeconds1 = CInt(Left(Right(strTime1, 5), 2))
27 intSeconds2 = CInt(Left(Right(strTime2, 5), 2))
28 intDiff = 0
29 If intSeconds1 <> intSeconds2 Then
30 intDiff = intSeconds2 - intSeconds1
31 End If
32
33 For Each objOS1 in colOSes1
34 For Each objOS2 in colOSes2
35 dtmRefDateTime = objOS1.LocalDateTime
36 intDateTime1 = Left(dtmRefDateTime, 14)
37 intDateTime2 = Left(objOS2.LocalDateTime, 14)
38 If intDiff <> 0 Then
39 intDateTime1 = intDateTime1 + intDiff
40 End If
41 If intDateTime1 = intDateTime2 Then
42 Wscript.Echo "Dates and times are equal."
43 Else
44 intSet = objOS2.SetDateTime(dtmNewDateTime)
45 If intSet = 0 Then
46 Wscript.Echo "Successfully synchronized date and time on " & _
47 strTarget & " with reference (" & strReference & ")."
48 Else
49 Wscript.Echo "Unable to set new date and time on " & strTarget & _
50 "."
51 End If
52 End If
53 Next
54 Next
55
56 Else
57
58 WScript.Echo strTarget & " did not respond to ping."
59
60 End If
61
62 Next

Seite 152 von 169


Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausga
die folgende angezeigt:
C:\scripts>time-sync-multi.vbs
--------------------------------------------------------------------------------
Target: client1
Successfully synchronized date and time on client1 with reference (.).
--------------------------------------------------------------------------------
Target: client2
Successfully synchronized date and time on client2 with reference (.).
--------------------------------------------------------------------------------
Target: 192.168.0.1
192.168.0.1 did not respond to ping.
--------------------------------------------------------------------------------
Target: 192.168.0.2
192.168.0.2 did not respond to ping.

Ändern von Netzwerkeinstellungen in der Registrierung


TCP/IP-Netzwerkeinstellungen können unter Verwendung der Registrierung abgerufen und geändert werden.
Registrierung enthält einige Netzwerkeinstellungen, auf die nicht mithilfe von WMI-Klassen, Befehlszeilento
über die Windows-Oberfläche zugegriffen werden kann.
Verwenden Sie zum Bearbeiten der Registrierung die Klasse StdRegProv des WMI-Anbieters für die
Systemregistrierung. Diese Klasse befindet sich im Namespace \root\default, wohingegen sich alle Win32_-
die bis dato in diesem Dokument besprochen wurden, im Namespace \root\cimv2 befinden.

Vorsicht
Durch eine fehlerhafte Bearbeitung der Registrierung kann ernsthafter Schaden am System verursacht werden
Sie Änderungen an der Registrierung vornehmen, sollten Sie eine Sicherungskopie aller wichtigen Daten auf
Computer erstellen.
Ändern Sie zur Verwendung dieser Klasse die Zeilen in Skripts, mit denen die Verbindung zu WMI hergestel
wie folgt:
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\default:StdRegProv")
Geben Sie im GetObject-Aufruf, mit dem die Bindung zum WMI-Dienst hergestellt (ein Verweis erzeugt) w
Namespace \root\default (anstelle des Namespaces \root\cimv2) als Teil des Objektpfades an. Erstellen Sie
anschließend direkt eine Instanz der Klasse, indem Sie einen Doppelpunkt und den Namen der StdRegProv-K
an das Ende des Objektpfades anhängen.
Die Klasse StdRegProv gibt einen Verweis auf eine einzelne Instanz in Form eines SWbemObject-Objekts

Seite 153 von 169


das die gesamte Registrierung repräsentiert (von der es immer nur eine pro Betriebssystem gibt). Hier liegt de
Unterschied zur Auflistung von (oftmals) mehreren Instanzen in Form eines SWbemObjectSet-Objekts, wie
Win32_NetworkAdapterConfiguration und den meisten anderen bis dato verwendeten Klassen zurückgege
wird. Da es sich hier um ein SWbemObject- und nicht um ein SWbemObjectSet-Objekt handelt, muss nich
ExecQuery aufgerufen und mit einer Auflistung von Instanzen gearbeitet werden. Stattdessen kann wie im
nachstehenden Beispiel gezeigt die punktierte Schreibweise zum direkten Aufrufen von Methoden der StdRe
Klasse für den Verweis verwendet werden:
objReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
Wenn Sie mit den Objekten SWBemObject und SWBemObjectSet als Teil des Objektmodells der WMI-
Skriptingbibliothek noch nicht vertraut sind, schlagen Sie in den folgenden Referenzdokumenten nach:

Unter dem Thema "Die WMI Scripting-Bibliothek " im Kapitel 6 des Windows 2000 Scripting-Handbuches
/germany/technet/datenbank/articles/600362.mspx#E01M0AA.

Unter dem Thema "Scripting API for WMI" in der WMI-Referenz im WMI SDK unter
http://go.microsoft.com/fwlink/?LinkId=29998 (englischsprachig).
Die Klasse StdRegProv weist keine Eigenschaften auf. Tabelle 43 enthält Beschreibungen der Methoden der
StdRegProv.

Tabelle 43 Methoden von "StdRegProv"


Methode Beschreibung
CheckAccess Überprüft, ob der Benutzer über die angegebenen Zugriffsrechte ve
CreateKey Erstellt einen Unterschlüssel.
DeleteKey Löscht einen Unterschlüssel.
DeleteValue Löscht einen benannten Wert.
EnumKey Erstellt eine Auflistung der Unterschlüssel.
EnumValues Erstellt eine Auflistung der benannten Werte eines Schlüssels.
GetBinaryValue Ruft den Binärdatenwert eines benannten Wertes ab.
GetDWORDValue Ruft den DWORD-Datenwert eines benannten Wertes ab.
GetExpandedStringValue Ruft den Datenwert der erweiterten Zeichenfolge eines benannten W
ab.
GetMultiStringValue Ruft die Datenwerte mehrerer Zeichenfolgen eines benannten Wert
GetStringValue Ruft den Datenwert der Zeichenfolge eines benannten Wertes ab.
SetBinaryValue Legt den Binärdatenwert eines benannten Wertes fest.
SetDWORDValue Legt den DWORD-Datenwert eines benannten Wertes fest.
SetExpandedStringValue Legt den Datenwert der erweiterten Zeichenfolge eines benannten W
fest.
SetMultiStringValue Legt die Werte mehrerer Zeichenfolgen eines benannten Wertes fes
SetStringValue Legt den Zeichenfolgewert eines benannten Wertes fest.

Seite 154 von 169


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

0 bedeutet: erfolgreicher Abschluss.

Zahlen größer als 0 weisen auf einen Fehler hin.
Weitere Informationen über die Klasse StdRegProv und deren Methoden finden Sie unter "StdRegProv" im W
SDK unter http://go.microsoft.com/fwlink/?LinkId=29999 (englischsprachig).
Die Methoden GetStringValue und GetDWORDValue geben über einen Ausgabeparameter Informationen
Skript zurück, ein Mechanismus, der in diesem Dokument bis dato noch nicht erwähnt wurde. Zu diesem Zwe
übergibt das Skript die ersten drei Parameter an die GetStringValue-Methode, um der Methode mitzuteilen,
Eingabe der Wert entnommen werden soll. Diese Informationen werden im letzten Parameter zurückgegeben,
diesem Fall in Form der Zeichenfolgenvariablen strValue. Nachdem die Zeile ausgeführt wurde, enthält die V
den Wert des Registrierungseintrags "Hostname" an der Position
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters. Die letzte Zeile
Skripts zeigt diesen Wert an.
Die Skripts in diesem Abschnitt rufen Zeichenfolgen- (REG_SZ) und DWORD-Werte (REG_DWORD, eine
Ganzzahl) aus der Registrierung ab und legen diese ebenso fest. Zum Abrufen und Festlegen von Zeichenfolg
DWORD-Typen werden verschiedene Methoden verwendet. Die Klasse StdRegProv umfasst darüber hinaus
weitere Methoden für Mehrfachzeichenfolgen-, erweiterte Zeichenfolgen- und Binärwerte.
Der Eintrag mit der Zeichenfolge (Hostname) lautet:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Hostname
Der Eintrag mit dem DWORD-Wert (DeadGWDetectDefault) lautet:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DeadGWDetec
Tabelle 44 beschreibt die Registrierungsunterschlüssel in Verbindung mit der TCP/IP-Clientvernetzung.

Tabelle 44 Registrierungsunterschlüssel in Verbindung mit der TCP/IP-Clientvernetzung


Registrierungsunterschlüssel Beschreibung
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet Enthält globale TCP/IP-Konfigurationseinstellun
\Services\Tcpip\Parameters die sich auf alle Netzwerkadapter im Computer
beziehen.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet Enthält TCP/IP-Konfigurationseinstellungen für
\Services\Tcpip\Parameters\Interfaces spezifischen Adapter (Schnittstelle) in seinen
Unterschlüsseln, die mit GUIDs bezeichnet sind
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet Enthält Konfigurationseinstellungen für DHCP-
\Services\Dhcp\Parameters\Options Optionen in seinen Unterschlüsseln.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet Enthält Konfigurationseinstellungen für den lok
\Services\Dnscache\Parameters DNS-Cacheauflösungsdienst des DNS-Clients.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet Enthält globale Konfigurationseinstellungen für
\Services\NetBT\Parameters NetBIOS über TCP/IP und WINS, die sich auf a
Netzwerkadapter im Computer beziehen.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet Enthält Konfigurationseinstellungen für NetBIO
TCP/IP und WINS für jeden spezifischen Adapt
Seite 155 von 169
\Services\NetBT\Parameters\Interfaces (Schnittstelle) in seinen Unterschlüsseln, die mit
bezeichnet sind.
Weitere Informationen über die Verwendung von Skripts zum Konfigurieren der Registrierung sowie detaillie
Informationen über zahlreiche Registrierungseinträge finden Sie in den nachstehenden Referenzdokumenten:

Im Abschnitt "Registry" des Windows 2000 Scripting Guide unter
http://go.microsoft.com/fwlink/?LinkId=30001 (englischsprachig).

Im Artikel "Resource Kit Registry Reference for Windows Server 2003" unter
http://go.microsoft.com/fwlink/?LinkId=30003 und in "Windows 2000 Server: Technical Reference to the R
unter http://go.microsoft.com/fwlink/?LinkId=31141 (englischsprachig).

Abrufen eines Zeichenfolgenwertes aus der Registrierung mithilfe von WMI


Dieses Skript zeigt, wie eine TCP/IP-Netzwerkeinstellung (Hostname) aus einem Registrierungseintrag abger
wird, dessen Wert eine Zeichenfolge (REG_SZ) ist. Zu diesem Zweck verwendet das Skript die GetStringVa
Methode der Klasse StdRegProv des WMI-Anbieters für die Systemregistrierung.

Schritte zur Skripterstellung


1.Erstellen Sie eine Konstante zur Aufnahme des Hexadezimalwertes für HKEY_LOCAL_MACHINE.
2.Erstellen Sie eine Variable, und weisen Sie ihr den Namen des Computers zu. Der Name kann entweder aus
Hostnamen oder einer IP-Adresse bestehen.
3.Erstellen Sie Variablen für den Pfad des Registrierungsschlüssels und den Namen des Eintrags.
4.Verwenden Sie einen GetObject-Aufruf, um auf dem angegebenen Computer eine Verbindung zum WMI-
Namespace root\default herzustellen, legen Sie den Parameter "impersonationLevel" auf "impersonate" fes
erstellen Sie eine Instanz der Klasse StdRegProv, und weisen Sie diese der Variablen objReg zu.
5.Rufen Sie die GetStringValue-Methode der Klasse StdRegProv auf, übergeben Sie Parameter für Unterstr
Schlüsselpfad und Eintragsname, und weisen Sie den Ausgabeparameter für den Zeichenfolgenwert der Var
strValue zu.
6.Zeigen Sie den Eintragsnamen und dessen Zeichenfolgenwert an.

Listing 59 Reg-get-string.vbs
1 Const HKEY_LOCAL_MACHINE = &H80000002
2 strComputer = "."
3 strKeyPath = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters"
4 strEntryName = "Hostname"
5
6 Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
7 strComputer & "\root\default:StdRegProv")
8
9 objReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
10Wscript.Echo strEntryName & ": " & strValue
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausga
die folgende angezeigt:
C:\scripts>reg-get-string.vbs
Hostname: client1

Seite 156 von 169


Abrufen eines numerischen Wertes aus der Registrierung mithilfe von WMI
Dieses Skript zeigt, wie eine TCP/IP-Netzwerkeinstellung (DeadGWDetectDefault) aus einem Registrierung
abgerufen wird, dessen Wert ein DWORD (REG_DWORD, eine 32-Bit-Ganzzahl) ist. Zu diesem Zweck verw
das Skript die GetDWORDValue-Methode der Klasse StdRegProv des WMI-Anbieters für die Systemregis

Schritte zur Skripterstellung


1.Erstellen Sie eine Konstante zur Aufnahme des Hexadezimalwertes für HKEY_LOCAL_MACHINE.
2.Erstellen Sie eine Variable, und weisen Sie ihr den Namen des Computers zu. Der Name kann entweder aus
Hostnamen oder einer IP-Adresse bestehen.
3.Erstellen Sie Variablen für den Pfad des Registrierungsschlüssels und den Namen des Eintrags.
4.Verwenden Sie einen GetObject-Aufruf, um auf dem angegebenen Computer eine Verbindung zum WMI-
Namespace root\default herzustellen, legen Sie den Parameter "impersonationLevel" auf "impersonate" fes
erstellen Sie eine Instanz der Klasse StdRegProv, und weisen Sie diese der Variablen objReg zu.
5.Rufen Sie die GetDWORDValue-Methode der Klasse StdRegProv auf, übergeben Sie Parameter für
Unterstruktur, Schlüsselpfad und Eintragsname, und weisen Sie den Ausgabeparameter für den DWORD-W
Variablen strValue zu.
6.Zeigen Sie den Eintragsnamen und dessen DWORD-Wert an.

Listing 60 Reg-get-dword.vbs
1 Const HKEY_LOCAL_MACHINE = &H80000002
2 strComputer = "."
3 strKeyPath = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters"
4 strEntryName = "DeadGWDetectDefault"
5
6 Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
7 strComputer & "\root\default:StdRegProv")
8
9 objReg.GetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,dwValue
10Wscript.Echo strEntryName & ": " & dwValue
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausga
die folgende angezeigt:
C:\scripts>reg-get-dword.vbs
DeadGWDetectDefault: 1

Festlegen eines Zeichenfolgenwertes in der Registrierung mithilfe von WMI


Dieses Skript zeigt, wie eine TCP/IP-Netzwerkeinstellung (Hostname) in einem Registrierungseintrag festgel
wird, dessen Wert eine Zeichenfolge (REG_SZ) ist. Zu diesem Zweck verwendet das Skript die SetStringVa
Methode der Klasse StdRegProv des WMI-Anbieters für die Systemregistrierung.

Schritte zur Skripterstellung


1.Erstellen Sie eine Konstante zur Aufnahme des Hexadezimalwertes für HKEY_LOCAL_MACHINE.
2.Erstellen Sie eine Variable, und weisen Sie ihr den Namen des Computers zu. Der Name kann entweder aus
Hostnamen oder einer IP-Adresse bestehen.

Seite 157 von 169


3.Erstellen Sie Variablen für den Pfad des Registrierungsschlüssels und den Namen des Eintrags.
4.Verwenden Sie einen GetObject-Aufruf, um auf dem angegebenen Computer eine Verbindung zum WMI-
Namespace root\default herzustellen, legen Sie den Parameter "impersonationLevel" auf "impersonate" fes
erstellen Sie eine Instanz der Klasse StdRegProv, und weisen Sie diese der Variablen objReg zu.
5.Rufen Sie die SetStringValue-Methode der Klasse StdRegProv auf, und übergeben Sie Parameter für
Unterstruktur, Schlüsselpfad, Eintragsname und Zeichenfolgenwert.
6.Rufen Sie die GetStringValue-Methode der Klasse StdRegProv auf, übergeben Sie Parameter für Unterstr
Schlüsselpfad und Eintragsname, und weisen Sie den Ausgabeparameter für den Zeichenfolgenwert der Var
strValue zu.
7.Zeigen Sie den Eintragsnamen und dessen Zeichenfolgenwert an.

Listing 61 Reg-set-string.vbs
1 Const HKEY_LOCAL_MACHINE = &H80000002
2 strComputer = "."
3 strKeyPath = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters"
4 strEntryName = "Domain"
5 strValue = "fabrikam.com"
6
7 Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
8 strComputer & "\root\default:StdRegProv")
9
10 objReg.SetStringValue HKEY_LOCAL_MACHINE, strKeyPath, strEntryName, strValue
11
12 objReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
13Wscript.Echo strEntryName & ": " & strValue
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausga
die folgende angezeigt:
C:\scripts>reg-set-string.vbs
Domain: fabrikam.com

Festlegen eines numerischen Wertes in der Registrierung mithilfe von WMI


Dieses Skript zeigt, wie eine TCP/IP-Netzwerkeinstellung (DeadGWDetectDefault) in einem Registrierungse
festgelegt wird, dessen Wert ein DWORD (REG_DWORD, eine 32-Bit-Ganzzahl) ist. Zu diesem Zweck verw
das Skript die SetDWORDValue-Methode der Klasse StdRegProv des WMI-Anbieters für die Systemregist

Schritte zur Skripterstellung


1.Erstellen Sie eine Konstante zur Aufnahme des Hexadezimalwertes für HKEY_LOCAL_MACHINE.
2.Erstellen Sie eine Variable, und weisen Sie ihr den Namen des Computers zu. Der Name kann entweder aus
Hostnamen oder einer IP-Adresse bestehen.
3.Erstellen Sie Variablen für den Pfad des Registrierungsschlüssels und den Namen des Eintrags.
4.Verwenden Sie einen GetObject-Aufruf, um auf dem angegebenen Computer eine Verbindung zum WMI-
Namespace root\default herzustellen, legen Sie den Parameter "impersonationLevel" auf "impersonate" fes
erstellen Sie eine Instanz der Klasse StdRegProv, und weisen Sie diese der Variablen objReg zu.
5.Rufen Sie die SetDWORDValue-Methode der Klasse StdRegProv auf, und übergeben Sie Parameter für

Seite 158 von 169


Unterstruktur, Schlüsselpfad, Eintragsname und DWORD-Wert.
6.Rufen Sie die GetDWORDValue-Methode der Klasse StdRegProv auf, übergeben Sie Parameter für
Unterstruktur, Schlüsselpfad und Eintragsname, und weisen Sie den Ausgabeparameter für den DWORD-W
Variablen dwValue zu.
7.Zeigen Sie den Eintragsnamen und dessen DWORD-Wert an.

Listing 62 Reg-set-dword.vbs
1 Const HKEY_LOCAL_MACHINE = &H80000002
2 strComputer = "."
3 strKeyPath = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters"
4 strEntryName = "DeadGWDetectDefault"
5 dwValue = 1
6
7 Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
8 strComputer & "\root\default:StdRegProv")
9
10 objReg.SetDWORDValue HKEY_LOCAL_MACHINE, strKeyPath, strEntryName, dwValue
11
12 objReg.GetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,dwValue
13Wscript.Echo strEntryName & ": " & dwValue
Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausga
die folgende angezeigt:
C:\scripts>reg-set-dword.vbs
DeadGWDetectDefault: 1

Tools für die Netzwerkverwaltung mit fortgeschrittenen Skriptingtechniken


Das Windows-Betriebssystem stellt Tools und Registrierungsschlüssel für die Durchführung fortgeschrittener
Skriptingverfahren bereit. Tabelle 45 enthält eine Liste der Befehlszeilentools, die in Verbindung mit den
fortgeschrittenen Verfahren der Skripterstellung zur Verwaltung des Netzwerkes eingesetzt werden können.

Tabelle 45 Tools und Verfahren für die fortgeschrittene Netzwerkverwaltung


Technologie Tool Ressource
Befehlszeilentools Ping.exe Windows-Betriebssysteme1
Befehlszeilentools Remote.exe Windows Server 2003-Supporttools
Befehlszeilentools Remote Command Service Windows 2000 Resource Kit
(Rcmd.exe und Rcmdsvc.exe)
Befehlszeilentools Remote Console Windows 2000 Resource Kit
Befehlszeilentools Rsh.exe und Rshsvc.exe: Windows 2000 Resource Kit
TCP/IP Remote Shell Service
Befehlszeilentools Telnet.exe Windows-Betriebssysteme
Befehlszeilentools Timezone.exe: Windows 2000 Resource Kit
Tool zur Aktualisierung der Sommerzeit
Befehlszeilentools Tzedit.exe: Zeitzoneneditor Windows 2000 Resource Kit (GUI-Tool)

Seite 159 von 169


Befehlszeilentools Wsremote.exe Windows XP-Supporttools
WSH WshController
WMI StdRegProv
WMI SWbemDateTime Nur Windows XP und Windows Server 2003
WMI Win32_ComputerSystem
WMI Win32_CurrentTime Nur Windows XP und Windows Server 2003
WMI Win32_LocalTime Nur Windows XP und Windows Server 2003
WMI Win32_NetworkAdapterConfiguration
WMI Win32_NetworkAdapter
WMI Win32_OperatingSystem
WMI Win32_PingStatus Nur Windows XP und Windows Server 2003
WMI Win32_TimeZone
WMI Win32_UTCTime Nur Windows XP und Windows Server 2003
ADSI Keines
1Windows 2000, Windows XP und Windows Server 2003. Kann auch in anderen Windows-Versionen vorhan
sein.
Tabelle 46 enthält eine Liste der Registrierungsschlüssel zum Verwalten des Netzwerkes bei Verwendung von
fortgeschrittenen Verfahren zur Skripterstellung.

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

Tabelle 46 Registrierungsunterschlüssel für das Verwalten von Netzwerken mit fortgeschritten


Skriptingtechniken
Registrierungsunterschlüssel
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dhcp\Parameters\Options
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces

Teil 9: Szenario für das Hinzufügen neuer Clients


Veröffentlicht: 07. Dez 2004

Seite 160 von 169


In Organisationen, in deren Netzwerken eine hohe Fluktuation unter den Netzwerkclients herrscht, wie
in Universitäten, Hotels und Konferenzzentren, kann die Automatisierung von Änderungen an der
Konfiguration von Netzwerkclients die Zahl der manuellen Fehler erheblich reduzieren und so die
Produktivität steigern, da sich die Netzwerkadministratoren somit auf dringlichere Probleme
konzentrieren können.
Fortschrittlichere Methoden wie die Verwendung von Gruppenrichtlinien in Verbindung mit Active
Directory sind häufig die beste Lösung für den Umgang mit den zahlreichen Neukonfigurationen bei
sich häufig ändernden Hosts. Eine kostengünstige und schnelle Alternative (oder Ergänzung) kann
jedoch auch ein Skript sein, das den Clientcomputern, die einem Netzwerk hinzugefügt, die geändert
oder hieraus entfernt werden müssen, die notwendigen Netzwerkeinstellungen zuweist. Ein solches
Skript müsste Einstellungen für DHCP (oder statische IP-Adressen), DNS, WINS sowie
Gatewayinformationen enthalten. Einige der Funktionen des Skripts können in vorhandene
Anmeldeskripts integriert werden oder das Skript kann separat oder vom Helpdeskpersonal ausgeführt
werden, je nachdem, welche Vorgehensweise für die Arbeitsabläufe der jeweiligen Organisation am
besten geeignet ist.
In Abhängigkeit von den Einstellungen, die geändert werden müssen, müssen ggf. auch die
entsprechenden Änderungen an den DHCP-, DNS- und WINS-Servern vorgenommen werden, und
viele hiervon können ebenfalls mit Skripts oder Befehlszeilentools automatisiert werden. Diese
serverseitigen Vorgänge sind jedoch nicht Thema dieses Dokuments.
Obwohl mit diesem Skript zunächst nur die TCP/IP-Einstellungen eines Clients bearbeitet werden,
können auch einfach weitere Clienteinstellungen wie standardmäßige Netzwerkfreigaben oder
Stammverzeichnisse hinzugefügt werden. In Netzwerken, in denen Active Directory eingesetzt wird,
kann das Skript für die Verwendung von ADSI zum Hinzufügen oder Ändern von Computer- oder
Benutzerinformationen im Verzeichnis erweitert werden.

Das Skript
Mit diesem Skript werden in einem TCP/IP-Netzwerk Clientcomputer hinzufügt, aktualisiert und aus
diesem entfernt.
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.

Eingabedatei
Das Skript akzeptiert eine Textdatei als Eingabe. Der Pfad zu dieser Datei wird im Skript angegeben.
Im vorliegenden Beispiel wird die Textdatei Clients.csv verwendet. CSV steht für "Comma-separated
Values" (Per Komma getrennte Werte). Eine CSV-Datei kann in einer Tabellenkalkulationsanwendung
ebenso wie in einem Texteditor bearbeitet werden. Die Erstellung und Bearbeitung dieser Datei
gestaltet sich in einer Tabellenkalkulationsanwendung allerdings wesentlich einfacher.
Jede Zeile der Datei enthält die folgenden Parameter durch Kommas getrennt:
hostname, add or remove client, IP address allocation method, IP address, subnet mask, default
gateway, default gateway cost metric, DNS changes, DNS server search order, DNS hostname, DNS
domain, DNS domain suffix search order, full DNS registration enabled, domain DNS registration
enabled, WINS changes, NetBIOS TCP/IP options, DNS enabled for WINS resolution, WINS
LMHOST lookup enabled, WINS HOST lookup file, WINS scope ID, WINS primary server, WINS
secondary server
Seite 161 von 169
Tabelle 47 enthält eine Liste der Parameter der Eingabedatei Clients.csv sowie Angaben zu deren Typ.

Tabelle 47 Parameter der Eingabedatei "Clients.csv"


Parameter (in der vorgegebenen Reihenfolge) Typ
Hostname Zeichenfolge
Add or remove client1, muss der dritte Parameter, IP Zeichenfolge
address allocation method, leer bleiben; der achte
Parameter, DNS changes, muss auf "Falsch" festgelegt
werden oder leer bleiben, und der fünfzehnte Parameter,
WINS changes, muss ebenfalls auf "Falsch" gesetzt
werden oder leer bleiben.
IP address allocation method2, sollten die folgenden vier Zeichenfolge
Parameter (IP address, subnet mask, default gateway und
gateway cost metric) leer sein und nur das Komma als
Trennzeichen aufweisen. Wenn der Parameter IP address
allocation method auf "static IP adressing" festgelegt wird,
müssen auch diese vier Parameter festgelegt werden, und
wenn der Computer die Verbindung zu einem Netzwerk
unter Verwendung von DNS herstellt, muss zudem auch für
den Parameter DNS search order die IP-Adresse von
mindestens einem DNS-Server festgelegt werden.
IP address Zeichenfolgenarray
Subnet mask Zeichenfolgenarray
Default gateway Zeichenfolgenarray
Default gateway cost metric Array mit Ganzzahlen
DNS changes Boolean-Wert
DNS server search order Zeichenfolgenarray
DNS hostname Zeichenfolge
DNS domain Zeichenfolge
DNS domain suffix search order Zeichenfolgenarray
Full DNS registration enabled3full DNS registration Boolean-Wert
enabled nicht festgelegt wurde, wird die folgende
Parametereinstellung (domain DNS registration enabled)
ignoriert.
Domain DNS registration enabled4domain DNS Boolean-Wert
registration enabled ist nur dann von Bedeutung, wenn der
vorherige Parameter (full DNS registration enabled) auf
"Wahr" festgelegt wurde.
WINS changes Boolean-Wert

Seite 162 von 169


NetBIOS TCP/IP options Ganzzahl
DNS enabled for WINS resolution Boolean-Wert
WINS LMHOST lookup enabled Boolean-Wert
WINS HOST lookup file Zeichenfolge
WINS scope ID Zeichenfolge
WINS primary server Zeichenfolge
WINS secondary server Zeichenfolge
1Wenn dieser Parameter auf "remove" festgelegt ist
2Wenn dieser Parameter auf "DHCP" festgelegt wurde
3Wenn der Parameter
4Der Parameter
Für alle Parameter, die nicht festgelegt werden, muss ein Komma (dem kein Leerzeichen vorangeht)
verwendet werden. Die letzte Zeile in der Datei darf nicht mit einem Eingabezeichen abgeschlossen
werden, da dies vom Skript als leerer Eintrag gelesen würde. Beachten Sie, dass das folgende Beispiel
nur vier Zeilen umfasst, die von einem Wagenrücklauf-/Zeichenvorschubzeichen abgeschlossen
werden: diese Zeilen beginnen mit "client1", "client2", "newclient1" und "oldclient1" jeweils in
Fettdruck, um die Lesbarkeit des Beispiels zu verbessern. Die zweite und dritte scheinbare Zeile ist
jeweils eine Fortsetzung der ersten Zeile, die nicht von einem Wagenrücklauf-/Zeilenvorschubzeichen
abgeschlossen wird. Die eigentliche zweite Zeile beginnt mit "client2".
Das Skript weist den Parameter IP address allocation method für jeden Host zu, der nicht entfernt
werden soll. Wenn als Methode die statische IP-Adressierung verwendet werden soll, weist das Skript
auch die nächsten vier Parameter sowie den Parameter DNS server search order zu. Wenn als
Methode DHCP verwendet werden soll, weist das Skript keine weiteren Parameter zu.
client1,,staticip,192.168.0.13,255.255.255.0,192.168.0.1,1,True,192.168.0.1
192.168.0.2,peter-d2,fabrikam.com,hr.fabrikam.com
it.fabrikam.com,True,True,True,1,,,,,,
client2,,dhcp,,,,,False,,,,,,,False,,,,,,,
newclient1,add,staticip,192.168.0.13,255.255.255.0,192.168.0.1,1,True,192.168.0.1
192.168.0.2,peter-d2,fabrikam.com,hr.fabrikam.com
it.fabrikam.com,True,True,True,1,,,,,,
oldclient1,remove,,,,,,False,,,,,,,False,,,,,,,
Schritte zur Skripterstellung
1.Definieren Sie Konstanten zur Verwendung mit FileSystemObject.
2.Erstellen Sie Variablen zur Aufnahme der Pfade zu den Eingabe- und Ausgabedateien sowie für die
Zähler für die abschließende Kontrollzählung.
3.Rufen Sie die GetInput-Funktion auf, und übergeben Sie den Pfad zur Eingabedatei.
4.Verwenden Sie die VBScript-Funktion Split, um den zurückgegebenen Dateiinhalt so auf ein Array
aufzuteilen, dass jedes Element eine Zeile der Textdatei enthält, wobei das Zeilenumbruchzeichen
als Trennzeichen verwendet wird,
5.Prüfen Sie, ob die angegebene Ausgabedatei vorhanden ist. Ist sie vorhanden, öffnen Sie sie zum
Anhängen, so dass der Inhalt nicht überschrieben wird. Ist sie nicht vorhanden, erstellen und öffnen
Sie die Datei.

Seite 163 von 169


6.Schreiben Sie eine Kopfzeile für die Ausgabedatei, die das Datum und die Anzahl der Computer in
der Eingabedatei enthält.
7.Führen Sie eine Iteration durch das Array mit den Zeilen der Textdatei durch (von denen jede einen
Client und dessen Einstellungen repräsentiert), und führen Sie dann für jede Zeile die folgenden
Aufgaben durch.
8.Verteilen Sie wiederum mit der Funktion Split jede Zeile der Textdatei so auf ein anderes Array,
dass dieses die Einstellungen für jeden Host enthält, wobei Kommas als Trennzeichen verwendet
werden.
9.Lesen Sie das erste Element des neuen Arrays, den Hostnamen, in eine Variable ein, und zeigen Sie
es an.
10.Rufen Sie die PingClient-Funktion auf, und übergeben Sie den Hostnamen.
11.Wenn der "Ping" erfolgreich verläuft, stellen Sie die Verbindung zum WMI-Dienst auf dem Host
her.
12.Wenn bei der Herstellung der Verbindung kein Fehler auftritt, weisen Sie die restlichen 21 Elemente
des neuen Arrays Variablen zu, die die Einstellungen für diesen Host repräsentieren.
13.Schreiben Sie eine Überschrift für diesen Host an die Textdatei.
14.Rufen Sie die Unterroutine GetSettings auf, um aktuelle Einstellungen dieses Hosts anzuzeigen und
in die Ausgabedatei zu schreiben.
15.Prüfen Sie den zweiten Parameter der Eingabedatei für diesen Host, um festzustellen, ob die
TCP/IP-Einstellungen aktualisiert werden sollen oder ob es sich um einen Client handelt, der
hinzugefügt oder entfernt werden soll. Schreiben Sie eine geeignete Kopfzeile, und erhöhen Sie den
Zähler für hinzugefügte, entfernte oder aktualisierte Clients.
16.Wenn der Netzwerkclient entfernt werden soll, rufen Sie die Unterroutine RemoveClient auf.
17.Prüfen Sie den Parameter für die IP-Zuweisung, um festzustellen, ob die DHCP- oder die statischen
IP-Einstellungen geändert werden sollen. Rufen Sie für DHCP die SetDHCP-Funktion auf. Für
statische IP-Einstellungen rufen Sie die Funktion SetStaticIP auf.
18.Prüfen Sie den Parameter für DNS, um festzustellen, ob die DNS-Einstellungen geändert werden
sollen. Rufen Sie in diesem Fall die Unterroutine SetDNS auf.
19.Prüfen Sie den Parameter für WINS, um festzustellen, ob die WINS-Einstellungen geändert werden
sollen. Rufen Sie in diesem Fall zunächst die Funktion SetNetBIOS auf.
20.Wenn mit der SetNetBIOS-Funktion NetBIOS over TCP/IP festgelegt werden kann oder wenn
diese Einstellung bereits den Vorstellungen entspricht, prüfen Sie den Wert der Einstellung
NetBIOS over TCP/IP. Wenn der Wert 1 ist, was bedeutet, dass NetBIOS over TCP/IP aktiviert
ist, die Einstellung jedoch nicht vom DHCP-Server abgerufen werden kann, rufen Sie die Funktion
SetWINS auf.
21.Rufen Sie die Unterroutine GetSettings erneut auf, sodass die Klassen Win32_ComputerSystem
und Win32_NetworkAdapterConfiguration erneut abgefragt werden. Hiermit werden die
Eigenschaften abgerufen, die sämtliche Änderungen an den Einstellungen beinhalten, und in die
Ausgabedatei geschrieben.

Seite 164 von 169


22.Wenn das Skript keine Verbindung zu WMI auf diesem Host herstellen kann, geben Sie eine
Fehlermeldung in die Ausgabedatei aus.
23.Wenn der "Ping" zu diesem Host fehlschlägt, geben Sie eine Fehlermeldung in die Ausgabedatei
aus.
24.Schreiben Sie eine Fußzeile in die Ausgabedatei, in der Sie die Anzahl der hinzugefügten, entfernten
und aktualisierten Clients sowie die Zahl der Fehler zusammenfassen, und schließen Sie die
Ausgabedatei.
25.Die GetInput-Funktion übernimmt den Pfad zur Eingabedatei als Parameter. Hiermit wird geprüft,
ob die angegebene Eingabedatei vorhanden ist. Falls ja, wird die Datei geöffnet und deren Inhalt
gelesen. Der Textdatenstrom wird als Zeichenfolge zurückgegeben.
26.Die Funktion PingClient übernimmt den Namen eines Hosts als Parameter. Diese Funktion
verwendet die Exec-Methode des WshShell-Objekts zur Asusführung des Befehlszeilentools
Ping.exe mit dem Hostnamen, wobei die Ausgabe des Tools analysiert wird, um festzustellen, ob
der "Ping" erfolgreich war.
27.Die Unterroutine GetSettings schreibt eine Reihe von TCP/IP-Clienteinstellungen in die
Ausgabedatei.

Sie beginnt mit der Prüfung der Rolle des Computers in der Domäne mithilfe der DomainRole-
Eigenschaft der Klasse Win32_ComputerSystem.

Anschließend wird die Funktion GetOsVer aufgerufen, um die Version des Betriebssystems zu
prüfen. Wenn die von GetOsVer zurückgegebene Betriebssystemversion höher als 5.0 (Windows
2000) ist, steht die PartOfDomain-Eigenschaft zur Verfügung und wird von der Funktion
abgerufen.

Unter Verwendung dieser Werte als globale Eigenschaften schreibt die Funktion den
Computernamen, die Domäne und die Rolle des Computers in der Domäne in die Ausgabedatei.

Die Funktion führt eine Iteration durch die Instanzen der Klasse
Win32_NetworkAdapterConfiguration durch, für die IP aktiviert ist, und schreibt Einstellungen
für IP-Zuordnung, DNS, NetBIOS und WINS in die Ausgabedatei.
28.Mit der Unterroutine RemoveClient wird ein Host aus dem Netzwerk entfernt, indem der aktuelle
Parameter IP allocation method des Clients geprüft wird.

Verwendet der Client die statische IP-Adressierung, ruft die Unterroutine die EnableStatic-
Methode der Klasse Win32_NetworkAdapterConfiguration auf und weist die IP-Adresse 0.0.0.0
und die Subnetzmaske 255.255.255.255. zu.

Verwendet der Client DHCP, ruft die Unterroutine die Methode ReleaseDHCPLease der Klasse
Win32_NetworkAdapterConfiguration auf, um den DHCP-Lease freizugeben. Anschließend
wird die EnableStatic-Methode der Klasse Win32_NetworkAdapterConfiguration aufgerufen
und die IP-Adresse 0.0.0.0 und die Subnetzmaske 255.255.255.255 zugewiesen.
29.Die Unterroutine SetDHCP ruft die Methode EnableDHCP der Klasse
Win32_NetworkAdapterConfiguration auf, um DHCP auf jedem IP-fähigen Netzwerkadapter zu
aktivieren.
30.Die Unterroutine SetStaticIP ruft die EnableStatic-Methode der Klasse
Win32_NetworkAdapterConfiguration auf, um DHCP zu deaktivieren und eine statische IP-

Seite 165 von 169


Adresse und Subnetzmaske zu aktivieren, indem die Eingabedateiparameter eines jeden IP-fähigen
Netzwerkadapters verwendet werden. Wenn eine statische IP-Adresse zugewiesen werden kann, ruft
die Unterroutine die SetGateways-Methode der Klasse Win32_NetworkAdapterConfiguration auf,
um jedem IP-fähigen Netzwerkadapter die Parameter default gateways und gateway cost metrics
aus der Eingabedatei zuzuweisen.
31.Die Unterroutine SetDNS weist dem Host neue DNS-Einstellungen zu. Sie prüft zunächst, ob in der
Eingabedatei in neuer DNS-Hostname zugewiesen wird.

Wenn ein neuer DNS-Hostname zugewiesen wird, ruft die Funktion die EnableDNS-Methode der
Klasse Win32_NetworkAdapterConfiguration auf und übergibt Parameter für DNS host name,
DNS domain, DNS server search order und DNS domain suffix search order.

Wenn dem Computer kein neuer DNS-Name zugewiesen werden soll, ruft die Unterroutine die
Methoden SetDNSDomain, SetDNSServerSearchOrder und SetDNSSuffixSearchOrder der
Klasse Win32_NetworkAdapterConfiguration auf und übergibt Parameter aus der Eingabedatei
für diese Einstellungen.

Unabhängig davon, ob dem Computer ein neuer DNS-Hostname zugewiesen wurde, ruft die
Unterroutine die Methode SetDynamicDNSRegistration der Klasse
Win32_NetworkAdapterConfiguration auf und übergibt Parameter aus der Eingabedatei für die
dynamischen DNS-Registrierungseinstellungen.
32.Die Funktion SetNetBIOS ändert die Einstellung für NetBIOS over TCP/IP für den Host. Wenn
die aktuelle Eigenschaft TcpipNetbiosOptions auf dem Host nicht gleich der Einstellung in der
Eingabedatei ist, ruft die Funktion die Methode SetTCPIPNetBIOS von SetTCPIPNetBIOS auf
und übergibt Parameter aus der Eingabedatei für diese Einstellung.
33.Mit der Funktion SetWins werden die WINS-Einstellungen auf dem Host geändert. Diese Funktion
ruft die Methode EnableWINS der Klasse Win32_NetworkAdapterConfiguration auf und
übergibt Parameter aus der Eingabedatei zum Aktivieren von DNS für die WINS-Auflösung, zum
Aktivieren von "LMHosts Lookup", den Namen der Host-Lookup-Datei sowie die WINS-
Bereichskennung. Anschließend versucht die Funktion, die WINS-Server für den Host einzustellen,
indem die Methode SetWINSServer der Klasse Win32_NetworkAdapterConfiguration
aufgerufen wird und die IP-Adressen der primären und sekundären WINS-Server aus der
Eingabedatei übergeben werden.
34.Die Funktion GetOsVer ruft die drei äußerst links befindlichen Zeichen der Eigenschaft Version
der Klasse Win32_OperatingSystem ab. Diese Gleitkommazahl wird von anderen Codemodulen
verwendet, um die Betriebssystemversion zu ermitteln, welche wiederum Einfluss darauf hat, ob
bestimmte Skriptfunktionen ausgeführt werden können.

Listing 63 Addclients.vbs

Seite 166 von 169


1 On Error Resume Next
2
3 ' Constants for FileSystemObject
4 Const FOR_READING = 1
5 Const FOR_WRITING = 2
6 Const FOR_APPENDING = 8
7
8 ' Paths to input and output files. Input file must be a comma-delimited text
9 ' file on same machine where script is to be run with name of accessible
10 ' machine and other settings on each line.
11 strFileInput = "c:\scripts\clients.csv"
12 strFileOutput = "c:\scripts\newclients.csv"
13
14 ' Counters for final tally
15 intAdd = 0
16 intUpdate = 0
17 intRemove = 0
18 intError = 0
19
20 Set objFSO = CreateObject("Scripting.FileSystemObject")
21
22 strInput = GetInput(strFileInput)
23
24 ' Get computer info by breaking input stream into array at line breaks.
25 arrClients = Split(strInput, VbCrLf)
26
27 ' Check to see if the output file exists. If so, open it for appending.
28 ' If not, create it and open it for writing.
29 If objFSO.FileExists(strFileOutput) Then
30 Set objOutputFile = objFSO.OpenTextFile(strFileOutput, FOR_APPENDING)
31 Else
32 Set objOutputFile = objFSO.CreateTextFile(strFileOutput)
33 End If
34 If Err <> 0 Then
35 Wscript.Echo "Unable to open " & strFileOutput & " for output."
36 WScript.Quit
37 End If
38
39 ' Write header for file.
40 objOutputFile.WriteLine "Date: " & Now & VbCrLf & "Adding updating or " & _
41 "removing " & (UBound(arrClients) + 1) & " new client computers." & _
42 VbCrLf & VbCrLf & String(120, "-") & VbCrLf
43
44 For Each strClient In arrClients
45
46 ' Get settings by breaking each computer info array at commas.
47 strComputer = ""
48 arrParams = Split(strClient, ",")
49 strComputer = arrParams(0)
50 WScript.Echo VbCrLf & "Host: " & strComputer & VbCrLf
51
52 ' Ping remote computer. If no response, display error message and end script.
53 blnPingSuccess = PingClient(strComputer)
54 If blnPingSuccess = True Then
55
56 ' Connect to the WMI service.
57 Set objWMIService = GetObject("winmgmts:" _
58 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
59 If Err = 0 Then
60
61 Err.Clear
62 strAddRemove = arrParams(1)
63 strIpAlloc = arrParams(2)
64 arrIPAddresses = Split(arrParams(3))
65 arrSubnetMasks = Split(arrParams(4)) Seite 167 von 169
66 arrDefaultGateways = Split(arrParams(5))
67 arrGatewayCostMetrics = Split(arrParams(6))
68 blnDNSChanges = arrParams(7)
Teil 10: Ressourcen für den Einsatz von Skripts in der
Netzwerkverwaltung
Veröffentlicht: 07. Dez 2004
Diese Ressourcen enthalten weitere Informationen und Tools in Verbindung mit der
Skripterstellung für Aufgaben, die in diesem Dokument beschrieben wurden.

Websites

Hunderte von Beispielskripts für eine breite Palette an Einsatzbereichen finden Sie im
TechNet Script Center unter
http://go.microsoft.com/fwlink/?LinkId=24771 (englischsprachig), oder unter
http://www.microsoft.com/germany/technet/scriptcenter/default.mspx

Rubriken zum Themenkreis grundlegende und fortgeschrittenere Skripterstellung finden Sie im
TechNet in
"Tales from a Script" unter
http://go.microsoft.com/fwlink/?LinkId=27640 (nur auf Englisch verfügbar).

Rubriken zu fortgeschrittenen Skripterstellungsverfahren finden Sie in der
MSDN Scripting Clinic unter
http://go.microsoft.com/fwlink/?LinkId=24784 (nur auf Englisch verfügbar).

Dokumentation und Downloads für VBScript und Windows Script Host finden Sie in
MSDN Windows Script unter
http://go.microsoft.com/fwlink/?LinkId=298 (nur auf Englisch verfügbar).

WMI-Dokumentation für Entwickler und Administratoren finden Sie im
WMI SDK, einem Bestandteil des Platform SDK, im MSDN unter
http://go.microsoft.com/fwlink/?LinkId=24766 (nur auf Englisch verfügbar).

Bücher

Eine Einführung in die Skripterstellung enthält der
MicrosoftWindows 2000 Scripting Guide
des Microsoft Windows Resource Kit Scripting Teams,
2003, Redmond, WA: Microsoft Press.

Hinweis
Der vollständige Text dieses Buches steht online im TechNet Script Center unter folgendem
URL zum Abruf bereit:
http://go.microsoft.com/fwlink/?LinkId=24768 (englischsprachig).
Den ersten Teil des Buches können Sie in deutscher Sprache unter
http://www.microsoft.com/germany/technet/datenbank/articles/600356.mspx abrufen.

Magazine

Windows & .NET Magazine unter http://go.microsoft.com/fwlink/?LinkId=30007- umfasst
Informationen aus dem Newsletter Windows Scripting Solutions.

Seite 168 von 169


Registrierung
Detaillierte Informationen über viele Registrierungseinträge bieten die folgenden Quellen:

Das Kapitel "Registry" des Windows 2000 Scripting Guide unter
http://go.microsoft.com/fwlink/?LinkId=30001 (englischsprachig).

"Resource Kit Registry Reference for Windows Server 2003" unter
http://go.microsoft.com/fwlink/?LinkId=30003 (englischsprachig).

"Technical Reference to the Registry" von Windows 2000 Server unter
http://go.microsoft.com/fwlink/?LinkId=31141 (englischsprachig).
Die Windows-Registrierung enthält zahlreiche netzwerkbezogene Einstellungen. Unter
Verwendung des WMI-Anbieters für die Systemregistrierung können
Registrierungseinstellungen direkt mit einem Skript gelesen und geändert werden, indem die
Klasse StdRegProv im Namespace \Root\Default verwendet wird.
Tabelle 48 enthält eine Liste der wichtigeren Registrierungsunterschlüssel für die Erstellung von
Skripts für netzwerkbezogene Einstellungen.

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 48 Registrierungsunterschlüssel für die Erstellung von Skripts für


netzwerkbezogene Einstellungen
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
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBIOS
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netman

Tools und Downloads



Der Windows Management Instrumentation Tester (Wbemtest.exe), der zum Lieferumfang
aller Windows-Versionen gehört, unter denen WMI ausgeführt wird, enthält Informationen über
ein Tool, das detaillierte Informationen über WMI-Klassen, -Eigenschaften und -Methoden
abruft.

Seite 169 von 169