automatisieren von tcpip

169
Seite 1 von 169 Automatisieren von TCP/IP-Netzwerken auf Clients

Upload: philipp

Post on 06-Jun-2015

1.637 views

Category:

Documents


0 download

DESCRIPTION

Zusammenfassung des TechNet-Artikels:http://www.microsoft.com/germany/technet/datenbank/articles/600480.mspx

TRANSCRIPT

Page 1: Automatisieren von TCPIP

Seite 1 von 169

Automatisieren von TCP/IP-Netzwerken auf Clients

Page 2: Automatisieren von TCPIP

Seite 2 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

Page 3: Automatisieren von TCPIP

Seite 3 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

Page 4: Automatisieren von TCPIP

Seite 4 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

Page 5: Automatisieren von TCPIP

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

Page 6: Automatisieren von TCPIP

Seite 6 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

Page 7: Automatisieren von TCPIP

Seite 7 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 Eigenschaften; 41 Methoden zum Ändern von Eigenschaften

Die wichtigste Klasse für die Skripterstellung für TCP/IP-Aufgaben. Enthält die meisten der in diesem Dokument beschriebenen Einstellungen.

Win32_NetworkAdapter Schreibgeschützte Eigenschaften

Besitzt eine 1:1-Beziehung mit Instanzen von Win32_NetworkAdapterConfiguration

Win32_NetworkAdapterSetting Schreibgeschützte Eigenschaften

Eine Verknüpfungsklasse, die die 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

Page 8: Automatisieren von TCPIP

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

Page 9: Automatisieren von TCPIP

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

Page 10: Automatisieren von TCPIP

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

Page 11: Automatisieren von TCPIP

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

Page 12: Automatisieren von TCPIP

Seite 12 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

Page 13: Automatisieren von TCPIP

Seite 13 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

Page 14: Automatisieren von TCPIP

Seite 14 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

Page 15: Automatisieren von TCPIP

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

Page 16: Automatisieren von TCPIP

Seite 16 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

1

2

3

4

5

6

Set objWMIService = GetObject("winmgmts:")

Set colNicConfig = _

objWMIService.InstancesOf("Win32_NetworkAdapterConfiguration")

For Each objNicConfig In colNicConfig

WScript.Echo objNicConfig.DHCPEnabled

Next

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

Page 17: Automatisieren von TCPIP

Seite 17 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

1

2

3

4

5

6

Set objWMIService = GetObject("winmgmts:")

Set colNicConfig = _

objWMIService.InstancesOf("Win32_NetworkAdapterConfiguration")

For Each objNicConfig In colNicConfig

WScript.Echo "DHCP Enabled: " & objNicConfig.DHCPEnabled

Next

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

Page 18: Automatisieren von TCPIP

Seite 18 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

Page 19: Automatisieren von TCPIP

Seite 19 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

1

2

3

4

5

6

7

Set objWMIService = GetObject("winmgmts:")

Set colNicConfig = objWMIService.ExecQuery("SELECT * FROM " & _

"Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfig

WScript.Echo "Network Adapter: " & objNicConfig.Index

WScript.Echo " DHCP Enabled: " & objNicConfig.DHCPEnabled

Next

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.

Page 20: Automatisieren von TCPIP

Seite 20 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

1

2

3

4

5

6

7

8

intIndex = 1 ' index of an IP-enabled network adapter

Set objWMIService = GetObject("winmgmts:")

Set colNicConfig = objWMIService.ExecQuery("SELECT * FROM " & _

"Win32_NetworkAdapterConfiguration WHERE Index = " & intIndex)

For Each objNicConfig In colNicConfig

WScript.Echo "Network Adapter: " & objNicConfig.Index

WScript.Echo " DHCP Enabled: " & objNicConfig.DHCPEnabled

Next

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,

Page 21: Automatisieren von TCPIP

Seite 21 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

2

3

4

5

6

7

8

9

10

11

12

Set objWMIService = GetObject("winmgmts:")

Set colNicConfig = objWMIService.ExecQuery("SELECT * FROM " & _

"Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfig

WScript.Echo "Network Adapter: " & objNicConfig.Index

If Not IsNull(objNicConfig.IPAddress) Then

strIPAddresses = Join(objNicConfig.IPAddress)

Else

strIPAddresses = ""

End If

WScript.Echo " IP Address(es): " & strIPAddresses

Next

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.

Page 22: Automatisieren von TCPIP

Seite 22 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

2

3

4

5

6

7

8

9

10

11

12

Set objWMIService = GetObject("winmgmts:")

Set colNicConfig = objWMIService.ExecQuery("SELECT * FROM " & _

"Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfig

WScript.Echo "Network Adapter: " & objNicConfig.Index

WScript.Echo " IP Address(es):"

If Not IsNull(objNicConfig.IPAddress) Then

For Each strIPAddress In objNicConfig.IPAddress

WScript.Echo " " & strIPAddress

Next

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

Page 23: Automatisieren von TCPIP

Seite 23 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

Page 24: Automatisieren von TCPIP

Seite 24 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

On Error Resume Next

strComputer = "."

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

WScript.Echo VbCrLf & "IP Settings"

For Each objNicConfig In colNicConfigs

WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index

WScript.Echo " " & objNicConfig.Description & VbCrLf

WScript.Echo " DHCP Enabled: " & _

objNicConfig.DHCPEnabled

If Not IsNull(objNicConfig.IPAddress) Then

strIPAddresses = Join(objNicConfig.IPAddress)

Else

strIPAddresses = ""

End If

WScript.Echo " IP Address(es): " & strIPAddresses

If Not IsNull(objNicConfig.IPSubnet) Then

strIPSubnet = Join(objNicConfig.IPSubnet)

Else

strIPSubnet = ""

End If

WScript.Echo " Subnet Mask(s): " & strIPSubnet

If Not IsNull(objNicConfig.DefaultIPGateway) Then

strDefaultIPGateway = Join(objNicConfig.DefaultIPGateway)

Else

strDefaultIPGateway = ""

End If

WScript.Echo " Default Gateways(s): " & strDefaultIPGateway

If Not IsNull(objNicConfig.GatewayCostMetric) Then

strGatewayCostMetric = Join(objNicConfig.GatewayCostMetric)

Else

strGatewayCostMetric = ""

End If

WScript.Echo " Gateway Metric(s): " & strGatewayCostMetric

WScript.Echo " Interface Metric: " & _

objNicConfig.IPConnectionMetric

WScript.Echo " Connection-specific DNS Suffix: " & _

objNicConfig.DNSDomain

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

Page 25: Automatisieren von TCPIP

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

Page 26: Automatisieren von TCPIP

Seite 26 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

Page 27: Automatisieren von TCPIP

Seite 27 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

On Error Resume Next

strComputer = "."

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNics = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapter")

WScript.Echo VbCrLf & "Network Adapter Settings"

For Each objNic In colNics

WScript.Echo VbCrLf & " Network Adapter (Device ID)" & _

objNic.DeviceID

Wscript.Echo " Index: " & objNic.Index

Wscript.Echo " MAC Address: " & objNic.MACAddress

Wscript.Echo " Adapter Type: " & objNic.AdapterType

Wscript.Echo " Adapter Type Id: " & objNic.AdapterTypeID

Wscript.Echo " Description: " & objNic.Description

Wscript.Echo " Manufacturer: " & objNic.Manufacturer

Wscript.Echo " Name: " & objNic.Name

Wscript.Echo " Product Name: " & objNic.ProductName

Wscript.Echo " Net Connection ID: " & objNic.NetConnectionID

Wscript.Echo " Net Connection Status: " & objNic.NetConnectionStatus

Wscript.Echo " PNP Device ID: " & objNic.PNPDeviceID

Wscript.Echo " Service Name: " & objNic.ServiceName

If Not IsNull(objNic.NetworkAddresses) Then

strNetworkAddresses = Join(objNic.NetworkAddresses)

Else

strNetworkAddresses = ""

End If

Wscript.Echo " NetworkAddresses: " & strNetworkAddresses

Wscript.Echo " Permanent Address: " & objNic.PermanentAddress

Wscript.Echo " AutoSense: " & objNic.AutoSense

Wscript.Echo " Maximum Number Controlled: " & objNic.MaxNumberControlled

Wscript.Echo " Speed: " & objNic.Speed

Wscript.Echo " Maximum Speed: " & objNic.MaxSpeed

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

Page 28: Automatisieren von TCPIP

Seite 28 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:

Page 29: Automatisieren von TCPIP

Seite 29 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:

Page 30: Automatisieren von TCPIP

Seite 30 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

Page 31: Automatisieren von TCPIP

Seite 31 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"

Page 32: Automatisieren von TCPIP

Seite 32 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

Page 33: Automatisieren von TCPIP

Seite 33 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

Page 34: Automatisieren von TCPIP

Seite 34 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

On Error Resume Next

strComputer = "."

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

WScript.Echo VbCrLf & "MAC & IP Addresses & Subnet Masks"

For Each objNicConfig In colNicConfigs

Set objNic = objWMIService.Get _

("Win32_NetworkAdapter.DeviceID=" & objNicConfig.Index)

WScript.Echo VbCrLf & " " & objNic.AdapterType & " " & _

objNic.NetConnectionID

If Err Then

WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index

End If

WScript.Echo " " & objNicConfig.Description & VbCrLf

WScript.Echo " MAC Address:" & VbCrLf & _

" " & objNic.MACAddress

WScript.Echo " IP Address(es):"

For Each strIPAddress In objNicConfig.IPAddress

WScript.Echo " " & strIPAddress

Next

WScript.Echo " Subnet Mask(s):"

For Each strIPSubnet In objNicConfig.IPSubnet

WScript.Echo " " & strIPSubnet

Next

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

Page 35: Automatisieren von TCPIP

Seite 35 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

Page 36: Automatisieren von TCPIP

Seite 36 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

Page 37: Automatisieren von TCPIP

Seite 37 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

On Error Resume Next

strComputer = "."

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

WScript.Echo VbCrLf & "MAC & IP Addresses & Subnet Masks"

For Each objNicConfig In colNicConfigs

Set colNics = objWMIService.ExecQuery _

("ASSOCIATORS OF " & "{Win32_NetworkAdapterConfiguration.Index='" & _

objNicConfig.Index & "'}" & _

" WHERE AssocClass=Win32_NetworkAdapterSetting")

For Each objNic in colNics

WScript.Echo VbCrLf & " " & objNic.AdapterType & " " & _

objNic.NetConnectionID

If Err Then

WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index

End If

WScript.Echo " " & objNicConfig.Description & VbCrLf

WScript.Echo " MAC Address:" & VbCrLf & _

" " & objNic.MACAddress

WScript.Echo " IP Address(es):"

For Each strIPAddress In objNicConfig.IPAddress

WScript.Echo " " & strIPAddress

Next

WScript.Echo " Subnet Mask(s):"

For Each strIPSubnet In objNicConfig.IPSubnet

WScript.Echo " " & strIPSubnet

Next

Next

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):

Page 38: Automatisieren von TCPIP

Seite 38 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

Page 39: Automatisieren von TCPIP

Seite 39 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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

On Error Resume Next

strComputer = "."

strNetConn = "Local Area Connection"

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colNics = objWMIService.ExecQuery("SELECT * FROM " & _

"Win32_NetworkAdapter WHERE NetConnectionID = '" & strNetConn & "'")

If colNics.Count > 0 Then

For Each objNic in colNics

Set colNicConfigs = objWMIService.ExecQuery ("ASSOCIATORS OF " & _

"{Win32_NetworkAdapter.DeviceID='" & objNic.DeviceID & "'}" & _

" WHERE AssocClass=Win32_NetworkAdapterSetting")

For Each objNicConfig In colNicConfigs

WScript.Echo VbCrLf & " " & objNic.AdapterType & " " & _

objNic.NetConnectionID

If Not IsNull(objNicConfig.IPAddress) Then

For Each strIPAddress in objNicConfig.IPAddress

Wscript.Echo " IP Address: " & strIPAddress

Next

End If

Next

Next

Else

WScript.Echo "Unable to find NetconnectID named '" & strNetConn & "'." & _

VbCrLf & "If Windows 2000 or earlier, NetConnectionID property unavailable."

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

Page 40: Automatisieren von TCPIP

Seite 40 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

Page 41: Automatisieren von TCPIP

Seite 41 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 =

Page 42: Automatisieren von TCPIP

Seite 42 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

Page 43: Automatisieren von TCPIP

Seite 43 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

On Error Resume Next

Const HKEY_LOCAL_MACHINE = &H80000002

strComputer = "."

strKeyPath1 = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters"

strKeyPath2 = "SYSTEM\CurrentControlSet\Services\NetBT\Parameters"

strHostEntry = "Hostname"

strDomainEntry = "Domain"

strNodeEntry = "DhcpNodeType"

strRoutingEntry = "IPEnableRouter"

Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _

strComputer & "\root\default:StdRegProv")

objReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath1,strHostEntry,strHostname

objReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath1,strDomainEntry,strDomain

objReg.GetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath2,strNodeEntry,dwNodeType

objReg.GetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath1,strRoutingEntry,dwIPRouting

Select Case dwNodeType

Case 4 strNodeType = "Mixed"

Case 8 strNodeType = "Hybrid"

Case Else strNodeType = dwNodeType

End Select

If dwIPRouting = 0 Then

strIPRouting = "No"

ElseIf dwIPRouting = 1 Then

strIPRouting = "Yes"

Else

strIPRouting = "?"

End If

strComputer = "."

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colFirstNicConfig = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objFirstNicConfig In colFirstNicConfig

strDnsWins = objFirstNicConfig.DNSEnabledForWINSResolution

Next

If strDnsWins = False Then

strWinsProxy = "No"

ElseIf strDnsWins = True Then

strWinsProxy = "Yes"

Else

strWinsProxy = "?"

End If

' Display global settings.

WScript.Echo VbCrLf & "Windows IP Configuration" & VbCrLf

WScript.Echo " Host Name . . . . . . . . . . . . : " & strHostname

WScript.Echo " Primary DNS Suffix . . . . . . . : " & strDomain

WScript.Echo " Node Type . . . . . . . . . . . . : " & strNodeType

WScript.Echo " IP Routing Enabled. . . . . . . . : " & strIPRouting

WScript.Echo " WINS Proxy Enabled. . . . . . . . : " & strWinsProxy

WScript.Echo " DNS Suffix Search List. . . . . . : " & strDomain

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

sngOsVer = GetOsVer

' Display per-adapter settings.

For Each objNicConfig In colNicConfigs

intIndex = objNicConfig.Index

Set objNic = objWMIService.Get("Win32_NetworkAdapter.DeviceID=" & intIndex)

Page 44: Automatisieren von TCPIP

Seite 44 von 169

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

Page 45: Automatisieren von TCPIP

Seite 45 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

Page 46: Automatisieren von TCPIP

Seite 46 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

On Error Resume Next

strComputer = "client1"

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

WScript.Echo VbCrLf & "Computer Name: " & strComputer

WScript.Echo " IP Addresses & Subnet Masks"

For Each objNicConfig In colNicConfigs

WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index

WScript.Echo " " & objNicConfig.Description & VbCrLf

WScript.Echo " IP Address(es):"

For Each strIPAddress In objNicConfig.IPAddress

WScript.Echo " " & strIPAddress

Next

WScript.Echo " Subnet Mask(s):"

For Each strIPSubnet In objNicConfig.IPSubnet

WScript.Echo " " & strIPSubnet

Next

Next

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.

Page 47: Automatisieren von TCPIP

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

Page 48: Automatisieren von TCPIP

Seite 48 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

Page 49: Automatisieren von TCPIP

Seite 49 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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

On Error Resume Next

strTarget = "192.168.0.1" 'IP address or hostname

Set objShell = CreateObject("WScript.Shell")

Set objExec = objShell.Exec("ping -n 2 -w 1000 " & strTarget)

strPingResults = LCase(objExec.StdOut.ReadAll)

If InStr(strPingResults, "reply from") Then

WScript.Echo strTarget & " responded to ping."

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strTarget & "\root\cimv2")

Set colCompSystems = objWMIService.ExecQuery("SELECT * FROM " & _

"Win32_ComputerSystem")

For Each objCompSystem In colCompSystems

WScript.Echo "Host Name: " & LCase(objCompSystem.Name)

Next

Else

WScript.Echo strTarget & " did not respond to ping."

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

Page 50: Automatisieren von TCPIP

Seite 50 von 169

Listing 15 Ping-multi.vbs

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

On Error Resume Next

arrTargets = Array("192.168.0.1", "192.168.0.11", "192.168.0.12", _

"192.168.0.13")

For Each strTarget In arrTargets

Set objShell = CreateObject("WScript.Shell")

Set objExec = objShell.Exec("ping -n 2 -w 1000 " & strTarget)

strPingResults = LCase(objExec.StdOut.ReadAll)

If InStr(strPingResults, "reply from") Then

WScript.Echo VbCrLf & strTarget & " responded to ping."

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strTarget & "\root\cimv2")

Set colCompSystems = objWMIService.ExecQuery("SELECT * FROM " & _

"Win32_ComputerSystem")

For Each objCompSystem In colCompSystems

WScript.Echo "Host Name: " & LCase(objCompSystem.Name)

Next

Else

WScript.Echo VbCrLf & strTarget & " did not respond to ping."

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

Page 51: Automatisieren von TCPIP

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

Page 52: Automatisieren von TCPIP

Seite 52 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

Page 53: Automatisieren von TCPIP

Seite 53 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

On Error Resume Next

strComputer = "."

strTarget = " client1" 'IP address or hostname

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colPings = objWMIService.ExecQuery _

("Select * From Win32_PingStatus where Address = '" & strTarget & "'")

If Err = 0 Then

Err.Clear

For Each objPing in colPings

If Err = 0 Then

Err.Clear

If objPing.StatusCode = 0 Then

Wscript.Echo strTarget & " responded to ping."

Wscript.Echo "Responding Address: " & objPing.ProtocolAddress

Wscript.Echo "Responding Name: " & objPing.ProtocolAddressResolved

Wscript.Echo "Bytes Sent: " & objPing.BufferSize

Wscript.Echo "Time: " & objPing.ResponseTime & " ms"

Wscript.Echo "TTL: " & objPing.ResponseTimeToLive & " seconds"

Else

WScript.Echo strTarget & " did not respond to ping."

WScript.Echo "Status Code: " & objPing.StatusCode

End If

Else

Err.Clear

WScript.Echo "Unable to call Win32_PingStatus on " & strComputer & "."

End If

Next

Else

Err.Clear

WScript.Echo "Unable to call Win32_PingStatus on " & strComputer & "."

End 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

Page 54: Automatisieren von TCPIP

Seite 54 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

Page 55: Automatisieren von TCPIP

Seite 55 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

On Error Resume Next

strComputer = "."

arrTargets = Array("192.168.0.1", "192.168.0.11", "192.168.0.12", _

"192.168.0.13")

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

For Each strTarget In arrTargets

Set colPings = objWMIService.ExecQuery _

("Select * From Win32_PingStatus where Address = '" & strTarget & "'")

If Err = 0 Then

Err.Clear

For Each objPing in colPings

If objPing.StatusCode = 0 Then

Wscript.Echo VbCrLf & strTarget & " responded to ping."

Wscript.Echo "Responding Address: " & objPing.ProtocolAddress

Wscript.Echo "Responding Name: " & objPing.ProtocolAddressResolved

Wscript.Echo "Bytes Sent: " & objPing.BufferSize

Wscript.Echo "Time: " & objPing.ResponseTime & " ms"

Wscript.Echo "TTL: " & objPing.ResponseTimeToLive & " seconds"

GetName

Else

WScript.Echo VbCrLf & strTarget & " did not respond to ping."

WScript.Echo "Status Code: " & objPing.StatusCode

End If

Next

Else

Err.Clear

If ExecPing = True Then

GetName

End If

End If

Next

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

Function ExecPing

Set objShell = CreateObject("WScript.Shell")

Set objExec = objShell.Exec("ping -n 2 -w 1000 " & strTarget)

strPingResults = LCase(objExec.StdOut.ReadAll)

If InStr(strPingResults, "reply from") Then

WScript.Echo VbCrLf & strTarget & " responded to ping."

ExecPing = True

Else

WScript.Echo VbCrLf & strTarget & " did not respond to ping."

ExecPing = False

End If

End Function

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

Sub GetName

Err.Clear

Set objWMIServiceRemote = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strTarget & "\root\cimv2")

If Err = 0 Then

Err.Clear

Set colCompSystems = objWMIServiceRemote.ExecQuery("SELECT * FROM " & _

"Win32_ComputerSystem")

For Each objCompSystem In colCompSystems

WScript.Echo "Host Name: " & LCase(objCompSystem.Name)

Page 56: Automatisieren von TCPIP

Seite 56 von 169

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.

Page 57: Automatisieren von TCPIP

Seite 57 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 Zeichenfolgenarray Array von IP-Adressen der Standardgateways, die vom

Page 58: Automatisieren von TCPIP

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

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

DHCPServer Zeichenfolge IP-Adresse des DHCP-Servers.

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

IPConnectionMetric

(Neu bei Windows XP)

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

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

IPSubnet Zeichenfolge Array aller Subnetzmasken, die dem aktuellen Netzwerkadapter zugeordnet sind.

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

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

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

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 Zeichenfolgen

SubnetMask – Array von Zeichenfolgen

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

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

Page 59: Automatisieren von TCPIP

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

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

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

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

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

SetGateways DefaultIPGateway – Array von Zeichenfolgen

GatewayCostMetric – unit16

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

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

• 0 bedeutet: erfolgreicher Abschluss.

• 1 bedeutet: erfolgreicher Abschluss, Neustart erforderlich.

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

Anzeigen von DHCP-Clientinformationen

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

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

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

Page 60: Automatisieren von TCPIP

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

Page 61: Automatisieren von TCPIP

Seite 61 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

Page 62: Automatisieren von TCPIP

Seite 62 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

On Error Resume Next

strComputer = "."

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfigs

strDNSHostName = objNicConfig.DNSHostName

strIndex = objNicConfig.Index

strDescription = objNicConfig.Description

blnDHCPEnabled = objNicConfig.DHCPEnabled

If blnDHCPEnabled Then

strDHCPServer = objNicConfig.DHCPServer

dtmRawLeaseObtainedDate = objNicConfig.DHCPLeaseObtained

strDHCPLeaseObtained = WMIDateToString(dtmRawLeaseObtainedDate)

dtmRawLeaseExpiresDate = objNicConfig.DHCPLeaseExpires

strDHCPLeaseExpires = WMIDateToString(dtmRawLeaseExpiresDate)

End If

strDHCPSettings = strDHCPSettings & VbCrLf & VbCrLf & _

" Network Adapter " & strIndex & VbCrLf & _

" " & strDescription & VbCrLf & VbCrLf & _

" DHCP Enabled: " & blnDHCPEnabled

If blnDHCPEnabled Then

strDHCPSettings = strDHCPSettings & VbCrLf & _

" DHCP Server: " & strDHCPServer & VbCrLf & _

" DHCP Lease Obtained: " & strDHCPLeaseObtained & VbCrLf & _

" DHCP Lease Expires: " & strDHCPLeaseExpires

End If

Next

WScript.Echo VbCrLf & "DHCP Settings" & VbCrLf & VbCrLf & _

"Host Name: " & strDNSHostName & strDHCPSettings

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

Function WMIDateToString(dtmDate)

WMIDateToString = CDate(Mid(dtmDate, 5, 2) & "/" & _

Mid(dtmDate, 7, 2) & "/" & _

Left(dtmDate, 4) & " " & _

Mid(dtmDate, 9, 2) & ":" & _

Mid(dtmDate, 11, 2) & ":" & _

Mid(dtmDate, 13, 2))

End Function

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

C:\scripts>dhcpsettings.vbs

DHCP Settings

Host Name: client1

Network Adapter 1

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

Page 63: Automatisieren von TCPIP

Seite 63 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

Page 64: Automatisieren von TCPIP

Seite 64 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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

On Error Resume Next

strComputer = "."

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfigs

WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index & _

VbCrLf & " " & objNicConfig.Description & VbCrLf

If Not objNicConfig.DHCPEnabled Then

WScript.Echo " Enabling DHCP ..."

intReturn = objNicConfig.EnableDHCP

If intReturn = 0 Then

strSuccess = " DHCP enabled."

Else

strSuccess = " Unable to enable DHCP."

End If

WScript.Echo VbCrLf & strSuccess

Else

WScript.Echo " DHCP already enabled" & VbCrLf & _

" DHCP Server: " & objNicConfig.DHCPServer

End If

Next

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

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

Network Adapter 1

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

Scheduler Miniport

Enabling DHCP ...

DHCP enabled.

Verwalten von DHCP-Leases

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

Page 65: Automatisieren von TCPIP

Seite 65 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 =

Page 66: Automatisieren von TCPIP

Seite 66 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

Page 67: Automatisieren von TCPIP

Seite 67 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

On Error Resume Next

strComputer = "."

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

WScript.Echo VbCrLf & "Settings before releasing lease"

For Each objNicConfig In colNicConfigs

blnDHCPEnabled = objNicConfig.DHCPEnabled

WScript.Echo VbCrLf & _

" Network Adapter " & objNicConfig.Index & VbCrLf & _

" " & objNicConfig.Description & VbCrLf & VbCrLf & _

" DHCP Enabled: " & blnDHCPEnabled

If blnDHCPEnabled Then

dtmLeaseObtainedDate = objNicConfig.DHCPLeaseObtained

strDHCPLeaseObtained = WMIDateToString(dtmLeaseObtainedDate)

dtmLeaseExpiresDate = objNicConfig.DHCPLeaseExpires

strDHCPLeaseExpires = WMIDateToString(dtmLeaseExpiresDate)

WScript.Echo " DHCP Server: " & objNicConfig.DHCPServer & _

VbCrLf & " DHCP Lease Obtained: " & strDHCPLeaseObtained & _

VbCrLf & " DHCP Lease Expires: " & strDHCPLeaseExpires

intReleaseReturn = objNicConfig.ReleaseDHCPLease

WScript.Sleep 5000

If (intReleaseReturn = 0 Or intReleaseReturn = 1) Then

strSuccess = " DHCP lease released."

If intReleaseReturn = 1 Then

strSuccess = strSuccess & " Must reboot machine."

End If

Else

strSuccess = " Unable to release DHCP lease."

End If

WScript.Echo VbCrLf & strSuccess

End If

Next

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

WScript.Echo VbCrLf & "Settings after releasing lease"

For Each objNicConfig In colNicConfigs

blnDHCPEnabled = objNicConfig.DHCPEnabled

WScript.Echo VbCrLf & _

" Network Adapter " & objNicConfig.Index & VbCrLf & _

" " & objNicConfig.Description & VbCrLf & VbCrLf & _

" DHCP Enabled: " & blnDHCPEnabled

If blnDHCPEnabled Then

dtmLeaseObtainedDate = objNicConfig.DHCPLeaseObtained

strDHCPLeaseObtained = WMIDateToString(dtmLeaseObtainedDate)

dtmLeaseExpiresDate = objNicConfig.DHCPLeaseExpires

strDHCPLeaseExpires = WMIDateToString(dtmLeaseExpiresDate)

Page 68: Automatisieren von TCPIP

Seite 68 von 169

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.

Page 69: Automatisieren von TCPIP

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

Page 70: Automatisieren von TCPIP

Seite 70 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

Page 71: Automatisieren von TCPIP

Seite 71 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 Zeichenfolgenarray Array 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.

Page 72: Automatisieren von TCPIP

Seite 72 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 DNSDomain – Zeichenfolge DNSServerSearchOrder – Array von Zeichenfolgen DNSDomainSuffixSearchOrder – Zeichenfolge

Aktiviert DNS auf dem Client.

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 von Zeichenfolgen

Verwendet ein Array von 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

Page 73: Automatisieren von TCPIP

Seite 73 von 169

Zieladapter. Unter Windows NT 4.0 ist die Einstellung global.

SetDNSSuffixSearchOrder DNSDomainSuffixSearchOrder – Zeichenfolge

Statische Methode. Verwendet 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 – Boolean-Wert DomainDNSRegistrationEnabled – Boolean-Wert

Gibt den Modus der dynamischen DNS-Registrierung von IP-Adressen für den IP-Adapter an.

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

Page 74: Automatisieren von TCPIP

Seite 74 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

Page 75: Automatisieren von TCPIP

Seite 75 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

46

47

48

On Error Resume Next

strComputer = "."

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfigs

strDNSSuffixSO = ""

strDNSServerSO = ""

strDNSHostName = objNicConfig.DNSHostName

strIndex = objNicConfig.Index

strDescription = objNicConfig.Description

strDNSDomain = objNicConfig.DNSDomain

strDNSSuffixSO = ""

If Not IsNull(objNicConfig.DNSDomainSuffixSearchOrder) Then

For Each strDNSSuffix In objNicConfig.DNSDomainSuffixSearchOrder

strDNSSuffixSO = strDNSSuffixSO & VbCrLf & String(37, " ") & _

strDNSSuffix

Next

End If

strDNSServerSO = ""

If Not IsNull(objNicConfig.DNSServerSearchOrder) Then

For Each strDNSServer In objNicConfig.DNSServerSearchOrder

strDNSServerSO = strDNSServerSO & VbCrLf & String(37, " ") & _

strDNSServer

Next

End If

strDomainDNSRegistrationEnabled = _

objNicConfig.DomainDNSRegistrationEnabled

strFullDNSRegistrationEnabled = objNicConfig.FullDNSRegistrationEnabled

strDNSSettings = strDNSSettings & VbCrLf & VbCrLf & _

" Network Adapter " & strIndex & VbCrLf & _

" " & strDescription & VbCrLf & VbCrLf & _

" DNS Domain: " & strDNSDomain & VbCrLf & _

" DNS Domain Suffix Search Order:" & strDNSSuffixSO & VbCrLf & _

" DNS Server Search Order:" & strDNSServerSO & VbCrLf & _

" Domain DNS Registration Enabled: " & _

strDomainDNSRegistrationEnabled & VbCrLf & _

" Full DNS Registration Enabled: " & _

strFullDNSRegistrationEnabled

Next

WScript.Echo VbCrLf & "DNS Settings" & VbCrLf & VbCrLf & _

"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

Page 76: Automatisieren von TCPIP

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

Page 77: Automatisieren von TCPIP

Seite 77 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

Page 78: Automatisieren von TCPIP

Seite 78 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

On Error Resume Next

strComputer = "."

strDNSHostName = "client1"

strDNSDomain = "fabrikam.com"

arrDNSServerSearchOrder = Array("192.168.0.1", "192.168.0.2")

arrDNSDomainSuffixSearchOrder = Array("hr.fabrikam.com", "contoso.com")

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set objNicConf = objWMIService.Get("Win32_NetworkAdapterConfiguration")

WScript.Echo VbCrLf & "DNS Host Name: " & strDNSHostName & VbCrLf & _

" Attempting to enable DNS"

intEnableDNS = objNicConf.EnableDNS(strDNSHostName, strDNSDomain, _

arrDNSServerSearchOrder, arrDNSDomainSuffixSearchOrder)

If intEnableDNS = 0 Then

WScript.Echo " Successfully enabled DNS."

ElseIf intEnableDNS = 1 Then

WScript.Echo " Successfully enabled DNS." & VbCrLf & " Must reboot."

Else

WScript.Echo " Unable to enable DNS."

End If

WScript.Echo VbCrLf & String(80,"-")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfigs

strDNSHostName = objNicConfig.DNSHostName

Next

WScript.Echo VbCrLf & "DNS Host Name: " & strDNSHostName

For Each objNicConfig In colNicConfigs

WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index & _

VbCrLf & " " & objNicConfig.Description

WScript.Echo " DNS Domain: " & objNicConfig.DNSDomain

WScript.Echo " DNS Server Search Order:"

If Not IsNull(objNicConfig.DNSServerSearchOrder) Then

For Each strDNSServer In objNicConfig.DNSServerSearchOrder

WScript.Echo " " & strDNSServer

Next

End If

WScript.Echo " DNS Domain Suffix Search Order:"

If Not IsNull(objNicConfig.DNSServerSearchOrder) Then

For Each strDNSDomainSuffix In objNicConfig.DNSDomainSuffixSearchOrder

WScript.Echo " " & strDNSDomainSuffix

Next

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

DNS Host Name: client1

Attempting to enable DNS

Unable to enable DNS.

Page 79: Automatisieren von TCPIP

Seite 79 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

Page 80: Automatisieren von TCPIP

Seite 80 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

Page 81: Automatisieren von TCPIP

Seite 81 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

On Error Resume Next

strComputer = "."

arrNewDNSServerSearchOrder = Array("192.168.0.1", "192.168.0.2")

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

WScript.Echo VbCrLf & "Computer: " & strComputer

For Each objNicConfig In colNicConfigs

WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index

WScript.Echo " DNS Server Search Order - Before:"

If Not IsNull(objNicConfig.DNSServerSearchOrder) Then

For Each strDNSServer In objNicConfig.DNSServerSearchOrder

WScript.Echo " " & strDNSServer

Next

End If

intSetDNSServers = _

objNicConfig.SetDNSServerSearchOrder(arrNewDNSServerSearchOrder)

If intSetDNSServers = 0 Then

WScript.Echo " Replaced DNS server search order list."

Else

WScript.Echo " Unable to replace DNS server search order list."

End If

Next

WScript.Echo VbCrLf & String(80, "-")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfigs

WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index

WScript.Echo " DNS Server Search Order - After:"

If Not IsNull(objNicConfig.DNSServerSearchOrder) Then

For Each strDNSServer In objNicConfig.DNSServerSearchOrder

WScript.Echo " " & strDNSServer

Next

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

Computer: .

Network Adapter 1

DNS Server Search Order - Before:

192.168.0.1

Replaced DNS server search order list.

--------------------------------------------------------------------------------

Network Adapter 1

Page 82: Automatisieren von TCPIP

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

Page 83: Automatisieren von TCPIP

Seite 83 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

Page 84: Automatisieren von TCPIP

Seite 84 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

On Error Resume Next

strComputer = "."

strOldDNSServer = "192.168.0.2"

strNewDNSServer = "192.168.0.5"

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

WScript.Echo VbCrLf & "Computer: " & strComputer

For Each objNicConfig In colNicConfigs

WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index

arrDNSServerSearchOrder = objNicConfig.DNSServerSearchOrder

WScript.Echo " DNS Server Search Order - Before:"

If Not IsNull(objNicConfig.DNSServerSearchOrder) Then

For Each strDNSServer In objNicConfig.DNSServerSearchOrder

WScript.Echo " " & strDNSServer

Next

End If

blnFound = 0

For i = 0 to UBound(arrDNSServerSearchOrder)

If arrDNSServerSearchOrder(i) = strOldDNSServer Then

arrDNSServerSearchOrder(i) = strNewDNSServer

blnFound = 1

End If

Next

If blnFound Then

retSetDNS =

objNicConfig.SetDNSServerSearchOrder(arrDNSServerSearchOrder)

If retSetDNS = 0 Then

WScript.Echo " Replaced " & strOldDNSServer & " with " & _

strNewDNSServer & " in DNS search order."

Else

WScript.Echo " Unable to change DNS server search order."

End If

Else

WScript.Echo " DNS server " & strOldDNSServer & " not found."

End If

Next

WScript.Echo VbCrLf & String(80, "-")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfigs

WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index

WScript.Echo " DNS Server Search Order - After:"

If Not IsNull(objNicConfig.DNSServerSearchOrder) Then

For Each strDNSServer In objNicConfig.DNSServerSearchOrder

WScript.Echo " " & strDNSServer

Next

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

Page 85: Automatisieren von TCPIP

Seite 85 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

Page 86: Automatisieren von TCPIP

Seite 86 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

Page 87: Automatisieren von TCPIP

Seite 87 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

On Error Resume Next

strComputer = "."

strNewDNSServer = "192.168.0.4"

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

WScript.Echo VbCrLf & "Computer: " & strComputer

For Each objNicConfig In colNicConfigs

intNewArraySize = 0

WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index

arrDNSServerSearchOrder = objNicConfig.DNSServerSearchOrder

WScript.Echo " DNS Server Search Order - Before:"

If Not IsNull(arrDNSServerSearchOrder) Then

For Each strDNSServer In arrDNSServerSearchOrder

WScript.Echo " " & strDNSServer

Next

End If

WScript.Echo " Adding " & strNewDNSServer & " to end of " & _

"DNS search order."

intNewArraySize = UBound(arrDNSServerSearchOrder) + 1

ReDim Preserve arrDNSServerSearchOrder(intNewArraySize)

arrDNSServerSearchOrder(intNewArraySize) = strNewDNSServer

intSetDNS = _

objNicConfig.SetDNSServerSearchOrder(arrDNSServerSearchOrder)

If intSetDNS = 0 Then

WScript.Echo " Added " & strNewDNSServer & _

" to end of DNS search order."

Else

WScript.Echo " Unable to change DNS server search order."

End If

Next

WScript.Echo VbCrLf & String(80, "-")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfigs

WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index

WScript.Echo " DNS Server Search Order - After:"

If Not IsNull(objNicConfig.DNSServerSearchOrder) Then

For Each strDNSServer In objNicConfig.DNSServerSearchOrder

WScript.Echo " " & strDNSServer

Next

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-addserver-end.vbs

Computer: .

Network Adapter 1

DNS Server Search Order - Before:

Page 88: Automatisieren von TCPIP

Seite 88 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

Page 89: Automatisieren von TCPIP

Seite 89 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

Page 90: Automatisieren von TCPIP

Seite 90 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

30

41

42

43

44

45

46

47

48

49

50

51

52

53

On Error Resume Next

strComputer = "."

strNewDNSServer = "192.168.0.3"

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

WScript.Echo VbCrLf & "Computer: " & strComputer

For Each objNicConfig In colNicConfigs

intNewArraySize = 0

WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index

arrDNSServerSearchOrder = objNicConfig.DNSServerSearchOrder

WScript.Echo " DNS Server Search Order - Before:"

If Not IsNull(arrDNSServerSearchOrder) Then

For Each strDNSServer In arrDNSServerSearchOrder

WScript.Echo " " & strDNSServer

Next

End If

WScript.Echo " Adding " & strNewDNSServer & " to top of " & _

"DNS search order."

intNewArraySize = UBound(arrDNSServerSearchOrder) + 1

ReDim Preserve arrDNSServerSearchOrder(intNewArraySize)

For i = (intNewArraySize - 1) To 0 Step -1

arrDNSServerSearchOrder(i + 1) = arrDNSServerSearchOrder(i)

Next

arrDNSServerSearchOrder(0) = strNewDNSServer

intSetDNS = objNicConfig.SetDNSServerSearchOrder(arrDNSServerSearchOrder)

If intSetDNS = 0 Then

WScript.Echo " Added " & strNewDNSServer & _

" to top of DNS search order."

Else

WScript.Echo " Unable to change DNS server search order."

End If

Next

WScript.Echo VbCrLf & String(80, "-")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfigs

WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index

WScript.Echo " DNS Server Search Order - After:"

If Not IsNull(objNicConfig.DNSServerSearchOrder) Then

For Each strDNSServer In objNicConfig.DNSServerSearchOrder

WScript.Echo " " & strDNSServer

Next

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-addserver-top.vbs

Computer: .

Network Adapter 1

Page 91: Automatisieren von TCPIP

Seite 91 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"

Page 92: Automatisieren von TCPIP

Seite 92 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

Page 93: Automatisieren von TCPIP

Seite 93 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

On Error Resume Next

strComputer = "."

strDNSDomain = "fabrikam.com"

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfigs

strDNSHostName = objNicConfig.DNSHostName

Next

WScript.Echo VbCrLf & "DNS Host Name: " & strDNSHostName

For Each objNicConfig In colNicConfigs

WScript.Echo VbCrLf & _

" Network Adapter " & objNicConfig.Index & VbCrLf & _

" " & objNicConfig.Description & VbCrLf & _

" DNS Domain - Before: " & objNicConfig.DNSDomain

intSetDomain = objNicConfig.SetDNSDomain(strDNSDomain)

If intSetDomain = 0 Then

WScript.Echo " Successfully set DNS domain to " & strDNSDomain

ElseIf intSetDomain = 1 Then

WScript.Echo " Successfully set DNS domain to " & strDNSDomain & _

VbCrLf & " Must reboot."

Else

WScript.Echo " Unable to set DNS domain."

End If

Next

WScript.Echo VbCrLf & String(80, "-")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfigs

strDNSHostName = objNicConfig.DNSHostName

Next

WScript.Echo VbCrLf & "DNS Host Name: " & strDNSHostName

For Each objNicConfig In colNicConfigs

WScript.Echo VbCrLf & _

" Network Adapter " & objNicConfig.Index & VbCrLf & _

" " & objNicConfig.Description & VbCrLf & _

" DNS Domain - After: " & objNicConfig.DNSDomain

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

DNS Host Name: client1

Network Adapter 1

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

Scheduler Miniport

DNS Domain - Before:

Page 94: Automatisieren von TCPIP

Seite 94 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

Page 95: Automatisieren von TCPIP

Seite 95 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: Dezimal und Hex

Wert Bedeutung

1

&h00001

Domäne beitreten Standard. Fügt einen Computer einer Domäne hinzu. Falls dieser Wert nicht angegeben wird, wird der Computer einer Arbeitsgruppe hinzugefügt.

2

&h00002

Kontenerstellung Erstellt ein Konto in einer Domäne.

4

&h00004

Kontenlöschung Löscht ein Konto, wenn eine Domäne vorhanden ist.

16

&h00010

Win9X-Update Der Beitrittsvorgang wird als Teil einer Aktualisierung von Windows 95 oder Windows 98 auf Windows NT 4.0 oder Windows 2000 durchgeführt.

32

&h00020

Domänenbeitritt falls beigetreten

Fügt einen Computer einer neuen Domäne hinzu, auch wenn er bereits Mitglied einer Domäne ist.

64

&h00040

Unsicherer Beitritt Führt einen unsicheren Beitritt durch.

128

&h00080

Computerkennwort weitergeleitet

Das Kennwort für den Computer, nicht für den Benutzer, wird übergeben. Diese Option kann nur bei unsicheren Beitritten verwendet werden.

256

&h00100

Zurückgestellter SPN-Satz Das Schreiben der Attribute SPN und DnsHostName auf dem Computerobjekt sollte bis zum Umbenennen nach dem Beitritt zurückgestellt werden.

262144

&h40000

Installationsaufruf Die APIs wurden während der Installation aufgerufen.

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.

Page 96: Automatisieren von TCPIP

Seite 96 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

Page 97: Automatisieren von TCPIP

Seite 97 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

On Error Resume Next

Const JOIN_DOMAIN = 1

strComputer = "."

strDomainName = "fabrikam.com"

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colCompSystems = objWMIService.ExecQuery _

("SELECT * FROM Win32_ComputerSystem")

For Each objCompSystem In colCompSystems

WScript.Echo VbCrLf & "Computer Name: " & LCase(objCompSystem.Name)

WScript.Echo " Domain - Before: " & LCase(objCompSystem.Domain)

intJoinDomain = objCompSystem.JoinDomainOrWorkgroup(strDomainName,,,, _

JOIN_DOMAIN)

If intJoinDomain = 0 Then

WScript.Echo " Joined computer to " & strDomainName & " domain."

ElseIf intJoinDomain = 1 Then

WScript.Echo " Joined computer to " & strDomainName & " domain." & _

VbCrLf & " Must reboot."

Else

WScript.Echo " Unable to join computer to " & strDomainName & _

" domain."

WScript.Echo "Return value of JoinDomainOrWorkgroup method: " &

intJoinDomain

End If

Next

WScript.Echo VbCrLf & String(80, "-")

Set colCompSystems = objWMIService.ExecQuery _

("SELECT * FROM Win32_ComputerSystem")

For Each objCompSystem In colCompSystems

WScript.Echo VbCrLf & "Computer Name: " & LCase(objCompSystem.Name)

WScript.Echo " Domain - After: " & LCase(objCompSystem.Domain)

intDomainRole = objCompSystem.DomainRole

Select Case intDomainRole

Case 0 strDomainRole = "Standalone Workstation"

Case 1 strDomainRole = "Member Workstation"

Case 2 strDomainRole = "Standalone Server"

Case 3 strDomainRole = "Member Server"

Case 4 strDomainRole = "Backup Domain Controller"

Case 5 strDomainRole = "Primary Domain Controller"

Case Else strDomainRole = "Cannot determine domain role."

End Select

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.

--------------------------------------------------------------------------------

Page 98: Automatisieren von TCPIP

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

Page 99: Automatisieren von TCPIP

Seite 99 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

Page 100: Automatisieren von TCPIP

Seite 100 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

On Error Resume Next

strComputer = "."

arrNewDNSSuffixSearchOrder = Array("hr.fabrikam.com", "contoso.com")

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfigs

strDNSHostName = objNicConfig.DNSHostName

Next

WScript.Echo VbCrLf & "DNS Host Name: " & strDNSHostName

For Each objNicConfig In colNicConfigs

WScript.Echo VbCrLf & _

" Network Adapter " & objNicConfig.Index & VbCrLf & _

" " & objNicConfig.Description & VbCrLf & _

" DNS Domain Suffix Search Order - Before:"

If Not IsNull(objNicConfig.DNSDomainSuffixSearchOrder) Then

For Each strDNSSuffix In objNicConfig.DNSDomainSuffixSearchOrder

WScript.Echo " " & strDNSSuffix

Next

End If

Next

WScript.Echo VbCrLf & String(80, "-")

Set objNetworkSettings = _

objWMIService.Get("Win32_NetworkAdapterConfiguration")

intSetSuffixes = _

objNetworkSettings.SetDNSSuffixSearchOrder(arrNewDNSSuffixSearchOrder)

If intSetSuffixes = 0 Then

WScript.Echo VbCrLf & "Replaced DNS domain suffix search order list."

ElseIf intSetSuffixes = 1 Then

WScript.Echo VbCrLf & "Replaced DNS domain suffix search order list." & _

VbCrLf & " Must reboot."

Else

WScript.Echo VbCrLf & "Unable to replace DNS domain suffix " & _

"search order list."

End If

WScript.Echo VbCrLf & String(80, "-")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfigs

WScript.Echo VbCrLf & _

" Network Adapter " & objNicConfig.Index & VbCrLf & _

" " & objNicConfig.Description & VbCrLf & _

" DNS Domain Suffix Search Order - After:"

If Not IsNull(objNicConfig.DNSDomainSuffixSearchOrder) Then

For Each strDNSSuffix In objNicConfig.DNSDomainSuffixSearchOrder

WScript.Echo " " & strDNSSuffix

Next

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

Page 101: Automatisieren von TCPIP

Seite 101 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

Page 102: Automatisieren von TCPIP

Seite 102 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

Page 103: Automatisieren von TCPIP

Seite 103 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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

On Error Resume Next

strComputer = "."

blnFullDNSRegistrationEnabled = True

blnDomainDNSRegistrationEnabled = True

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfigs

strDNSHostName = objNicConfig.DNSHostName

Next

WScript.Echo VbCrLf & "DNS Host Name: " & strDNSHostName

For Each objNicConfig In colNicConfigs

WScript.Echo VbCrLf & _

" Network Adapter " & objNicConfig.Index & VbCrLf & _

" " & objNicConfig.Description & VbCrLf & _

" DNS Full Registration Enabled - Before: " & _

objNicConfig.FullDNSRegistrationEnabled & VbCrLf & _

" DNS Domain Registration Enabled - Before: " & _

objNicConfig.DomainDNSRegistrationEnabled

intDynReg = objNicConfig.SetDynamicDNSRegistration _

(blnFullDNSRegistrationEnabled, blnDomainDNSRegistrationEnabled)

If intDynReg = 0 Then

WScript.Echo VbCrLf & " Successfully set dynamic DNS registration."

ElseIf intDynReg = 1 Then

WScript.Echo VbCrLf & _

" Successfully set dynamic DNS registration." & _

VbCrLf & " Must reboot."

Else

WScript.Echo VbCrLf & " Unable to set dynamic DNS registration."

End If

Next

WScript.Echo VbCrLf & String(80, "-")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfigs

WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index & _

VbCrLf & " " & objNicConfig.Description & VbCrLf & _

" DNS Full Registration Enabled - After: " & _

objNicConfig.FullDNSRegistrationEnabled & VbCrLf & _

" DNS Domain Registration Enabled - After: " & _

objNicConfig.DomainDNSRegistrationEnabled

Next

Page 104: Automatisieren von TCPIP

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

Page 105: Automatisieren von TCPIP

Seite 105 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

Page 106: Automatisieren von TCPIP

Seite 106 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

Page 107: Automatisieren von TCPIP

Seite 107 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

On Error Resume Next

' Constants for FileSystemObject

Const FOR_READING = 1

Const FOR_WRITING = 2

Const FOR_APPENDING = 8

' Paths to input and output files. Input file must be text file with name

' of accessible machine, comma, and valid domain name on each line.

strFileInput = "c:\scripts\hosts.txt"

strFileOutput = "c:\scripts\newhosts.csv"

' Domain name and DNS servers corresponding to subdomains

strTopDomain = "fabrikam.com"

arrDNSSrv1 = Array("192.168.0.1", "192.168.0.2", "192.168.0.3") 'hr

arrDNSSrv2 = Array("192.168.0.2", "192.168.0.3", "192.168.0.1") 'it

arrDNSSrv3 = Array("192.168.0.3", "192.168.0.1", "192.168.0.2") 'ac

' Create a Script Runtime FileSystemObject.

Set objFSO = CreateObject("Scripting.FileSystemObject")

' If the input file exists, dump contents of input file into a string.

strInput = GetInput(strFileInput)

' Get computer info by breaking input stream into array at line breaks.

arrHosts = Split(strInput, VbCrLf)

' Check to see if the output file exists. If so, open it for appending.

' If not, create it and open it for writing.

If objFSO.FileExists(strFileOutput) Then

Set objOutputFile = objFSO.OpenTextFile (strFileOutput, FOR_APPENDING)

Else

Set objOutputFile = objFSO.CreateTextFile(strFileOutput)

End If

If Err <> 0 Then

Wscript.Echo "Unable to open " & strFileOutput & " for output."

WScript.Quit

End If

' Write header for file.

objOutputFile.WriteLine "Inventory of computers moved to new domains." & _

VbCrLf & "Taken " & Now & VbCrLf & VbCrLf & String(120, "-") & VbCrLf

For Each strHost In arrHosts

' Get names and domains by breaking each computer info array at commas.

arrComputers = Split(strHost, ",")

strComputer = arrComputers(0)

strSubDomain = arrComputers(1)

strDomain = strSubDomain & "." & strTopDomain

WScript.Echo VbCrLf & "Host: " & strComputer & VbCrLf

' Ping remote computer. If no response display error message and end

script

blnPingSuccess = PingClient(strComputer)

If blnPingSuccess = True Then

' Connect to the WMI service.

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer &

"\root\cimv2")

If Err = 0 Then

' Write header for each computer.

objOutputFile.WriteLine "Host:,," & strComputer & VbCrLf & VbCrLf &

_

Page 108: Automatisieren von TCPIP

Seite 108 von 169

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"

Page 109: Automatisieren von TCPIP

Seite 109 von 169

Eigenschaft Typ Beschreibung

DNSEnabledForWINSResolutionBoolscher Wert

TRUE gibt an, dass DNS für die Namensauflösung über WINS aktiviert ist. Wenn der Name mithilfe von DNS nicht aufgelöst werden kann, wird die Anforderung an WINS weitergeleitet.

TcpipNetbiosOptions

Neu bei Windows XP

Uint32 Einstellungen für NetBIOS über TCP/IP. Die Werte lauten:

0 = NetBIOS über DHCP aktivieren

1 = NetBIOS aktivieren

2 = NetBIOS deaktivieren

WINSEnableLMHostsLookup Boolscher Wert

TRUE gibt an, dass die lokale LMHosts-Datei 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"

Page 110: Automatisieren von TCPIP

Seite 110 von 169

Methode Parameter Beschreibung

EnableWINS DNSEnabledForWINSResolution – Boolean-Wert

WINSEnableLMHostsLookup – Boolean-Wert

WINSHostLookupFile – Zeichenfolge

WINSScopeID – Zeichenfolge

Statische Methode. Aktiviert die für TCP/IP spezifischen Einstellungen, ist jedoch unabhängig vom Netzwerkadapter.

SetWINSServer WINSPrimaryServer – Zeichenfolge

WINSSecondaryServer – Zeichenfolge

Statische Methode. Legt den primären und sekundären WINS-Server auf dem 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.

Page 111: Automatisieren von TCPIP

Seite 111 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

Page 112: Automatisieren von TCPIP

Seite 112 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

On Error Resume Next

strComputer = "."

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfigs

strDNSHostName = objNicConfig.DNSHostName

intNetBIOS = objNicConfig.TcpipNetbiosOptions

Select Case intNetBIOS

Case 0 strNetBIOS = "Use NetBIOS setting from the DHCP server."

Case 1 strNetBIOS = "Enable NetBIOS over TCP/IP."

Case 2 strNetBIOS = "Disable NetBIOS over TCP/IP."

Case Else strNetBIOS = "Unable to determine setting for NetBIOS " & _

"Over TCP/IP."

End Select

strWINSSettings = strWINSSettings & VbCrLf & VbCrLf & _

" Network Adapter " & objNicConfig.Index & VbCrLf & _

" " & objNicConfig.Description & VbCrLf & VbCrLf & _

" NetBIOS: " & strNetBIOS & VbCrLf & _

" WINS Primary Server: " & _

objNicConfig.WINSPrimaryServer & VbCrLf & _

" WINS Secondary Server: " & _

objNicConfig.WINSSecondaryServer & VbCrLf & _

" WINS Scope ID: " & _

objNicConfig.WINSScopeID & VbCrLf & _

" WINS Enable LMHosts Lookup: " & _

objNicConfig.WINSEnableLMHostsLookup & VbCrLf & _

" WINS Host Lookup File: " & _

objNicConfig.WINSHostLookupFile & VbCrLf & _

" DNS Enabled For WINS Resolution: " & _

objNicConfig.DNSEnabledForWINSResolution

Next

WScript.Echo VbCrLf & "WINS Settings" & VbCrLf & VbCrLf & _

"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:

Page 113: Automatisieren von TCPIP

Seite 113 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 aktivieren

Wenn DHCP aktiviert ist, um NetBIOS-Einstellungen vom DHCP-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

Page 114: Automatisieren von TCPIP

Seite 114 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

Page 115: Automatisieren von TCPIP

Seite 115 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

On Error Resume Next

Const ENABLE_NETBIOS_VIA_DHCP = 0

Const ENABLE_NETBIOS = 1

Const DISABLE_NETBIOS = 2

strComputer = "."

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

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

For Each objNicConfig in colNicConfigs

WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index & _

" " & objNicConfig.Description & VbCrLf & _

" Attempting to set NetBIOS over TCP/IP default."

intNetBIOS = objNicConfig.SetTCPIPNetBIOS(ENABLE_NETBIOS_VIA_DHCP)

If intNetBIOS = 0 Then

WScript.Echo " Successfully set NetBIOS over TCP/IP default."

ElseIf intNetBIOS = 1 Then

WScript.Echo " Successfully set NetBIOS over TCP/IP default." & _

VbCrLf & " Must reboot."

Else

WScript.Echo " Unable to set NetBIOS default."

End If

Next

WScript.Echo VbCrLf & String(80, "-")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfigs

WScript.Echo VbCrLf & _

" Network Adapter " & objNicConfig.Index & VbCrLf & _

" " & objNicConfig.Description

intNetBIOS = objNicConfig.TcpipNetbiosOptions

Select Case intNetBIOS

Case 0 strNetBIOS = "Use NetBIOS setting from the DHCP server"

Case 1 strNetBIOS = "Enable NetBIOS over TCP/IP"

Case 2 strNetBIOS = "Disable NetBIOS over TCP/IP"

End Select

WScript.Echo " NetBIOS Over TCP/IP: " & strNetBIOS

Next

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.

--------------------------------------------------------------------------------

Page 116: Automatisieren von TCPIP

Seite 116 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-Wert

Ein Wert, der angibt, ob DNS als Sicherungsmethode für die Namensauflösung aktiviert werden soll.

WINSEnableLMHostsLookup Boolean-Wert

Ein Wert, der angibt, ob die Verwendung der 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.

Page 117: Automatisieren von TCPIP

Seite 117 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

Page 118: Automatisieren von TCPIP

Seite 118 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

On Error Resume Next

strComputer = "."

blnDNSEnabledForWINSResolution = True

blnWINSEnableLMHostsLookup = True

strWINSHostLookupFile = ""

strWINSScopeID = "WORKGROUP"

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set objNicConf = objWMIService.Get("Win32_NetworkAdapterConfiguration")

WScript.Echo VbCrLf & "Host Name: " & strComputer & VbCrLf & _

" Attempting to enable WINS"

intEnableWINS = objNicConf.EnableWINS(blnDNSEnabledForWINSResolution, _

blnWINSEnableLMHostsLookup, strWINSHostLookupFile, strWINSScopeID)

If intEnableWINS = 0 Then

WScript.Echo " Successfully enabled WINS on all network adapters."

ElseIf intEnableWINS = 1 Then

WScript.Echo " Successfully enabled WINS on all network adapters." & _

VbCrLf & " Must reboot."

Else

WScript.Echo " Unable to enable WINS."

End If

WScript.Echo VbCrLf & String(80, "-")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfigs

WScript.Echo VbCrLf & _

" Network Adapter " & objNicConfig.Index & VbCrLf & _

" " & objNicConfig.Description

WScript.Echo " DNS Enabled For WINS Resolution: " & _

objNicConfig.DNSEnabledForWINSResolution

WScript.Echo " WINS Enable LMHosts Lookup: " & _

objNicConfig.WINSEnableLMHostsLookup

WScript.Echo " WINS Host Lookup File: " & _

objNicConfig.WINSHostLookupFile

WScript.Echo " WINS Scope ID: " & objNicConfig.WINSScopeID

Next

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

Page 119: Automatisieren von TCPIP

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

Page 120: Automatisieren von TCPIP

Seite 120 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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

On Error Resume Next

strComputer = "."

strWINSPrimaryServer = "192.168.0.1"

strWINSSecondaryServer = "192.168.0.2"

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

WScript.Echo VbCrLf & "Host Name: " & strComputer & VbCrLf & _

" Attempting to set WINS primary and secondary servers ..."

For Each objNicConfig In colNicConfigs

WScript.Echo VbCrLf & _

" Network Adapter " & objNicConfig.Index & VbCrLf & _

" " & objNicConfig.Description

intSetWINSServer = objNicConfig.SetWINSServer(strWINSPrimaryServer, _

strWINSSecondaryServer)

If intSetWINSServer = 0 Then

WScript.Echo " Successfully set WINS servers."

ElseIf intSetWINSServer = 1 Then

WScript.Echo " Successfully set WINS servers." & _

VbCrLf & " Must reboot."

Else

WScript.Echo " Unable to set WINS servers."

End If

Next

WScript.Echo VbCrLf & String(80, "-")

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfigs

WScript.Echo VbCrLf & _

" Network Adapter " & objNicConfig.Index & VbCrLf & _

" " & objNicConfig.Description

WScript.Echo " Primary WINS Server: " & objNicConfig.WINSPrimaryServer

WScript.Echo " Secondary WINS Server: " & _

objNicConfig.WINSSecondaryServer

Next

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

Page 121: Automatisieren von TCPIP

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

Page 122: Automatisieren von TCPIP

Seite 122 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

Page 123: Automatisieren von TCPIP

Seite 123 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

On Error Resume Next

Const ENABLE_NETBIOS_VIA_DHCP = 0

Const ENABLE_NETBIOS = 1

Const DISABLE_NETBIOS = 2

strComputer = "."

blnDNSEnabledForWINSResolution = True

blnWINSEnableLMHostsLookup = True

strWINSHostLookupFile = ""

strWINSScopeID = "WORKGROUP"

strWINSPrimaryServer = "192.168.0.1"

strWINSSecondaryServer = "192.168.0.2"

intNetbiosTcpipSet = ENABLE_NETBIOS

blnNetbiosSet = False

blnWinsSet = False

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

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

WScript.Echo VbCrLf & "NetBIOS and WINS settings before:"

GetSettings

WScript.Echo VbCrLf & String(80, "-")

blnNetbiosSet = SetNetbios

If blnNetbiosSet = True Then

Select Case intNetbiosTcpipSet

Case 0

WScript.Echo VbCrLf & " NetBIOS settings obtained from the DHCP " & _

"server." & VbCrLf & " WINS parameters not set."

Case 1

WScript.Echo VbCrLf & " NetBIOS over TCP/IP enabled." & _

VbCrLf & " Setting WINS parameters ..."

blnWinsSet = SetWins

If blnWinsSet = True Then

WScript.Echo VbCrLf & " All WINS parameters set."

Else

WScript.Echo VbCrLf & " Unable to set all WINS parameters."

End If

Case 2

WScript.Echo VbCrLf & " NetBIOS over TCP/IP disabled." & _

VbCrLf & " WINS parameters not set."

Case Else

WScript.Echo VbCrLf & " Could not determine setting for NetBIOS " & _

"Over TCP/IP." & VbCrLf & " WINS parameters not set."

End Select

Else

WScript.Echo VbCrLf & " NetBIOS Over TCP/IP could not be enabled" & _

VbCrLf & " WINS parameters not set."

End If

WScript.Echo VbCrLf & String(80, "-")

WScript.Echo VbCrLf & "NetBIOS and WINS settings after:"

GetSettings

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

Sub GetSettings

Set colNicConfigs = objWMIService.ExecQuery _

("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

Page 124: Automatisieren von TCPIP

Seite 124 von 169

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

Page 125: Automatisieren von TCPIP

Seite 125 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

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

Page 126: Automatisieren von TCPIP

Seite 126 von 169

IPSecPermitIPProtocols Zeichenfolgenarray Array 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 Zeichenfolgenarray Array 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 Zeichenfolgenarray Array 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 – Boolean-Wert

Statische Methode. Aktiviert TCP/IP-Filter global für 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 – Zeichenfolgenarray

IPSecPermitUDPPorts – Zeichenfolgenarray

IPSecPermitIPProtocols – Zeichenfolgenarray

Aktiviert TCP/IP-Filter auf einem TCP/IP-aktivierten Netzwerkadapter. Die Ports werden nur geschützt, wenn die IPFilterSecurityEnabled-Eigenschaft in Win32_NetworkAdapterConfiguration auf TRUE festgelegt ist.

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

• 0 bedeutet: erfolgreicher Abschluss.

Page 127: Automatisieren von TCPIP

Seite 127 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

Page 128: Automatisieren von TCPIP

Seite 128 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

On Error Resume Next

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colNicConfig = objWMIService.ExecQuery _

("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")

For Each objNicConfig in colNicConfig

WScript.Echo VbCrLf & "Network Adapter " & objNicConfig.Index & _

VbCrLf & " " & objNicConfig.Description

WScript.Echo " IP Filter Security Enabled: " & _

objNicConfig.IPFilterSecurityEnabled

WScript.Echo " Protocols Permitted over IP:"

If Not IsNull(objNicConfig.IPSecPermitIPProtocols) Then

For Each strIPProtocol In objNicConfig.IPSecPermitIPProtocols

WScript.Echo " " & strIPProtocol

Next

End If

WScript.Echo " TCP Ports Permitted:"

If Not IsNull(objNicConfig.IPSecPermitTCPPorts) Then

For Each strTCPPort In objNicConfig.IPSecPermitTCPPorts

WScript.Echo " " & strTCPPort

Next

End If

WScript.Echo " UDPPorts Permitted:"

If Not IsNull(objNicConfig.IPSecPermitUDPPorts) Then

For Each strUDPPort In objNicConfig.IPSecPermitUDPPorts

WScript.Echo " " & strUDPPort

Next

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

Page 129: Automatisieren von TCPIP

Seite 129 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

Page 130: Automatisieren von TCPIP

Seite 130 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

On Error Resume Next

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set objNicConfig = objWMIService.Get("Win32_NetworkAdapterConfiguration")

If Not objNicConfig.IPFilterSecurityEnabled Then

intFilterReturn = objNicConfig.EnableIPFilterSec(True)

If intFilterReturn = 0 Then

WScript.Echo "IP Filtering enabled for all network adapters."

ElseIf intFilterReturn = 1 Then

WScript.Echo "IP Filtering enabled for all network adapters." & _

VbCrLf & "Must reboot for changes to take effect."

Else

WScript.Echo "Unable to enable IP Filtering."

End If

Else

WScript.Echo "IP Filtering already enabled."

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

Page 131: Automatisieren von TCPIP

Seite 131 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

Page 132: Automatisieren von TCPIP

Seite 132 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

On Error Resume Next

Const ALLOW_ALL = 0

arrPermittedTCPPorts = Array(ALLOW_ALL)

arrPermittedUDPPorts = Array(ALLOW_ALL)

arrPermittedIPProtocols = Array(ALLOW_ALL)

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colNicConfig = objWMIService.ExecQuery _

("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")

For Each objNicConfig in colNicConfig

WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index

If objNicConfig.IPFilterSecurityEnabled Then

intIPSecReturn = objNicConfig.EnableIPSec(arrPermittedTCPPorts, _

arrPermittedUDPPorts, arrPermittedIPProtocols)

If intIPSecReturn = 0 Then

WScript.Echo " IP Filtering enabled for specified ports and protocols."

ElseIf intIPSecReturn = 1 Then

WScript.Echo " IP Filtering enabled for specified ports and protocols." _

& VbCrLf & " Must reboot for changes to take effect."

Else

WScript.Echo " Unable to enable IP Filtering for " & _

"specified ports and protocols."

End If

Else

WScript.Echo " IP Filtering not enabled. Must enable before " & _

"specifying port and protocols."

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

Page 133: Automatisieren von TCPIP

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

Page 134: Automatisieren von TCPIP

Seite 134 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

Page 135: Automatisieren von TCPIP

Seite 135 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

On Error Resume Next

Const ALLOW_ALL = "0"

Const ALLOW_NONE = ""

strComputer = "."

blnIPFilterSecurityEnabled = "False"

arrPermittedTCPPorts = Array("80", "443")

arrPermittedUDPPorts = Array(ALLOW_NONE)

arrPermittedIPProtocols = Array(ALLOW_ALL)

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colNicConfig = objWMIService.ExecQuery _

("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")

WScript.Echo VbCrLf & "Settings Before Enabling IP Filtering"

For Each objNicConfig in colNicConfig

blnIPFilterSecurityEnabled = objNicConfig.IPFilterSecurityEnabled

WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index & VbCrLf & _

" IP Filtering Enabled: " & blnIPFilterSecurityEnabled

WScript.Echo " TCP Ports:"

If Not IsNull(objNicConfig.IPSecPermitTCPPorts) Then

For Each strTCPPort In objNicConfig.IPSecPermitTCPPorts

WScript.Echo " " & strTCPPort

Next

End If

WScript.Echo " UDP Ports:"

If Not IsNull(objNicConfig.IPSecPermitUDPPorts) Then

For Each strUDPPort In objNicConfig.IPSecPermitUDPPorts

WScript.Echo " " & strUDPPort

Next

End If

WScript.Echo " IP Protocols:"

If Not IsNull(objNicConfig.IPSecPermitIPProtocols) Then

For Each strIPProtocol In objNicConfig.IPSecPermitIPProtocols

WScript.Echo " " & strIPProtocol

Next

End If

Next

If blnIPFilterSecurityEnabled = False Then

WScript.Echo VbCrLf & "Enabling IP Filtering ..."

Set objAllNicsConfig = objWMIService.Get("Win32_NetworkAdapterConfiguration")

intFilterReturn = objAllNicsConfig.EnableIPFilterSec(True)

If intFilterReturn = 0 Then

WScript.Echo " IP Filtering enabled for all network adapters."

SpecifyFilters

ElseIf intFilterReturn = 1 Then

WScript.Echo " IP Filtering enabled for all network adapters." _

& VbCrLf & " Must reboot for changes to take effect."

SpecifyFilters

Else

WScript.Echo " Unable to enable IP Filtering."

End If

Else

WScript.Echo VbCrLf & "IP Filtering already enabled for all network adapters."

SpecifyFilters

End If

Set colNicConfig = objWMIService.ExecQuery _

("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")

WScript.Echo VbCrLf & "Settings After Enabling IP Filtering"

For Each objNicConfig in colNicConfig

WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index & VbCrLf & _

" IP Filtering Enabled: " & objNicConfig.IPFilterSecurityEnabled

WScript.Echo " TCP Ports:"

If Not IsNull(objNicConfig.IPSecPermitTCPPorts) Then

Page 136: Automatisieren von TCPIP

Seite 136 von 169

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 weitere Klassen und Funktionen, die sich insbesondere bei der Verwaltung von Netzwerkclients als nützlich erweisen. Dieser 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-Anbieters für die Systemregistrierung per Skript zugegriffen werden.

Diese fortgeschrittenen Skripterstellungstechniken können außer für die TCP/IP-Vernetzung auch für die Erstellung 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 DatumsUhrzeitangaben auf den Computern im Netzwerk abhängig. Beispielsweise führt der Vergleich der Zeitstempel von 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 verfügen, automatisch. Ändern Sie also nicht das Datum oder die Uhrzeit auf einem Computer, der Mitglied einer Active Directory-Domäne ist.

Anstatt Datums- und Uhrzeitfunktionen in einer oder zwei Klassen zu konzentrieren, verteilt WMI diese auf mehrere Klassen, von denen einige eher allgemeine Container darstellen:

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

• Win32_TimeZone, Win32_CurrentTime, Win32_LocalTime und Win32_UTCTime (die drei zuletzt genannten sind unter Windows XP neu hinzugekommen) enthalten ebenfalls schreibgeschützte Eigenschaften, mit denen sich 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_OperatingSystemdie Verwaltung von Datums- und Uhrzeiteinstellungen bereitstehen.

Tabelle 39 Datums- und Uhrzeiteigenschaften von "Win32_OperatingSystem"

Eigenschaft Typ Beschreibung

Page 137: Automatisieren von TCPIP

Seite 137 von 169

CurrentTimeZone

(schreibgeschützt)

sint16 Gibt den Offset des Betriebssystems von GMT (Greenwich Mean Time) in Minuten an. Die Zahl ist positiv, negativ oder Null.

LocalDateTime

(schreibgeschützt)

datetime Das vom Betriebssytem verwendete Format für Datum und Tageszeit.

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

Ein Zeitwert.

Legt die aktuelle Systemzeit auf dem Computer fest. Der aufrufende Prozess muss über das Recht 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 geschrieben werden können, um Datums- und Uhrzeiteinstellungen zu verwalten.

Tabelle 41 Datums- und Uhrzeiteigenschaften von "Win32_ComputerSystem"

Eigenschaft Typ Beschreibung

CurrentTimeZone

(Lesen/Schreiben)

sint16

Einheit: Minuten

Gibt den Offset des Computersystems von UTC (Coordinated Universal Time) in Minuten an.

DaylightInEffect

(schreibgeschützt)

Boolean-Wert Sommerzeitmodus ist aktiviert.

EnableDaylightSavingsTime

(Lesen/Schreiben)

Nur Windows XP und Windows Server 2003

Boolean-Wert Aktiviert die Sommerzeit (Daylight Saving Time, DST) auf einem Computer. Der Wert "Wahr" gibt an, dass die Systemzeit zu Beginn oder Ende der Sommerzeit eine Stunde zurückvorgestellt wird. Der Wert "Falsch" gibt an, dass die Systemzeit zu Beginn oder Ende der Sommerzeit keine Stunde zurückvorgestellt wird. Der Wert NULL gibt an, dass der Status DST 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 Eigenschaften, die alle schreibgeschützt sind, jedoch keine Methoden. Zu den Eigenschaften gehören die Komponenten von Datum und Uhrzeit für Standard- und Sommerzeit sowie die jeweiligen Abweichungen.

Page 138: Automatisieren von TCPIP

Seite 138 von 169

Win32_CurrentTime

Anstelle dieser Klasse empfiehlt sich die Verwendung der Klassen Win32_LocalTime oder Win32_UTCTime

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 Woche, Woche im Monat, Monaten, Quartalen und Jahren. Beachten Sie, dass die Eigenschaft Milliseconds im SDK zwar 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 24Stunden-Format zurück. Beachten Sie, dass die Eigenschaft Milliseconds im SDK zwar für diese Klasse aufgeführt 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 MillisecondsSDK 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 LocalDateTimeVon 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 Skripts.

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

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

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 Ausgabe wie die folgende angezeigt:

Page 139: Automatisieren von TCPIP

Seite 139 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 Darstellung von Jahr, Quartal, Monat, Woche im Monat, Datum, Tag der Woche, Stunde (basierend auf der 24-Stunden-Uhr), 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 Klasse wurde für Windows XP neu eingeführt, daher kann das Skript nur unter Windows XP und Windows Server 2003 ausgeführt werden.

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.

2.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2legen 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 Computer repräsentiert.

4.Verwenden Sie die Eigenschaften des LocalTime-Objekts zum Anzeigen von Monat, Tag, Jahr, Quartal, Woche im Monat, Tag der Woche und Uhrzeit.

Listing 53 Time-get-local.vbs

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

On Error Resume Next

strComputer = "."

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colLocalTimes = objWMIService.ExecQuery("Select * from Win32_LocalTime")

For Each objLocalTime in colLocalTimes

Wscript.Echo "Date: " & objLocalTime.Month & "/" & objLocalTime.Day & _

"/" & objLocalTime.Year

Wscript.Echo "Quarter: " & objLocalTime.Quarter

Wscript.Echo "Week In the Month: " & objLocalTime.WeekInMonth

Wscript.Echo "Day Of the Week: " & objLocalTime.DayOfWeek

Wscript.Echo "Time: " & objLocalTime.Hour & ":" & objLocalTime.Minute & _

":" & objLocalTime.Second

Next

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

C:\scripts>time-get-local.vbs

Date: 5/19/2004

Page 140: Automatisieren von TCPIP

Seite 140 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 vom 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 an 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 im 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 UTC 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 XP und 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\cimv2legen 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 im Monat, Tag der Woche und Uhrzeit.

Listing 54 Time-get-utc.vbs

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

On Error Resume Next

strComputer = "."

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colUTCTimes = objWMIService.ExecQuery("Select * from Win32_UTCTime")

For Each objUTCTime in colUTCTimes

Wscript.Echo "Date: " & objUTCTime.Month & "/" & objUTCTime.Day & _

"/" & objUTCTime.Year

Wscript.Echo "Quarter: " & objUTCTime.Quarter

Wscript.Echo "Week In the Month: " & objUTCTime.WeekInMonth

Wscript.Echo "Day Of the Week: " & objUTCTime.DayOfWeek

Wscript.Echo "Time: " & objUTCTime.Hour & ":" & objUTCTime.Minute & _

":" & objUTCTime.Second

Next

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

Page 141: Automatisieren von TCPIP

Seite 141 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 einfach 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 WMI selbsttätig erledigt.

Vergleichen der Ortszeiten zweier Computer

Eine Möglichkeit zum Vergleichen von Systemdatum und -uhrzeit auf zwei Computern in der gleichen Zeitzone stellt die LocalDateTime-Eigenschaft der Klasse Win32_OperatingSystem bereit. Diese schreibgeschützte Eigenschaft 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 auf 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 zwecks Kompensation der Zeitzonen angepasst werden, indem der Unterschied zwischen den letzten vier Ziffern des von LocalDateTime zurückgegebenen Datum-/Uhrzeitwertes berechnet und angewendet wird. Diese Ziffern beginnen mit einem positiven oder negativen Vorzeichen, worauf ein dreistelliger Offsetwert folgt, der die Anzahl der Minuten 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 werden. Die so ermittelten Datums- und Uhrzeitangaben sind auf zwei synchronisierten Computern gleich, ungeachtet der 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 lokalen und 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 zum 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 Now

Page 142: Automatisieren von TCPIP

Seite 142 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. Dies 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 Zeitpunkt abhängig, zu dem die Abfrage ausgeführt wird.

6.Durchlaufen Sie jedes Betriebssystemobjekt in der Auflistung auf dem ersten Computer mit einer For EachSchleife.

7.Durchlaufen Sie innerhalb der ersten For Each-Schleife jedes Betriebssystemobjekt in der Auflistung auf dem 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, passen 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 -uhrzeitangaben 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 Vergleichs aus.

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

Listing 55 Time-compare.vbs

Page 143: Automatisieren von TCPIP

Seite 143 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

On Error Resume Next

strComputer1 = "."

strComputer2 = "server-d1"

Set objWMIService1 = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer1 & "\root\cimv2")

Set objWMIService2 = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer2 & "\root\cimv2")

Set colOSes1 = objWMIService1.ExecQuery("Select * from " & _

"Win32_OperatingSystem")

strTime1 = Now

Set colOSes2 = objWMIService2.ExecQuery("Select * from " & _

"Win32_OperatingSystem")

strTime2 = Now

intSeconds1 = CInt(Left(Right(strTime1, 5), 2))

intSeconds2 = CInt(Left(Right(strTime2, 5), 2))

intDiff = 0

If intSeconds1 <> intSeconds2 Then

intDiff = intSeconds2 - intSeconds1

End If

For Each objOS1 in colOSes1

For Each objOS2 in colOSes2

intDateTime1 = Left(objOS1.LocalDateTime, 14)

intDateTime2 = Left(objOS2.LocalDateTime, 14)

If intDiff <> 0 Then

intDateTime1 = intDateTime1 + intDiff

End If

WScript.Echo "Adjusted time on " & strComputer1 & ": " & _

WMIDateToString(intDateTime1)

WScript.Echo "Adjusted time on " & strComputer2 & ": " & _

WMIDateToString(intDateTime2)

If intDateTime1 = intDateTime2 Then

Wscript.Echo "Dates and times are equal."

Else

Wscript.Echo "Dates and times are not equal."

End If

Next

Next

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

Function WMIDateToString(dtmDate)

WMIDateToString = CDate(Mid(dtmDate, 5, 2) & "/" & _

Mid(dtmDate, 7, 2) & "/" & _

Left(dtmDate, 4) & " " & _

Mid(dtmDate, 9, 2) & ":" & _

Mid(dtmDate, 11, 2) & ":" & _

Mid(dtmDate, 13, 2))

End Function

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

C:\scripts>time-compare.vbs

Adjusted time on .: 5/19/2004 5:01:26 PM

Adjusted time on server1: 5/19/2004 5:05:52 PM

Page 144: Automatisieren von TCPIP

Seite 144 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 Befehlszeilentools, 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 WMIKlasse Win32_OperatingSystem umfasst eine schreibgeschützte Eigenschaft, LocalDateTime, die die lokale Datums- und Uhrzeiteinstellung des Betriebssystems einschließlich des Offsets von der GMT (Greenwich Mean Time) zurückgibt, wodurch die Zeitzone angegeben wird.

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

Die Klasse Win32_OperatingSystem enthält zudem eine Methode, SetDateTime(), die ein Datum und eine Uhrzeit in Form eines DATETIME-Objekts als Parameter akzeptiert und diese Angabe als aktuelles Datum und Uhrzeit des Computers festlegt. SetDateTime() gibt den Wert 0 zurück, wenn die Ausführung erfolgreich war, im Falle eines 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 Festlegen 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 dem es sich um eine Zeichenfolge mit fester Länge handelt, die in WMI ein bestimmtes Datum und eine bestimmte Uhrzeit 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 den in der Tabelle angegebenen Feldlängen entsprechen. Verwenden Sie im Bedarfsfall führende Nullen.

Page 145: Automatisieren von TCPIP

Seite 145 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 Monat geeignet sein. Beispielsweise ist ein 31. Februar ungültig. Allerdings muss Ihre Implementierung die 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 abweicht. Bei WMI ist es ratsam, jedoch nicht zwingend, Zeitangaben in GMT (mit einem UTC-Offset von Null) umzuwandeln.

Zum Füllen nicht verwendeter Felder oder als Platzhalter kann das Sternchen (*) verwendet werden. Beispielsweise 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 Beispiel zeigt 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 Time Format", aus dem auch diese Erläuterung übernommen wurde. Weitere Informationen über das Arbeiten mit Datumsund Uhrzeitangaben in Skripten enthalten die Abschnitte "Working with Dates and Times" in Kapitel 6 des Windows 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, wie die SetDateTime-Methode der Klasse Win32_OperatingSystem eingesetzt wird. Allerdings ist die Genauigkeit bei dieser Vorgehensweise in der Regel auf die Minute und nicht auf die Sekunde beschränkt, da hierbei die korrekte Zeit 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 das Datum und die Uhrzeit repräsentiert, die festgelegt werden sollen. Ersetzen Sie kurz vor Ausführung des Skripts 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 GMT

Page 146: Automatisieren von TCPIP

Seite 146 von 169

verwendet.

3.Verwenden Sie einen GetObject()-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2und 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äsentiert.

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 Datums/Uhrzeitwert.

7.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine Erfolgs- oder Fehlermeldung an.

8.Fragen Sie die Klasse Win32_OperatingSystem erneut ab, und rufen Sie die aktualisierte LocalDateTimeEigenschaft ab, die die Änderung wiedergibt.

9.Rufen Sie die Funktion WMIDateToString auf, um den Datums-/Uhrzeitwert in einem besser lesbaren Format 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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

On Error Resume Next

strComputer = "."

dtmNewDateTime = "20040520151300.000000-480"

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate, " _

& "(Systemtime)}!\\" & strComputer & "\root\cimv2")

Set colOSes = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem")

For Each objOS In colOSes

intSet = objOS.SetDateTime(dtmNewDateTime)

If intSet = 0 Then

Wscript.Echo "Successfully set new date and time."

Else

Wscript.Echo "Unable to set mew date and time."

End If

Next

Set colOSes = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem")

For Each objOS In colOSes

Wscript.Echo "New date and time: " & WMIDateToString(objOS.LocalDateTime)

Next

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

Function WMIDateToString(dtmDate)

WMIDateToString = CDate(Mid(dtmDate, 5, 2) & "/" & _

Mid(dtmDate, 7, 2) & "/" & _

Left(dtmDate, 4) & " " & _

Mid(dtmDate, 9, 2) & ":" & _

Mid(dtmDate, 11, 2) & ":" & _

Mid(dtmDate, 13, 2))

End Function

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

Page 147: Automatisieren von TCPIP

Seite 147 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 synchronisiert werden. Einige Anwendungen wie solche, die Dateien basierend auf Zeitstempeln vergleichen, erfordern, dass die Zeiten auf unterschiedlichen Hosts weitestgehend übereinstimmen.

Bei den fortschrittlicheren Methoden zur Sicherstellung einer akkuraten und synchronisierten Uhrzeit im gesamten Netzwerk kommen Tools zum Einsatz, die eine Synchronisation mit öffentlichen Zeitservern durchführen. In diesem Abschnitt soll jedoch gezeigt werden, wie mithilfe eines einfache Skripts die Zeiten auf zwei Computern verglichen 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 auf 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 dann auf den Zielcomputern entsprechend eingestellt werden. Zwar wird diese Funktion von WMI nicht geboten, kann jedoch über ein Befehlszeilentool oder eine Webanwendung ausgeführt werden, das oder die über die WSH ExecMethode ausgeführt wird.

Vorsicht Active Directory synchronisiert Datum und Uhrzeit auf Computern, die über Konten im Verzeichnisdienst verfügen, automatisch. Ändern Sie also nicht das Datum oder die Uhrzeit auf einem Computer, der Mitglied einer Active 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 Systemzeit (zeitzonenbereinigt) auf zwei Computern verglichen Auf jedem Computer zieht das Skript die vierzehn ganz links befindlichen Zeichen von LocalDateTime heran (die, mit denen Datum und Uhrzeit sekundengenau angegeben werden) und vergleicht die gekürzten Zeichenfolgen

Wenn die Zeit auf dem ersten Computer nicht mit der auf dem zweiten übereinstimmt, verwendet das Skript die SetDateTime-Methode der Win32-OperatingSystem-Klasse, um den zweiten Computer auf die Zeit des ersten einzustellen. Hierbei werden sommerzeitbedingte Unterschiede berücksichtigt, denn wenn sich beide Computer in der gleichen Zeitzone befinden und die Zeit die gleiche ist, muss auch die Sommerzeiteinstellung der Computer die gleiche sein.

Bei Verwendung dieses Skripts ist die Genauigkeit der Zeitsynchronisation in der Regel auf die Minute und nicht auf die Sekunde beschränkt, da Netzwerklatenz und die Zeit zum Ausführen des Codes berücksichtigt werden müssen.

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

Page 148: Automatisieren von TCPIP

Seite 148 von 169

3.Verwenden Sie auf beiden Computern die ExecQuery-Methode zum Abfragen der Win32_OperatingSystemKlasse.

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 Nowund 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 wurden. Der 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 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 Zeitpunkt abhängig, zu dem die Abfrage ausgeführt wird.

7.Durchlaufen Sie jedes Betriebssystemobjekt in der Auflistung auf dem ersten Computer mit einer For EachSchleife.

8.Durchlaufen Sie innerhalb der ersten For Each-Schleife jedes Betriebssystemobjekt in der Auflistung auf dem 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 verwendet 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- und 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-Methode von Win32-OperatingSystem auf.

16.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine Erfolgs- oder Fehlermeldung an.

Listing 57 Time-sync.vbs

Page 149: Automatisieren von TCPIP

Seite 149 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

On Error Resume Next

strComputer1 = "."

strComputer2 = "client1"

Set objWMIService1 = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer1 & "\root\cimv2")

Set objWMIService2 = GetObject("winmgmts:{impersonationLevel=impersonate, " _

& "(Systemtime)}!\\" & strComputer2 & "\root\cimv2")

Set colOSes1 = objWMIService1.ExecQuery("SELECT * FROM Win32_OperatingSystem")

strTime1 = Now

Set colOSes2 = objWMIService2.ExecQuery("SELECT * FROM Win32_OperatingSystem")

strTime2 = Now

intSeconds1 = CInt(Left(Right(strTime1, 5), 2))

intSeconds2 = CInt(Left(Right(strTime2, 5), 2))

intDiff = 0

If intSeconds1 <> intSeconds2 Then

intDiff = intSeconds2 - intSeconds1

End If

For Each objOS1 in colOSes1

For Each objOS2 in colOSes2

dtmRefDateTime = objOS1.LocalDateTime

intDateTime1 = Left(dtmRefDateTime, 14)

intDateTime2 = Left(objOS2.LocalDateTime, 14)

If intDiff <> 0 Then

intDateTime1 = intDateTime1 + intDiff

End If

If intDateTime1 = intDateTime2 Then

Wscript.Echo "Dates and times on " & strComputer1 & " and " & _

strComputer2 & "are equal."

Else

intSet = objOS2.SetDateTime(dtmRefDateTime)

If intSet = 0 Then

Wscript.Echo "Successfully synchronized date and time on " & _

strComputer2 & " with reference (" & strComputer1 & ")."

Else

Wscript.Echo "Unable to set new date and time on " & strComputer2 & "."

End If

End If

Next

Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie 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 einfach. Im folgenden Skript wird grundlegend der gleiche Code wie in Time-sync.vbs verwendet. Allerdings wird eine Liste mit Computern aus einem Array abgerufen und dann eine Iteration durchgeführt, bei der die Systemzeiten mit der eines Referenzcomputers verglichen und im Bedarfsfall synchronisiert werden.

Das Skript verwendet einen groben Algorithmus für Zeitvergleich und Synchronisation und zeigt so eine Möglichkeit zum Synchronisieren von Computerzeiten mithilfe von Skripten auf. Wenn die Netzwerklatenz jedoch zu hoch ist,

Page 150: Automatisieren von TCPIP

Seite 150 von 169

Weise von der Referenzzeit abweichen.

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

Schritte zur Skripterstellung

In Listing 58 wird die Systemzeit (zeitzonenbereinigt) auf mehreren Computern verglichen, deren Namen oder IPAdresse aus einem Array abgerufen werden. Wenn die Zeit auf einem der Computer nicht mit der Standardzeit ü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 WMINamespace 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 die folgenden Aufgaben durch.

5.Verwenden Sie die Exec-Methode des WshShell-Objekts, um per "Ping" zu prüfen, ob eine Verbindung zum Zielcomputer hergestellt werden kann.

6.Verwenden Sie auf jedem Computer die ExecQuery-Methode zum Abfragen der Win32_OperatingSystemKlasse.

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 Nowund 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 wurden. Der 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. Diese 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 Zeitpunkt abhängig, zu dem die Abfrage ausgeführt wird.

10.Durchlaufen Sie jedes Betriebssystemobjekt in der Auflistung auf dem ersten Computer mit einer For EachSchleife.

11.Durchlaufen Sie innerhalb der ersten For Each-Schleife jedes Betriebssystemobjekt in der Auflistung auf dem zweiten Computer mit einer verschachtelten For Each-Schleife.

12.Rufen Sie mithilfe der LocalDateTime-Eigenschaft die lokale Systemzeit von beiden Computern ab.

Page 151: Automatisieren von TCPIP

Seite 151 von 169

13.Weisen Sie die LocalDateTime-Eigenschaft des ersten (Referenz-)Computers einer Variablen zu, die verwendet 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- und 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-Methode von Win32-OperatingSystem auf.

19.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine Erfolgs- oder Fehlermeldung an.

Listing 58 Time-sync-multi.vbs

Page 152: Automatisieren von TCPIP

Seite 152 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

On Error Resume Next

strReference = "."

arrTargets = Array("client1", "client2", "192.168.0.1", "192.168.0.2")

Set objWMIService1 = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strReference & "\root\cimv2")

For Each strTarget In arrTargets

WScript.Echo VbCrLf & String(80, "-") & VbCrLf & "Target: " & strTarget _

& VbCrLf

Set objShell = CreateObject("WScript.Shell")

Set objExec = objShell.Exec("ping -n 2 -w 1000 " & strTarget)

strPingResults = LCase(objExec.StdOut.ReadAll)

If InStr(strPingResults, "reply from") Then

Set objWMIService2 = GetObject("winmgmts:{impersonationLevel=" _

& "impersonate, (Systemtime)}!\\" & strTarget & "\root\cimv2")

Set colOSes1 = objWMIService1.ExecQuery("SELECT * FROM " & _

"Win32_OperatingSystem")

strTime1 = Now

Set colOSes2 = objWMIService2.ExecQuery("SELECT * FROM " & _

"Win32_OperatingSystem")

strTime2 = Now

intSeconds1 = CInt(Left(Right(strTime1, 5), 2))

intSeconds2 = CInt(Left(Right(strTime2, 5), 2))

intDiff = 0

If intSeconds1 <> intSeconds2 Then

intDiff = intSeconds2 - intSeconds1

End If

For Each objOS1 in colOSes1

For Each objOS2 in colOSes2

dtmRefDateTime = objOS1.LocalDateTime

intDateTime1 = Left(dtmRefDateTime, 14)

intDateTime2 = Left(objOS2.LocalDateTime, 14)

If intDiff <> 0 Then

intDateTime1 = intDateTime1 + intDiff

End If

If intDateTime1 = intDateTime2 Then

Wscript.Echo "Dates and times are equal."

Else

intSet = objOS2.SetDateTime(dtmNewDateTime)

If intSet = 0 Then

Wscript.Echo "Successfully synchronized date and time on " & _

strTarget & " with reference (" & strReference & ")."

Else

Wscript.Echo "Unable to set new date and time on " & strTarget & _

"."

End If

End If

Next

Next

Else

WScript.Echo strTarget & " did not respond to ping."

End If

Next

Page 153: Automatisieren von TCPIP

Seite 153 von 169

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie 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. Die Registrierung enthält einige Netzwerkeinstellungen, auf die nicht mithilfe von WMI-Klassen, Befehlszeilentools oder ü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. Bevor Sie Änderungen an der Registrierung vornehmen, sollten Sie eine Sicherungskopie aller wichtigen Daten auf dem Computer erstellen.

Ändern Sie zur Verwendung dieser Klasse die Zeilen in Skripts, mit denen die Verbindung zu WMI hergestellt wird, 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) wird, den 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-Klasse an das Ende des Objektpfades anhängen.

Die Klasse StdRegProv gibt einen Verweis auf eine einzelne Instanz in Form eines SWbemObject-Objekts zurück,

Page 154: Automatisieren von TCPIP

Seite 154 von 169

das die gesamte Registrierung repräsentiert (von der es immer nur eine pro Betriebssystem gibt). Hier liegt der Unterschied zur Auflistung von (oftmals) mehreren Instanzen in Form eines SWbemObjectSet-Objekts, wie es von Win32_NetworkAdapterConfiguration und den meisten anderen bis dato verwendeten Klassen zurückgegeben wird. Da es sich hier um ein SWbemObject- und nicht um ein SWbemObjectSet-Objekt handelt, muss nicht 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 StdRegProvKlasse 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 unter /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 Klasse StdRegProv.

Tabelle 43 Methoden von "StdRegProv"

Methode Beschreibung

CheckAccess Überprüft, ob der Benutzer über die angegebenen Zugriffsrechte verfügt.

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

GetMultiStringValue Ruft die Datenwerte mehrerer Zeichenfolgen eines benannten Wertes ab.

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

SetMultiStringValue Legt die Werte mehrerer Zeichenfolgen eines benannten Wertes fest.

SetStringValue Legt den Zeichenfolgewert eines benannten Wertes fest.

Page 155: Automatisieren von TCPIP

Seite 155 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 WMI SDK unter http://go.microsoft.com/fwlink/?LinkId=29999 (englischsprachig).

Die Methoden GetStringValue und GetDWORDValue geben über einen Ausgabeparameter Informationen an das Skript zurück, ein Mechanismus, der in diesem Dokument bis dato noch nicht erwähnt wurde. Zu diesem Zweck übergibt das Skript die ersten drei Parameter an die GetStringValue-Methode, um der Methode mitzuteilen, welcher Eingabe der Wert entnommen werden soll. Diese Informationen werden im letzten Parameter zurückgegeben, in diesem Fall in Form der Zeichenfolgenvariablen strValue. Nachdem die Zeile ausgeführt wurde, enthält die Vden Wert des Registrierungseintrags "Hostname" an der Position HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters. Die letzte Zeile des Skripts zeigt diesen Wert an.

Die Skripts in diesem Abschnitt rufen Zeichenfolgen- (REG_SZ) und DWORD-Werte (REG_DWORD, eine 32Ganzzahl) aus der Registrierung ab und legen diese ebenso fest. Zum Abrufen und Festlegen von ZeichenfolgenDWORD-Typen werden verschiedene Methoden verwendet. Die Klasse StdRegProv umfasst darüber hinaus noch 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\DeadGWDetectDefault

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 \Services\Tcpip\Parameters

Enthält globale TCP/IP-Konfigurationseinstellungen, die sich auf alle Netzwerkadapter im Computer beziehen.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet \Services\Tcpip\Parameters\Interfaces

Enthält TCP/IP-Konfigurationseinstellungen für jeden spezifischen Adapter (Schnittstelle) in seinen Unterschlüsseln, die mit GUIDs bezeichnet sind.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet \Services\Dhcp\Parameters\Options

Enthält Konfigurationseinstellungen für DHCP-Optionen in seinen Unterschlüsseln.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet \Services\Dnscache\Parameters

Enthält Konfigurationseinstellungen für den lokalen DNS-Cacheauflösungsdienst des DNS-Clients.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet \Services\NetBT\Parameters

Enthält globale Konfigurationseinstellungen für NetBIOS über TCP/IP und WINS, die sich auf alle Netzwerkadapter im Computer beziehen.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet Enthält Konfigurationseinstellungen für NetBIOS über TCP/IP und WINS für jeden spezifischen Adapter

Page 156: Automatisieren von TCPIP

Seite 156 von 169

\Services\NetBT\Parameters\Interfaces (Schnittstelle) in seinen Unterschlüsseln, die mit GUIDs bezeichnet sind.

Weitere Informationen über die Verwendung von Skripts zum Konfigurieren der Registrierung sowie detaillierte 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 Registry" 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 abgerufen wird, dessen Wert eine Zeichenfolge (REG_SZ) ist. Zu diesem Zweck verwendet das Skript die GetStringValueMethode 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 einem 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" fest, 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 Unterstruktur, Schlüsselpfad und Eintragsname, und weisen Sie den Ausgabeparameter für den Zeichenfolgenwert der Variablen strValue zu.

6.Zeigen Sie den Eintragsnamen und dessen Zeichenfolgenwert an.

Listing 59 Reg-get-string.vbs

1

2

3

4

5

6

7

8

9

10

Const HKEY_LOCAL_MACHINE = &H80000002

strComputer = "."

strKeyPath = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters"

strEntryName = "Hostname"

Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _

strComputer & "\root\default:StdRegProv")

objReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue

Wscript.Echo strEntryName & ": " & strValue

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

C:\scripts>reg-get-string.vbs

Hostname: client1

Page 157: Automatisieren von TCPIP

Seite 157 von 169

Abrufen eines numerischen Wertes aus der Registrierung mithilfe von WMI

Dieses Skript zeigt, wie eine TCP/IP-Netzwerkeinstellung (DeadGWDetectDefault) aus einem Registrierungseintrag abgerufen wird, dessen Wert ein DWORD (REG_DWORD, eine 32-Bit-Ganzzahl) ist. Zu diesem Zweck verwendet das Skript die GetDWORDValue-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 einem 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" fest, 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-Wert der Variablen strValue zu.

6.Zeigen Sie den Eintragsnamen und dessen DWORD-Wert an.

Listing 60 Reg-get-dword.vbs

1

2

3

4

5

6

7

8

9

10

Const HKEY_LOCAL_MACHINE = &H80000002

strComputer = "."

strKeyPath = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters"

strEntryName = "DeadGWDetectDefault"

Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _

strComputer & "\root\default:StdRegProv")

objReg.GetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,dwValue

Wscript.Echo strEntryName & ": " & dwValue

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie 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 festgelegt wird, dessen Wert eine Zeichenfolge (REG_SZ) ist. Zu diesem Zweck verwendet das Skript die SetStringValueMethode 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 einem Hostnamen oder einer IP-Adresse bestehen.

Page 158: Automatisieren von TCPIP

Seite 158 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" fest, 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 Unterstruktur, Schlüsselpfad und Eintragsname, und weisen Sie den Ausgabeparameter für den Zeichenfolgenwert der Variablen strValue zu.

7.Zeigen Sie den Eintragsnamen und dessen Zeichenfolgenwert an.

Listing 61 Reg-set-string.vbs

1

2

3

4

5

6

7

8

9

10

11

12

13

Const HKEY_LOCAL_MACHINE = &H80000002

strComputer = "."

strKeyPath = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters"

strEntryName = "Domain"

strValue = "fabrikam.com"

Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _

strComputer & "\root\default:StdRegProv")

objReg.SetStringValue HKEY_LOCAL_MACHINE, strKeyPath, strEntryName, strValue

objReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue

Wscript.Echo strEntryName & ": " & strValue

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie 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 Registrierungseintrag festgelegt wird, dessen Wert ein DWORD (REG_DWORD, eine 32-Bit-Ganzzahl) ist. Zu diesem Zweck verwendet das Skript die SetDWORDValue-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 einem 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" fest, 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

Page 159: Automatisieren von TCPIP

Seite 159 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-Wert der Variablen dwValue zu.

7.Zeigen Sie den Eintragsnamen und dessen DWORD-Wert an.

Listing 62 Reg-set-dword.vbs

1

2

3

4

5

6

7

8

9

10

11

12

13

Const HKEY_LOCAL_MACHINE = &H80000002

strComputer = "."

strKeyPath = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters"

strEntryName = "DeadGWDetectDefault"

dwValue = 1

Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _

strComputer & "\root\default:StdRegProv")

objReg.SetDWORDValue HKEY_LOCAL_MACHINE, strKeyPath, strEntryName, dwValue

objReg.GetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,dwValue

Wscript.Echo strEntryName & ": " & dwValue

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie 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 (Rcmd.exe und Rcmdsvc.exe)

Windows 2000 Resource Kit

Befehlszeilentools Remote Console Windows 2000 Resource Kit

Befehlszeilentools Rsh.exe und Rshsvc.exe: TCP/IP Remote Shell Service

Windows 2000 Resource Kit

Befehlszeilentools Telnet.exe Windows-Betriebssysteme

Befehlszeilentools Timezone.exe: Tool zur Aktualisierung der Sommerzeit

Windows 2000 Resource Kit

Befehlszeilentools Tzedit.exe: Zeitzoneneditor Windows 2000 Resource Kit (GUI-Tool)

Page 160: Automatisieren von TCPIP

Seite 160 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 vorhanden 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. Bevor Sie Änderungen an der Registrierung vornehmen, sollten Sie eine Sicherungskopie aller wichtigen Daten auf dem 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

Page 161: Automatisieren von TCPIP

Seite 161 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

Page 162: Automatisieren von TCPIP

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

Zeichenfolge

IP address allocation method2, sollten die folgenden vier 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.

Zeichenfolge

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 enabled nicht festgelegt wurde, wird die folgende Parametereinstellung (domain DNS registration enabled) ignoriert.

Boolean-Wert

Domain DNS registration enabled4domain DNS registration enabled ist nur dann von Bedeutung, wenn der vorherige Parameter (full DNS registration enabled) auf "Wahr" festgelegt wurde.

Boolean-Wert

WINS changes Boolean-Wert

Page 163: Automatisieren von TCPIP

Seite 163 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 wurde3Wenn 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.

Page 164: Automatisieren von TCPIP

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

Page 165: Automatisieren von TCPIP

Seite 165 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-

Page 166: Automatisieren von TCPIP

Seite 166 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

Page 167: Automatisieren von TCPIP

Seite 167 von 169

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

On Error Resume Next

' Constants for FileSystemObject

Const FOR_READING = 1

Const FOR_WRITING = 2

Const FOR_APPENDING = 8

' Paths to input and output files. Input file must be a comma-delimited text

' file on same machine where script is to be run with name of accessible

' machine and other settings on each line.

strFileInput = "c:\scripts\clients.csv"

strFileOutput = "c:\scripts\newclients.csv"

' Counters for final tally

intAdd = 0

intUpdate = 0

intRemove = 0

intError = 0

Set objFSO = CreateObject("Scripting.FileSystemObject")

strInput = GetInput(strFileInput)

' Get computer info by breaking input stream into array at line breaks.

arrClients = Split(strInput, VbCrLf)

' Check to see if the output file exists. If so, open it for appending.

' If not, create it and open it for writing.

If objFSO.FileExists(strFileOutput) Then

Set objOutputFile = objFSO.OpenTextFile(strFileOutput, FOR_APPENDING)

Else

Set objOutputFile = objFSO.CreateTextFile(strFileOutput)

End If

If Err <> 0 Then

Wscript.Echo "Unable to open " & strFileOutput & " for output."

WScript.Quit

End If

' Write header for file.

objOutputFile.WriteLine "Date: " & Now & VbCrLf & "Adding updating or " & _

"removing " & (UBound(arrClients) + 1) & " new client computers." & _

VbCrLf & VbCrLf & String(120, "-") & VbCrLf

For Each strClient In arrClients

' Get settings by breaking each computer info array at commas.

strComputer = ""

arrParams = Split(strClient, ",")

strComputer = arrParams(0)

WScript.Echo VbCrLf & "Host: " & strComputer & VbCrLf

' Ping remote computer. If no response, display error message and end script.

blnPingSuccess = PingClient(strComputer)

If blnPingSuccess = True Then

' Connect to the WMI service.

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

If Err = 0 Then

Err.Clear

strAddRemove = arrParams(1)

strIpAlloc = arrParams(2)

arrIPAddresses = Split(arrParams(3))

arrSubnetMasks = Split(arrParams(4))

arrDefaultGateways = Split(arrParams(5))

arrGatewayCostMetrics = Split(arrParams(6))

blnDNSChanges = arrParams(7)

Page 168: Automatisieren von TCPIP

Seite 168 von 169

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.

Page 169: Automatisieren von TCPIP

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