Automatisieren von TCP/IP-Netzwerken auf Clients

Seite 1 von 169

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

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

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

Seite 4 von 169

Teil 1: Einführung
Veröffentlicht: 19. Jul 2004

Aus Sicht des Leiters der EDV-Abteilung (Chief Information Officer, CIO) sind Netzwerke, die auf TCP/IP (Transmission Control Protocol/Internet Protocol) basieren, das Nervensystem vieler Organisationen - ihre einwandfreie Funktion ist für die Kommunikation im Unternehmen, die Kundenzufriedenheit, die Mitarbeitermoral und das Endergebnis von entscheidender Bedeutung. Aufgrund des Umfangs und der Komplexität dieser Netzwerke und der Zugänglichkeit des TCP/IPProtokollstacks für Skripts sind die beim Konfigurieren und Verwalten der TCP/IPNetzwerkkomponenten 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/IPNetzwerken. Dieses Dokument konzentriert sich auf die Tools, mit denen Sie Aufgaben auf TCP/IPClients automatisieren können. Es behandelt Skripterstellungstools und -techniken, mit denen Sie mit den wichtigsten clientseitigen Elementen von TCP/IP-Netzwerken arbeiten können, einschließlich DHCP (Dynamic Host Configuration Protocol), DNS (Domain Name System) und WINS (Windows Internet Name Service). Jeder Abschnitt bietet ausführliche Erläuterungen und Skriptbeispiele mit entsprechenden Befehlszeilentools und Registrierungsschlüsseln, die am Ende in Tabellen aufgeführt sind.

Seite 5 von 169

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

Skripterstellung für grundlegende TCP/IP-Netzwerke auf Clients, einschließlich dem Vergleich von GUI- und Befehlszeilentools mit analogen Verfahren der Skripterstellung. Erweitern dieser Verfahren zur Skripterstellung auf Remotecomputer und mehrere Computer. Skripterstellung für die Reservierung von IP-Adressen mithilfe von DHCP und statischen IPAdressen. 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/IPClientfunktionen 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:1Beziehung zu Instanzen von Win32_NetworkAdapter, d. h. jedes Objekt, das die Konfigurationseinstellungen für einen Netzwerkadapter darstellt, besitzt ein entsprechendes Objekt, das die Hardware dieses Netzwerkadapters repräsentiert. Win32_NetworkAdapterSetting, eine Verknüpfungsklasse, stellt die Beziehung zwischen den vorherigen beiden Klassen dar. Win32_NetworkAdapterConfiguration umfasst 61 schreibgeschützte Eigenschaften und 41
Seite 6 von 169

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

Win32_NetworkAdapterConfiguration61 schreibgeschützte Eigenschaften; 41 Methoden zum Ändern von Eigenschaften Win32_NetworkAdapter Schreibgeschützte Eigenschaften Schreibgeschützte Eigenschaften

Die wichtigste Klasse für die Skripterstellung für TCP/IP-Aufgaben. Enthält die meisten der in diesem Dokument beschriebenen Einstellungen. Besitzt eine 1:1-Beziehung mit Instanzen von Win32_NetworkAdapterConfiguration Eine Verknüpfungsklasse, die die Beziehung zwischen den Klassen Win32_NetworkAdapterConfiguration und Win32_NetworkAdapter darstellt.

Win32_NetworkAdapterSetting

Win32_NetworkProtocol Win32_ComputerSystem

Schreibgeschützte Eigenschaften Einige schreibgeschützte und ein paar Lese/Schreibeigenschaften; einige Methoden Einige schreibgeschützte und ein paar Lese/Schreibeigenschaften; einige Methoden Schreibgeschützte Eigenschaften Schreibgeschützte Eigenschaften Schreibgeschützte Eigenschaften Schreibgeschützte Eigenschaften

Win32_OperatingSystem

Win32_PingStatus Win32_LocalTime Win32_UTCTime Win32_TimeZone

Obwohl die Namen der WMI-Klassen Win32_NetworkClient, Win32_NetworkConnection und Win32_NetworkLoginProfile eine Beziehung zu Themen in diesem Dokument vermuten lassen, sind
Seite 7 von 169

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

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

Nicht behandelte Themen
Dieses Dokument umfasst weder die Grundlagen zur Skripterstellung noch zu TCP/IP-Netzwerken. Informationen zu grundlegenden Verfahren der Skripterstellung für die Systemverwaltung finden Sie im Microsoft® Windows ® 2000 Scripting-Handbuch unter /germany/technet/datenbank/articles/600356.mspx sowie in den zahlreichen Beispielen im TechNet Script Center unter http://go.microsoft.com/fwlink/?LinkId=24771 (nur auf Englisch verfügbar). Informationen zu TCP/IP-Netzwerken unter Windows finden Sie in der Microsoft® Windows Server™-Hilfe, die im Windows Server-Betriebssystem enthalten ist sowie im Microsoft ® Windows 2000 Server Resource Kit (nur auf Englisch verfügbar). Der Anwendungsbereich dieses Dokuments beschränkt sich auf die Skripterstellung für TCP/IPClients. 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 IPv6Netzwerke sind nicht enthalten.

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

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

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

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

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

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

Seite 9 von 169

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

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

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

Festlegen von Cscript als Standardskripthost
Um Cscript.exe als Standardskripthost zu verwendet, das Logo zu unterdrücken, und diese Einstellungen als Standard zu speichern, führen Sie folgenden Befehl über die Befehlszeile aus: cscript //h:cscript //nologo //s Die meisten Beispielskripts in diesen Dokument führen Aktionen auf dem lokalen Computer durch, der für die WMI durch einen Punkt (.) dargestellt wird. In einigen Skripts sind gewisse Werte, wie Computernamen oder IP-Adressen, im oberen Bereich des Skripts als Variablen fest kodiert. Damit diese Skripts auf Ihrem Computer oder im Netzwerk ausgeführt werden können, müssen Sie diese Werte erst gemäß der Netzwerk- und Hostkonfigurationen anpassen. Diese erforderlichen Änderungen werden zusammen mit den einzelnen Skripts erläutert.

Speichern aktueller Einstellungen vor dem Ausführen von Skripts, die Änderungen vornehmen
Einige Beispielskripts nehmen Änderungen an dem Computer vor, für den sie ausgeführt werden. Diese Skripts werden mit einem Vorsichtshinweis wie dem Folgenden gekennzeichnet. Vorsicht Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen. Sie sollten alle aktuellen IP-Einstellungen in einer Textdatei speichern, bevor Sie ein Skript ausführen, dass Änderungen vornimmt. Dazu können Sie die folgende Befehlszeile ausführen: ipconfig.exe /all > ipconfig.txt Diese Befehlszeile leitet die Ausgabe von ipconfig in eine Textdatei um, die sich in dem Ordner befindet, aus dem der Befehl heraus ausgeführt wurde. Zusätzlich zum Befehl ipconfig beginnen einige Abschnitt dieses Dokuments mit einem Skript, das die Einstellungen für den jeweiligen Netzwerkabschnitt anzeigt. Sie können Ipsettings.vbs, Dhcpsettings.vbs, Dnssettings.vbs und Winssettings.vbs verwenden, um Konfigurationen für diese Bereiche zu erfassen, bevor Sie ein Skript ausführen, durch das diese Konfiguration möglicherweise geändert wird.

Seite 11 von 169

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

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

TechNet Script Center Hunderte Beispielskripts unter /germany/technet/scriptcenter/default.mspx (Deutsch) und http://go.microsoft.com/fwlink/?LinkId=24771 (Englisch). Windows 2000 Scripting-Handbuch unter /germany/technet/datenbank/articles/600356.mspx

Die Rubrik "Tales from the Script" in TechNet Behandelt grundlegende und fortgeschrittenere Skripterstellung http://go.microsoft.com/fwlink/?LinkId=27640 (nur auf Englisch verfügbar). MSDN Scripting Clinic Behandelt fortgeschrittene Themen zur Skripterstellung http://go.microsoft.com/fwlink/?LinkId=24784 (nur auf Englisch verfügbar). MSDN Windows Script Umfasst die Dokumentation und Downloads für VBScript und Windows Script Host
Seite 12 von 169

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

WMI Software Developers Kit (SDK) Bestandteil des Platform SDK im Microsoft Developers Network (MSDN) http://go.microsoft.com/fwlink/?LinkId=24766 (nur auf Englisch verfügbar).

Eine vollständige Liste der Ressourcen finden Sie am Ende dieses Dokuments.

Teil 2: Skripterstellung für grundlegende TCP/IP-Netzwerke auf Clients
Veröffentlicht: 19. Jul 2004

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

Abrufen grundlegender TCP/IP-Clienteinstellung mithilfe von Methoden, die keine Skripts verwenden
Wenn nur eine Reihe von TCP/IP-Einstellungen auf einem Computer geprüft werden müssen, bevorzugen viele Netzwerkadministratoren die Verwendung der Windows-Oberfläche, die in Windows XP über Netzwerkverbindungen und in Windows 2000 über Netzwerk- und DFÜ-Verbindungen bereitgestellt werden. So prüfen Sie TCP/IP-Einstellungen mithilfe der Windows-Oberfläche in Windows XP 1.Öffnen Sie die Systemsteuerung, und doppelklicken Sie auf Netzwerkverbindungen. 2.Klicken Sie im Dialogfeld Netzwerkverbindungen mit der rechten Maustaste auf eine bestimmte
Seite 13 von 169

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

Abbildung 1 Dialogfeld "Eigenschaften von Internetprotokoll (TCP/IP)" Bild maximieren Die Registerkarten DNS, WINS und Optionen zeigen auch Einstellungen für diese Technologien an und bieten Ihnen die Möglichkeit, die meisten Einstellungen zu ändern.

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

Abbildung 2 Typische Netzwerkeinstellungen, die mit "Ipconfig.exe" angezeigt werden Bild maximieren Sie können mit diesem Tool nicht nur Netzwerkeinstellungen anzeigen, sondern auch bestimmte Vorgänge durchführen. Die Option /renew erneuert z. B. DHCP-Leases und die Option /flushdns leert
Seite 14 von 169

den DNS-Clientauflösungscache.

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

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

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

Anzeigen einer Einstellung
Im folgenden Beispiel wird die Eigenschaft DHCPEnabled der Klasse Win32_NetworkAdapterConfiguration angezeigt. Die Eigenschaft DHCPEnabled gibt einen booleschen Wert zurück. Eine solche Eigenschaft kann entweder den Wert wahr oder falsch haben. Die von VBScript verwendeten Werte sind -1 für wahr (true) und 0 für falsch (false). Programmiertechnisch kann jedoch auch jeder andere Wert außer Null als Equivalent für "wahr" verwendet werden. In den meisten Fällen sollten Skripts jedoch die VBScript-Schlüsselwörter "True" (wahr) und "False" (falsch) für diese Werte verwenden. Das in diesem Beispielskript verwendete Muster kann für sämtliche Eigenschaften von Win32_NetworkAdapterConfiguration wiederholt werden, ausgenommen für Eigenschaften, die Arrays zurückgeben. Die Behandlung von Eigenschaften, die Arrays zurückgeben, wird später in diesem Dokument beschrieben. Schritte zur Skripterstellung 1.Stellen Sie mithilfe des Monikers "winmgmts:" eine Verbindung zum WMI-Dienst her. 2.Rufen Sie alle Instanzen der Klasse Win32_NetworkAdapterConfiguration mithilfe der Methode InstancesOf ab. Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer. 3.Für jede Netzwerkadapterkonfiguration in der Auflistung verwenden Sie die WSH-Methode Echo, um die boolesche Eigenschaft anzuzeigen, die der Einstellung DHCP aktiviert im Feld IP-Adressen der Registerkarte IP-Einstellungen des Dialogfelds Erweiterte TCP/IP-Einstellungen entspricht. Listing 1 Onesetting.vbs
1Set objWMIService = GetObject("winmgmts:") 2Set colNicConfig = _ 3 objWMIService.InstancesOf("Win32_NetworkAdapterConfiguration") 4For Each objNicConfig In colNicConfig 5 WScript.Echo objNicConfig.DHCPEnabled 6Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>onesetting.vbs -1 0 0 0 0 0 0

Seite 16 von 169

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

Anzeigen einer booleschen Einstellung als Zeichenfolge
Wenn Sie eine besser lesbare Ausgabe erzeugen möchten, führt eine kleine Änderung in Zeile 5 dazu, dass die booleschen Einstellungen als "True" oder "False" anstelle von "-1" und "0" angezeigt werden, wodurch sich die Lesbarkeit der Skriptausgabe erhöht. Durch Ausgeben von "DHCP Enabled: " und anschließendem Verknüpfen der Eigenschaft DHCPEnabled ermöglicht das Skript VBScript, die boolesche Einstellung in ein Zeichenfolgenformat zu konvertieren. Obwohl alle VBScript-Variablen vom Typ "Variant" sind, wandelt (transformiert) VBScript Varianten abhängig vom Kontext, in denen sie verwendet werden, automatisch in geeignete Datentypen. In diesem Fall, da das Skript eine Variable vom Typ "Boolean" mit einer reinen Zeichenfolge verknüpft, konvertiert VBScript den booleschen Wert in seine äquivalente Zeichenfolge. Schritte zur Skripterstellung 1.Stellen Sie die Verbindung zum WMI-Dienst her. 2.Rufen Sie alle Instanzen der Klasse Win32_NetworkAdapterConfiguration mithilfe der Methode InstancesOf ab. Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer. 3.Verwenden Sie für jede Konfiguration eines Netzwerkadapters die WSH-Methode Echo, um die Beschriftung "DHCP Enabled:" mit der booleschen Eigenschaft DHCPEnabled verknüpft anzuzeigen. Listing 2 Onesetting-string.vbs
1Set objWMIService = GetObject("winmgmts:") 2Set colNicConfig = _ 3 objWMIService.InstancesOf("Win32_NetworkAdapterConfiguration") 4For Each objNicConfig In colNicConfig 5 WScript.Echo "DHCP Enabled: " & objNicConfig.DHCPEnabled 6Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>onesetting-string.vbs DHCP Enabled: True DHCP Enabled: False DHCP Enabled: False DHCP Enabled: False
Seite 17 von 169

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

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

Eigenschaft IPEnabled den Wert True ergibt. Die zurückgegebene Auflistung besteht aus den Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist. 3.Verwenden Sie für jede Konfiguration eines Netzwerkadapters die WSH-Methode Echo, um den Index des Netzwerkadapters und die Eigenschaft DHCPEnabled anzuzeigen. Listing 3 Onesetting-execquery.vbs
1Set objWMIService = GetObject("winmgmts:") 2Set colNicConfig = objWMIService.ExecQuery("SELECT * FROM " & _ 3 "Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 4For Each objNicConfig In colNicConfig 5 WScript.Echo "Network Adapter: " & objNicConfig.Index 6 WScript.Echo " DHCP Enabled: " & objNicConfig.DHCPEnabled 7Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>onesetting-execquery.vbs Network Adapter: 1 DHCP Enabled: True Network Adapter: 10 DHCP Enabled: False In anderen Fällen möchten Sie die Ausführung des Skripts möglicherweise auf eine einzelne Netzwerkadpaterkonfiguration einschränken. Auf einem zweifach vernetzten Computer, der mit zwei Netzwerken verbunden ist, können Sie z. B. DHCP für einen Netzwerkadapter aktivieren, während es für den anderen deaktiviert bleibt. Dazu können Sie eine Abfrage wie "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE Index = 0" verwenden. Eine einfachere Methode, um dies zu erreichen, ist die Verwendung der Methode Get() des Objekts SWbemServices (zurückgegeben durch den Aufruf von GetObject für den Moniker wingmgts:). Get() nimmt eine Zeichenfolge, die einen WMI-Objektpfad als erforderlichen Parameter enthält und gibt ein SWbemObject-Objekt zurück. Tipp Das folgende Skript zeigt eine Eigenheit von WMI: Obwohl VBScript, WSH und WMI normalerweise Leerzeichen ignorieren, darf innerhalb des an objWMIService.Get() übergebenen Objektpfades (dem Zeichenfolgenparameter) kein Leerzeichen vor oder hinter dem Gleichheitszeichen (=) in "Index=0" enthalten sein. Ein Leerzeichen auf einer Seite des Gleichheitszeichens führt zu einem Fehler. Schritte zur Skripterstellung 1.Stellen Sie die Verbindung zum WMI-Dienst her. 2.Rufen Sie die Instanz der Klasse Win32_NetworkAdapterConfiguration mit dem Index (die Schlüsseleigenschaft) "0" mithilfe der Methode Get ab. Die zurückgegebene Auflistung besteht aus der Netzwerkadapterkonfiguration auf dem Computer, für den der Index den Wert "0" hat.
Seite 19 von 169

3.Verwenden Sie für diese Instanz die WSH-Methode Echo, um den Index des Netzwerkadapters und die Eigenschaft DHCPEnabled anzuzeigen. Listing 4 Onesetting-onenic.vbs
1intIndex = 1 ' index of an IP-enabled network adapter 2Set objWMIService = GetObject("winmgmts:") 3Set colNicConfig = objWMIService.ExecQuery("SELECT * FROM " & _ 4 "Win32_NetworkAdapterConfiguration WHERE Index = " & intIndex) 5For Each objNicConfig In colNicConfig 6 WScript.Echo "Network Adapter: " & objNicConfig.Index 7 WScript.Echo " DHCP Enabled: " & objNicConfig.DHCPEnabled 8Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>onesetting-onenic.vbs Network Adapter: 1 DHCP Enabled: True

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

Verwenden der Funktion "Join" von VBScript
Die Funktion Join von VBScript verknüpft oder verbindet Elemente eines Arrays zu einer einzelnen Zeichenfolge, die durch ein oder mehrere in einem zweiten, optionalen Parameter angegebene Zeichen getrennt sind. Wenn Sie dieses Trennzeichen nicht angeben, verwendet Join das Leerzeichen als Trennzeichen. Die Funktion Join ist erforderlich, da Sie ein Array nicht direkt anzeigen können. Zuerst müssen Sie das Array in seine Elemente aufteilen oder es in eine Zeichenfolge konvertieren. Mithilfe der Funktion Join können Sie die Formatierung dieser Zeichenfolge steuern. Sie können z. B. entweder das Komma oder den Doppelpunkt als Trennzeichen verwenden (anstelle des Leerzeichens), um die Elemente im Array zu trennen. Schritte zur Skripterstellung 1.Stellen Sie die Verbindung zum WMI-Dienst her. 2.Rufen Sie alle Instanzen der Klasse Win32_NetworkAdapterConfiguration mit der Methode ExecQuery und einer Abfragezeichenfolge ab, die die Netzwerkadapter filtert, deren Eigenschaft IPEnabled den Wert True ergibt. Die zurückgegebene Auflistung besteht aus den Netzwerkadapterkonfigurationen auf dem Computer,
Seite 20 von 169

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

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

5.Zeigen Sie die durch Leerzeichen getrennte Zeichenfolge der IP-Adressen an. Listing 5 Onesetting-array-join.vbs
1 Set objWMIService = GetObject("winmgmts:") 2 Set colNicConfig = objWMIService.ExecQuery("SELECT * FROM " & _ 3 "Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 4 For Each objNicConfig In colNicConfig 5 WScript.Echo "Network Adapter: " & objNicConfig.Index 6 If Not IsNull(objNicConfig.IPAddress) Then 7 strIPAddresses = Join(objNicConfig.IPAddress) 8 Else 9 strIPAddresses = "" 10 End If 11 WScript.Echo " IP Address(es): " & strIPAddresses 12Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>onesetting-array-join.vbs Network Adapter: 1 IP Address(es): 0.0.0.0 Network Adapter: 10 IP Address(es): 192.168.1.2

Verwenden von "For Each ... In ... Next"
Die Schleife For Each bietet eine alternative Möglichkeit, um die Elemente eines Arrays anzuzeigen. Diese Anweisung durchläuft das Array und ermöglicht es dem Skript, für jedes separate Element eine Aktion durchzuführen. In diesem Fall wird das Element einfach angezeigt. Schritte zur Skripterstellung 1.Stellen Sie die Verbindung zum WMI-Dienst her. 2.Rufen Sie alle Instanzen der Klasse Win32_NetworkAdapterConfiguration mit der Methode ExecQuery und einer Abfragezeichenfolge ab, die die Netzwerkadapter filtert, deren Eigenschaft IPEnabled den Wert True ergibt. Die zurückgegebene Auflistung besteht aus den Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist.
Seite 21 von 169

3.Verwenden Sie für jede Konfiguration eines Netzwerkadapters die WSH-Methode Echo, um den Index des Netzwerkadapters anzuzeigen. 4.Wenn die Eigenschaft IPAddress (ein Array) ungleich Null ist, verwenden Sie eine For EachSchleife, um eine Iteration durch das Array IPAddress durchzuführen, wobei jedes Element mithilfe der WSH-Methode Echo angezeigt wird. Listing 6 Onesetting-array-foreach.vbs
1 Set objWMIService = GetObject("winmgmts:") 2 Set colNicConfig = objWMIService.ExecQuery("SELECT * FROM " & _ 3 "Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 4 For Each objNicConfig In colNicConfig WScript.Echo "Network Adapter: " & objNicConfig.Index 5 6 WScript.Echo " IP Address(es):" 7 If Not IsNull(objNicConfig.IPAddress) Then For Each strIPAddress In objNicConfig.IPAddress 8 WScript.Echo " " & strIPAddress 9 10 Next 11 End If 12Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>onesetting-array-foreach.vbs Network Adapter: 1 IP Address(es): 0.0.0.0 Network Adapter: 10 IP Address(es): 192.168.1.2

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

1.Erstellen Sie eine Variable zur Angabe des Computernamens. 2.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 3.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird. Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist. 4.Verwenden Sie für jede Konfiguration eines Netzwerkadapters in der Auflistung die WSH-Methode Echo, um die Eigenschaften anzuzeigen, die den Einstellungen auf der Registerkarte IPEinstellungen entsprechen. 5.Für die Eigenschaften, die ein Array zurückgeben, verwenden Sie die VBScript-Funktion IsNull(), um zu prüfen, ob das Array den Wert Null hat.
• •

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

Listing 7 Ipsettings.vbs

Seite 23 von 169

1 On Error Resume Next 2 3 strComputer = "." 4 Set objWMIService = GetObject("winmgmts:" _ 5 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 6 Set colNicConfigs = objWMIService.ExecQuery _ 7 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 8 9 WScript.Echo VbCrLf & "IP Settings" 10 11 For Each objNicConfig In colNicConfigs 12 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index 13 " & objNicConfig.Description & VbCrLf 14 WScript.Echo " DHCP Enabled: " & _ 15 WScript.Echo " objNicConfig.DHCPEnabled 16 17 If Not IsNull(objNicConfig.IPAddress) Then strIPAddresses = Join(objNicConfig.IPAddress) 18 19 Else strIPAddresses = "" 20 21 End If IP Address(es): " & strIPAddresses 22 WScript.Echo " 23 If Not IsNull(objNicConfig.IPSubnet) Then strIPSubnet = Join(objNicConfig.IPSubnet) 24 25 Else strIPSubnet = "" 26 27 End If Subnet Mask(s): " & strIPSubnet 28 WScript.Echo " 29 If Not IsNull(objNicConfig.DefaultIPGateway) Then strDefaultIPGateway = Join(objNicConfig.DefaultIPGateway) 30 31 Else strDefaultIPGateway = "" 32 33 End If Default Gateways(s): " & strDefaultIPGateway 34 WScript.Echo " 35 If Not IsNull(objNicConfig.GatewayCostMetric) Then strGatewayCostMetric = Join(objNicConfig.GatewayCostMetric) 36 37 Else strGatewayCostMetric = "" 38 39 End If Gateway Metric(s): " & strGatewayCostMetric 40 WScript.Echo " 41 WScript.Echo " Interface Metric: " & _ 42 objNicConfig.IPConnectionMetric 43 WScript.Echo " Connection-specific DNS Suffix: " & _ 44 objNicConfig.DNSDomain 45 46 Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>ipsettings.vbs IP Settings Network Adapter 1 Intel(R) PRO/1000 MT Network Connection - Packet Scheduler Miniport DHCP Enabled: True IP Address(es): 0.0.0.0
Seite 24 von 169

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

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

Seite 25 von 169

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

Anzeigen Netzwerkadaptereigenschaften
Das Anzeigen der Einstellungen von Netzwerkadaptern erfordert ähnliche Verfahren zur Skripterstellung, wie die zum Anzeigen der TCP/IP-Einstellungen. Der einzige Unterschied ist, dass Sie die Klasse Win32_NetworkAdapterConfiguration zum Anzeigen der TCP/IP-Einstellungen verwenden, während die Eigenschaften der Netzwerkadapter mithilfe der Klasse Win32_NetworkAdapter angezeigt werden. Weitere Informationen zu den Eigenschaften und Methoden dieser WMI-Klasse finden Sie im WMI Software Development Kit (SDK) unter http://go.microsoft.com/fwlink/?LinkId=29992 (nur auf Englisch verfügbar). Schritte zur Skripterstellung Listing 8 ruft die Eigenschaften für alle Netzwerkadapter eines Computers ab. In diesem Skript werden einige Eigenschaften abgerufen, die nur unter Windows XP und Windows Server 2003 verfügbar sind. 1.Erstellen Sie eine Variable zur Angabe des Computernamens. Verwenden Sie z. B. ("."), um den lokalen Computer anzugeben. 2.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 3.Verwenden Sie die Methode ExecQuery zum Abfragen der Klasse Win32_NetworkAdapter. Die zurückgegebene Auflistung besteht aus allen Netzwerkadaptern auf dem Computer. 4.Verwenden Sie für jeden Netzwerkadapter in der Auflistung die WSH-Methode Echo, um seine Eigenschaften anzuzeigen. 5.Für die Eigenschaften, die ein Array zurückgeben, verwenden Sie die VBScript-Funktion IsNull(), um zu prüfen, ob das Array den Wert Null hat.
• •

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

Listing 8 Nicsettings.vbs
Seite 26 von 169

1 On Error Resume Next 2 3 strComputer = "." 4 Set objWMIService = GetObject("winmgmts:" _ 5 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 6 Set colNics = objWMIService.ExecQuery _ 7 ("SELECT * FROM Win32_NetworkAdapter") 8 9 WScript.Echo VbCrLf & "Network Adapter Settings" 10 11 For Each objNic In colNics 12 WScript.Echo VbCrLf & " Network Adapter (Device ID)" & _ 13 objNic.DeviceID 14 Index: " & objNic.Index 15 Wscript.Echo " MAC Address: " & objNic.MACAddress 16 Wscript.Echo " Adapter Type: " & objNic.AdapterType 17 Wscript.Echo " Adapter Type Id: " & objNic.AdapterTypeID 18 Wscript.Echo " Description: " & objNic.Description 19 Wscript.Echo " Manufacturer: " & objNic.Manufacturer 20 Wscript.Echo " Name: " & objNic.Name 21 Wscript.Echo " Product Name: " & objNic.ProductName 22 Wscript.Echo " Net Connection ID: " & objNic.NetConnectionID 23 Wscript.Echo " Net Connection Status: " & objNic.NetConnectionStatus 24 Wscript.Echo " PNP Device ID: " & objNic.PNPDeviceID 25 Wscript.Echo " Service Name: " & objNic.ServiceName 26 Wscript.Echo " 27 If Not IsNull(objNic.NetworkAddresses) Then strNetworkAddresses = Join(objNic.NetworkAddresses) 28 29 Else strNetworkAddresses = "" 30 31 End If NetworkAddresses: " & strNetworkAddresses 32 Wscript.Echo " Permanent Address: " & objNic.PermanentAddress 33 Wscript.Echo " AutoSense: " & objNic.AutoSense 34 Wscript.Echo " Maximum Number Controlled: " & objNic.MaxNumberControlled 35 Wscript.Echo " 36 Wscript.Echo " Speed: " & objNic.Speed 37 Wscript.Echo " Maximum Speed: " & objNic.MaxSpeed 38 39 Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>nicsettings.vbs Network Adapter Settings Network Adapter (Device ID)1 Index: 1 MAC Address: 00:0D:56:15:ED:B7 Adapter Type: Ethernet 802.3 Adapter Type Id: 0 Description: Intel(R) PRO/1000 MT Network Connection Manufacturer: Intel Name: Intel(R) PRO/1000 MT Network Connection
Seite 27 von 169

Product Name: Intel(R) PRO/1000 MT Network Connection Net Connection ID: Local Area Connection Net Connection Status: 7 PNP Device ID: PCI\VEN_8086&DEV_100E&SUBSYS_01511028&REV_02\4&1C660DD6&0&60F0 Service Name: E1000 NetworkAddresses: Permanent Address: AutoSense: Maximum Number Controlled: 0 Speed: Maximum Speed: Network Adapter (Device ID)2 Index: 2 MAC Address: Adapter Type: Adapter Type Id: Description: RAS Async Adapter Manufacturer: Name: RAS Async Adapter Product Name: RAS Async Adapter Net Connection ID: Net Connection Status: PNP Device ID: Service Name: NetworkAddresses: Permanent Address: AutoSense: Maximum Number Controlled: 0 Speed:
Seite 28 von 169

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

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

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

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

Abbildung 5 Ausgabe von "Arp.exe"
Seite 31 von 169

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

Win32_NetworkAdapterConfigurationIndex Win32_NetworkAdapter DeviceID

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

root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 3.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird. Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für den IP aktiviert ist. 4.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben aus. 5.Verwenden Sie die Methode Get des Objekts objWMIService, um die Instanz von Win32_NetworkAdapter zu ermitteln, dessen Eigenschaft DeviceID der Eigenschaft Index von Win32_NetworkAdapterConfiguration entspricht. 6.Zeigen Sie die Eigenschaften AdapterType und NetConnectionID der aktuellen Instanz von Win32_NetworkAdapter an. Wenn ein Fehler auftritt, ist die Eigenschaft NetConnectionID nicht vorhanden (diese Eigenschaft ist neu in Windows XP und Windows Server 2003). Wechseln Sie also zur Anzeige der Eigenschaft Index von Win32_NetworkAdapterConfiguration, um den aktuellen Netzwerkadapter zu identifizieren. 7.Zeigen Sie die Eigenschaft Description von Win32_NetworkAdapterConfiguration und die Eigenschaft MACAddress von Win32_NetworkAdapter an. 8.Zeigen Sie die Eigenschaften IPAddress und IPSubnet von Win32_NetworkAdapterConfiguration an. Listing 9 Getncmacip.vbs

Seite 33 von 169

1 On Error Resume Next 2 3 strComputer = "." 4 Set objWMIService = GetObject("winmgmts:" _ 5 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 6 Set colNicConfigs = objWMIService.ExecQuery _ 7 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 8 9 WScript.Echo VbCrLf & "MAC & IP Addresses & Subnet Masks" 10 11 For Each objNicConfig In colNicConfigs 12 13 Set objNic = objWMIService.Get _ 14 ("Win32_NetworkAdapter.DeviceID=" & objNicConfig.Index) 15 16 WScript.Echo VbCrLf & " " & objNic.AdapterType & " " & _ 17 objNic.NetConnectionID 18 If Err Then 19 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index 20 End If 21 22 WScript.Echo " " & objNicConfig.Description & VbCrLf 23 WScript.Echo " MAC Address:" & VbCrLf & _ 24 " " & objNic.MACAddress 25 WScript.Echo " IP Address(es):" 26 For Each strIPAddress In objNicConfig.IPAddress 27 WScript.Echo " " & strIPAddress 28 Next 29 WScript.Echo " Subnet Mask(s):" 30 For Each strIPSubnet In objNicConfig.IPSubnet 31 WScript.Echo " " & strIPSubnet 32 Next 33 34 Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>getncmacip.vbs MAC & IP Addresses & Subnet Masks Ethernet 802.3 Local Area Connection Intel(R) PRO/1000 MT Network Connection - Packet Scheduler Miniport MAC Address: 00:0D:56:15:ED:B7 IP Address(es): 0.0.0.0 Subnet Mask(s): Ethernet 802.3 Local Area Connection 2 3Com EtherLink 10/100 PCI For Complete PC Management NIC (3C905C-TX) - Packet Scheduler Miniport
Seite 34 von 169

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

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

Abbildung 6 Korrelieren von Daten mithilfe von "Win32_NetworkAdapterSetting" Bild maximieren

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

Listing 10 ruft die Eigenschaften des TCP/IP-Netzwerkclients eines einzelnen Computers ab. 1.Erstellen Sie eine Variable zur Angabe des Computernamens. 2.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 3.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird. Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für den IP aktiviert ist. 4.Verwenden Sie für jede Netzwerkadapterkonfiguration in der Auflistung die Methode ExecQuery, um die Klasse Win32_NetworkAdapterConfiguration mit einer ASSOCIATORS OF-Abfrage abzufragen. Die Abfrage gibt eine Auflistung der Instanzen von Win32_NetworkAdapter zurück. Eine ASSOCIATORS OF-Abfrage verwendet die Verknüpfungsklasse Win32_NetworkAdapterSetting, um die Instanzen von Win32_NetworkAdapterConfiguration (durch die Eigenschaft Index gekennzeichnet) mit den entsprechenden Instanzen der Verknüpfungsklasse Win32_NetworkAdapter zu korrelieren. 5.Führen Sie eine Iteration durch die Auflistung der Instanzen von Win32_NetworkAdapter durch, die die Eigenschaften AdapterType, NetConnectionID und MACAddress anzeigt. Wenn ein Fehler beim Anzeigen der Eigenschaft NetConnectionID auftritt, zeigen Sie stattdessen den Index der entsprechenden Instanz von Win32_NetworkAdapterConfiguration an. 6.Zeigen Sie die Eigenschaften IPAddress und IPSubnet für die Instanz von Win32_NetworkAdapterConfiguration an, die mit der aktuellen Instanz von Win32_NetworkAdapter verknüpft ist. Listing 10 Getncmacip-assoc.vbs

Seite 36 von 169

1 On Error Resume Next 2 3 strComputer = "." 4 Set objWMIService = GetObject("winmgmts:" _ 5 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 6 Set colNicConfigs = objWMIService.ExecQuery _ 7 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 8 9 WScript.Echo VbCrLf & "MAC & IP Addresses & Subnet Masks" 10 11 For Each objNicConfig In colNicConfigs 12 13 Set colNics = objWMIService.ExecQuery _ 14 ("ASSOCIATORS OF " & "{Win32_NetworkAdapterConfiguration.Index='" & _ 15 objNicConfig.Index & "'}" & _ 16 " WHERE AssocClass=Win32_NetworkAdapterSetting") 17 18 For Each objNic in colNics 19 20 WScript.Echo VbCrLf & " " & objNic.AdapterType & " " & _ 21 objNic.NetConnectionID 22 If Err Then 23 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index 24 End If 25 26 WScript.Echo " " & objNicConfig.Description & VbCrLf 27 WScript.Echo " MAC Address:" & VbCrLf & _ 28 " " & objNic.MACAddress 29 WScript.Echo " IP Address(es):" 30 For Each strIPAddress In objNicConfig.IPAddress 31 WScript.Echo " " & strIPAddress 32 Next 33 WScript.Echo " Subnet Mask(s):" 34 For Each strIPSubnet In objNicConfig.IPSubnet 35 WScript.Echo " " & strIPSubnet 36 Next 37 38 Next 39 40 Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>getncmacip-assoc.vbs MAC & IP Addresses & Subnet Masks Ethernet 802.3 Local Area Connection Intel(R) PRO/1000 MT Network Connection - Packet Scheduler Miniport MAC Address: 00:0D:56:15:ED:B7 IP Address(es): 0.0.0.0 Subnet Mask(s):
Seite 37 von 169

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

Anzeigen von für den Netzwerkverbindungsnamen gefilterten Einstellungen
Nachdem Ihnen jetzt bekannt ist, wie Sie mit einem einzelnen Skript verwandte Eigenschaften von Win32_NetworkAdapterConfiguration und Win32_NetworkAdapter abrufen, wird hier eine weitere Möglichkeit vorgestellt, wie Sie diese Funktion verwenden können. Wenn nur die Daten eines Netzwerkadapters erforderlich sind, können Sie über Netzwerkverbindungen eine Verbindung über seinen Namen herstellen – eine leichter zu merkende Kennung als die Indexnummer – und eine Einstellung von diesem Netzwerkadapter abrufen. Sie können dies über die Verwendung der Eigenschaft NetConnectionID von Win32_NetworkAdapter erreichen. Die Eigenschaft NetConnectionID ist nur unter Windows XP und Windows Server 2003 verfügbar. Wenn die Eigenschaft nicht gefunden wird, erzeugt das Skript einen Laufzeitfehler, der durch Prüfen des VBScript-Objekts Err behandelt wird. Wenn die Eigenschaft Number des Err-Objekts einen anderen Wert als "0" hat, ist ein Fehler aufgetreten. In dem Fall zeigt das Skript eine Fehlermeldung an und wird abgebrochen. Schritte zur Skripterstellung Listing 11 ruft die Eigenschaften des TCP/IP-Netzwerkclients eines einzelnen Computers ab. 1.Erstellen Sie eine Variable zur Angabe des Computernamens. 2.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 3.Verwenden Sie die Methode ExecQuery zum Abfragen der Klasse Win32_NetworkAdapter, wobei die WQL-Abfrage mit einer WHERE-Klausel nach einer bestimmten NetConnectionID gefiltert wird. Die zurückgegebene Auflistung besteht aus einer Instanz, die den Netzwerkadapter mit dieser bestimmten NetConnectionID darstellt. 4.Überprüfen Sie, ob die NetConnectionID gefunden wurde. Ist dies der Fall, fahren Sie mit den Aufgaben im Skript fort. 5.Für jeden Netzwerkadapter in der Auflistung führen Sie mithilfe einer ASSOCIATORS OF-Abfrage eine Korrelation jeder Netzwerkadapterkonfiguration mit einem Netzwerkadapter durch. Dazu müssen Sie die Eigenschaft DeviceID von Win32_NetworkAdapter verwenden, die die
Seite 38 von 169

Schlüsseleigenschaft für diese Klasse darstellt (Zeilen 12–15). 6.Zeigen Sie für jeden Netzwerkadapter und die zugehörige Konfiguration den Adaptertyp und die IPAdressen an. 7.Wenn die bestimmte NetConnectionID nicht gefunden wurde, zeigen Sie eine Meldung an. Listing 11 Getncip.vbs
1 On Error Resume Next 2 3 strComputer = "." 4 5 strNetConn = "Local Area Connection" 6 Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 7 Set colNics = objWMIService.ExecQuery("SELECT * FROM " & _ 8 "Win32_NetworkAdapter WHERE NetConnectionID = '" & strNetConn & "'") 9 10 If colNics.Count > 0 Then 11 For Each objNic in colNics Set colNicConfigs = objWMIService.ExecQuery ("ASSOCIATORS OF " & _ 12 "{Win32_NetworkAdapter.DeviceID='" & objNic.DeviceID & "'}" & _ 13 " WHERE AssocClass=Win32_NetworkAdapterSetting") 14 15 For Each objNicConfig In colNicConfigs WScript.Echo VbCrLf & " " & objNic.AdapterType & " " & _ 16 objNic.NetConnectionID 17 If Not IsNull(objNicConfig.IPAddress) Then 18 19 For Each strIPAddress in objNicConfig.IPAddress Wscript.Echo " IP Address: " & strIPAddress 20 Next 21 End If 22 23 Next 24 Next 25Else 26 WScript.Echo "Unable to find NetconnectID named '" & strNetConn & "'." & _ VbCrLf & "If Windows 2000 or earlier, NetConnectionID property unavailable." 27 28End If

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>getncip.vbs Ethernet 802.3 Local Area Connection IP Address: 192.168.0.213

Anzeigen erweiterter IP-Konfigurationsdaten
In Windows XP können Sie detailliertere TCP/IP-Clienteinstellung für eine bestimmte Netzwerkverbindung bequem über das Dialogfeld Netzwerkverbindungsdetails abrufen. So rufen Sie ausführliche TCP/IP-Einstellungen für eine bestimmte Netzwerkverbindung ab 1.Öffnen Sie die Systemsteuerung, und doppelklicken Sie auf Netzwerkverbindungen. 2.Klicken Sie im Dialogfeld Netzwerkverbindungen mit der rechten Maustaste auf eine bestimmte Netzwerkverbindung, und klicken Sie anschließend auf Status.

Seite 39 von 169

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

Abbildung 7 Dialogfeld "Netzwerkverbindungsdetails" Bild maximieren

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

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

Verwenden eines Skripts zum Anzeigen erweiterter Konfigurationsdaten
WMI bietet die Funktionalität, um fast alle Funktionen des Befehls ipconfig /all zusammen mit vielen anderen Einstellungen zu reproduzieren. Neben Win32_NetworkAdapterConfiguration verwendet
Seite 40 von 169

Ipconfig.vbs auch StdRegProv, eine im WMI-Provider der Systemregistrierung enthaltene Klasse, um einige Einstellungen aus der Registrierung zu extrahieren. Vorsicht Durch eine fehlerhafte Bearbeitung der Registrierung kann ernsthafter Schaden am System verursacht werden. Bevor Sie Änderungen an der Registrierung vornehmen, sollten Sie eine Sicherungskopie aller wichtigen Daten auf dem Computer erstellen. Schritte zur Skripterstellung Listing 12 ruft einen umfangreichen Satz mit Einstellungen von TCP/IP-Netzwerkclients ab, der dem durch Ipconfig.exe /all von einem einzelnen Computer abgerufenen Satz entspricht. Das Skript verwendet zwei Funktionen: Eine konvertiert die zurückgegebenen Daten in ein lesbareres Format und die andere Funktion gibt die Version des Betriebssystems zurück. Das Skript muss dazu folgende Aufgaben durchführen: 1.Aufrufen von "On Error Resume Next", damit das Skript nicht durch auftretende Fehler abgebrochen wird. 2.Zuordnen von Werten zu Konstanten und Variablen, die verwendet werden sollen. 3.Verwenden eines Aufrufs von GetObject, um im WMI-Namespace root\default eine Verbindung zur Klasse StdRegProv herzustellen. 4.Abrufen globaler Einstellungen aus der Registrierung mithilfe der Methoden GetStringValue und GetDWORDValue von StdRegProv. Diese Einstellungen gelten für alle Netzwerkadapter. Diese Methoden geben einen Wert über einen Ausgabeparameter zurück (hierbei handelt es sich um den jeweils letzten beim Aufruf der Methode angegebenen Parameter). 5.Verwenden einer Select Case-Anweisung, um den vom Ausgabeparameter dwNodeType zurückgegebenen Wert zu decodieren. 6.Verwenden einer If ... ElseIf ... Else-Anweisung, um den vom Ausgabeparameter dwlPRouting zurückgegebenen Wert zu decodieren. 7.Verwenden eines Aufrufs von GetObject, um die Verbindung zum WMI-Namespace root\cimv2 herzustellen. 8.Verwenden der Methode ExecQuery zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird. Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für den IP aktiviert ist. 9.Abrufen des Werts von DNSEnabledForWINSResolution, wobei es sich um eine globale Einstellung handelt, die für jeden Netzwerkadapter gleich ist. Verwenden einer If ... ElseIf ... ElseAnweisung, um den von DNSEnabledForWINSResolution zurückgegebenen booleschen Wert zu decodieren. 10.Anzeigen der abgerufenen globalen Einstellungen. 11.Erneutes Verwenden der Methode ExecQuery zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled =
Seite 41 von 169

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

Eine höhere Version als 5, die auf Windows XP oder Windows Server 2003 hinweist, dann die Eigenschaft NetConnectionID von Win32_NetworkAdapter abrufen. Version 5 oder niedriger, dann die Eigenschaft Index von Win32_NetworkAdapterConfiguration als Kennung des Netzwerkadapters verwenden.

18.Abrufen und Anzeigen anderer Eigenschaften der beiden Klassen. 19.Wenn die Eigenschaft ein Array zurückgibt, überprüfen, dass der Wert ungleich Null ist. Wenn der Rückgabewert ungleich Null ist, jedes durch Leerzeichen getrennte Arrayelement einer Zeichenfolge zuweisen und diese anzeigen. 20.Wenn die Eigenschaft einen Wert im Format WMI DATETIME zurückgibt, die Funktion WMIDateStringToDate aufrufen und den DATETIME-Wert übergeben. Diese Funktion konvertiert den Wert in eine lesbarere Zeichenfolge, die das Datum und die Uhrzeit darstellt. Listing 12 Ipconfig.vbs

Seite 42 von 169

1 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" WScript.Echo " Host Name . . . . . . . . . WScript.Echo " Primary DNS Suffix . . . . WScript.Echo " Node Type . . . . . . . . . WScript.Echo " IP Routing Enabled. . . . . WScript.Echo " WINS Proxy Enabled. . . . . WScript.Echo " DNS Suffix Search List. . . & . . . . . . VbCrLf . . : " . . : " . . : " . . : " . . : " . . : "

& & & & & &

strHostname strDomain strNodeType strIPRouting strWinsProxy strDomain

Set colNicConfigs = objWMIService.ExecQuery _ ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") sngOsVer = GetOsVer ' Display per-adapter settings.

Seite 43 von 169

For Each objNicConfig In colNicConfigs intIndex = objNicConfig.Index Set objNic = objWMIService.Get("Win32_NetworkAdapter.DeviceID=" & intIndex)

Teil 3: Skripterstellung für die Verwaltung von Remotenetzwerken
Veröffentlicht: 19. Jul 2004

In diesem Abschnitt wird veranschaulicht, wie Skripts zum Durchführen von Aufgaben auf Remotecomputern geschrieben werden. Außerdem werden geeignete Vorgehensweisen bei der Skripterstellung hervorgehoben, die bei der Remoteausführung von Skripts zu befolgen sind. Der Nutzen der Skripterstellung mit VBScript, WSH und WMI wird erst richtig deutlich, wenn Sie versuchen, Skripts über das Netzwerk auf mehreren Computern auszuführen. Die einbezogenen Verfahren sind nicht besonders schwierig, da der Remotebetrieb ein spezifischer Bestandteil von WMI ist. Sie können alle im vorherigen Abschnitt, "Skripterstellung für grundlegende TCP/IPNetzwerke auf Clients", beschriebenen Verfahren auf einem oder mehreren Computern anwenden, indem Sie ein paar relativ einfache Änderungen vornehmen. Weitere Informationen zu diesen und verwandten Verfahren finden Sie in "Tales from the Script November 2002: Running WMI Scripts Against Multiple Computers" unter http://go.microsoft.com/fwlink/?LinkId=24786 (nur auf Englisch verfügbar). Hinweis Das Objekt WshController des WSH bietet eine weitere Möglichkeit, um Skripts für Remotecomputer auszuführen. Das WshController-Objekt ist hier jedoch nicht einbezogen, da WMI einfachere und leistungsstärkere Möglichkeiten bietet, um die in diesem Dokument beschriebenen Skripterstellungsaufgaben zu erreichen. In diesem Abschnitt werden Informationen zum Verwalten von Remotecomputern bereitgestellt, einschließlich der Schritte zur Skripterstellung und Beispielskripts für diese Themen:
• • •

Herstellen einer Verbindung zu einem Remotecomputer und Abrufen grundlegender Einstellungen. Herstellen einer Verbindung zu einer Gruppe von Computern in einem Netzwerk. Aufzeichnen der von den Netzwerkcomputern erfassten Daten.

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

Verwenden von WMI zum Herstellen einer Verbindung zu einem Remotecomputer
Weisen Sie den Namen des Remotecomputers einfach zu der im WMI-Objektpfad verwendeten Hostvariable zu, um WMI zum Herstellen einer Verbindung zu einem Remotecomputer zu verwenden. WMI behandelt die Details beim Herstellen der Verbindung zu Remotecomputern.
strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer)

Im vorhergehenden Beispiel hat WMI die Verbindung zu einem lokalen Computer hergestellt. Der Punkt (.) repräsentiert den lokalen Computer in WMI-Objektpfaden. Die Verbindung wird zum Standard-WMI-Namespace – normalerweise root\cimv2 – mithilfe des Parameters
Seite 44 von 169

"impersonationLevel" und dem Wert "impersonate" aufgebaut. Ersetzen Sie "." durch den Namen eines Remotecomputers, damit WMI die Verbindung zu diesem Remotecomputer herstellt.
strComputer = "client1" Set objWMIService = GetObject("winmgmts:\\" & strComputer)

Wie bei lokalen Computern müssen Sie auch auf dem Remotecomputer über entsprechende Administratorrechte verfügen, um die in diesem Skript enthaltenen Schritte durchführen zu können. Weitere Informationen zum Herstellen der Verbindung zu WMI finden Sie unter "Connecting to WMI Using the WMI Moniker" im Kapitel "WMI Scripting Primer" des Windows 2000 Scripting Guide unter http://go.microsoft.com/fwlink/?LinkId=29993 (nur auf Englisch verfügbar).

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

Seite 45 von 169

1 On Error Resume Next 2 3 strComputer = "client1" 4 Set objWMIService = GetObject("winmgmts:" _ 5 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 6 Set colNicConfigs = objWMIService.ExecQuery _ 7 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 8 9 WScript.Echo VbCrLf & "Computer Name: " & strComputer 10WScript.Echo " IP Addresses & Subnet Masks" 11 12 For Each objNicConfig In colNicConfigs 13 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index 14 WScript.Echo " " & objNicConfig.Description & VbCrLf 15 WScript.Echo " IP Address(es):" 16 For Each strIPAddress In objNicConfig.IPAddress 17 WScript.Echo " " & strIPAddress 18 Next 19 WScript.Echo " Subnet Mask(s):" 20 For Each strIPSubnet In objNicConfig.IPSubnet 21 WScript.Echo " " & strIPSubnet 22 Next 23Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>getip.vbs Computer Name: client1 IP Addresses & Subnet Masks Network Adapter 1 3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet Scheduler Miniport IP Address(es): 192.168.0.11 Subnet Mask(s): 255.255.255.0

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

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

Senden von Ping-Anforderungen an Netzwerkhosts vor dem Versuch, darauf Skripts auszuführen. Behandeln von Fehlern mit VBScript. Verwenden eines Arrays zum Eingeben einer Liste von Netzwerkhosts. Abrufen der IP-Adressen und Subnetzmasken einer Gruppe von Remotecomputern. Verwenden einer Textdatei mit einer Hostliste als Eingabe. Herstellen der Verbindung zu einem Subnetz oder einem Bereich von IP-Adressen. Andere Möglichkeiten zum Bereitstellen von Eingaben für Skripts.

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

Senden von Ping-Signalen an einzelne Netzwerkhosts durch Ausführen von "Ping.exe" über ein Skript
Wenn Sie ermitteln möchten, ob ein Computer im Netzwerk erreichbar ist, bevor Sie versuchen, die Verbindung zu WMI herzustellen und eine Aufgabe darauf durchzuführen, kann Ping.exe über ein Skript mithilfe von WSH aufgerufen werden. VBScript bietet Funktionen zur Zeichenfolgenbehandlung, mit deren Hilfe das Skript den über die Standardeingabe eingehenden StdOut-Zeichenstream analysieren kann, um zu sehen, ob der Remotecomputer entsprechend geantwortet und reagiert hat. Schritte zur Skripterstellung Listing 14 veranschaulicht, wie Ping.exe mit der WshShell-Methode Exec() ausgeführt wird. 1.Aufrufen von "On Error Resume Next", dem Mechanismus von VBScript zur Fehlerbehandlung. 2.Erstellen einer Variablen zur Angabe des Remotecomputernamens. Dieses Skript verwendet fast denselben Code, der in den meisten Skripts in diesem Dokument verwendet wird. Hier wird allerdings "client1" (der Name des Remotecomputers) anstelle von "." (der WMI-Name für den lokalen Computer) zu strComputer zugewiesen. WMI akzeptiert auch IPAdressen 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 ADSIAufgaben 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...ThenAnweisung die Skriptausführung an die Else-Anweisung in Zeile 16 und das Skript zeigt eine Meldung an, dass der Zielcomputer nicht auf den Ping-Befehl geantwortet hat. Das Skript versucht
Seite 48 von 169

dann nicht, die Verbindung zu WMI herzustellen oder die Aufgabe auf dem Remotecomputer auszuführen, da dies zu einem Fehler führen würde. Listing 15 Ping.vbs
1 On Error Resume Next 2 3 strTarget = "192.168.0.1" 'IP address or hostname 4 Set objShell = CreateObject("WScript.Shell") 5 Set objExec = objShell.Exec("ping -n 2 -w 1000 " & strTarget) 6 strPingResults = LCase(objExec.StdOut.ReadAll) 7 If InStr(strPingResults, "reply from") Then 8 WScript.Echo strTarget & " responded to ping." 9 Set objWMIService = GetObject("winmgmts:" _ 10 & "{impersonationLevel=impersonate}!\\" & strTarget & "\root\cimv2") 11 Set colCompSystems = objWMIService.ExecQuery("SELECT * FROM " & _ 12 "Win32_ComputerSystem") 13 For Each objCompSystem In colCompSystems 14 WScript.Echo "Host Name: " & LCase(objCompSystem.Name) 15 Next 16Else 17 WScript.Echo strTarget & " did not respond to ping." 18End If

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>ping.vbs 192.168.0.1 responded to ping. Host Name: server1

Senden von Ping-Anforderungen an mehrere Netzwerkhosts durch Ausführen von "Ping.exe" über ein Skript
Mit einigen zusätzlichen Codezeilen kann ein Skript nacheinander Ping-Anforderungen an mehrere Computer senden, bevor versucht wird, auf diesen eine Aufgabe durchzuführen. Die Computernamen werden in Form eines Arrays an das Skript übergeben, was eine einfache Methode zum Erreichen dieses Ziels darstellt. Die Computernamen können jedoch auch aus einer Textdatei, aus einem Tabellenblatt oder aus einer Datenbank abgerufen bzw. aus einer Active DirectoryOrganisationseinheit 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 IPAdressen von verfügbaren Computern im Netzwerk als Elemente. Der WMI-Dienst akzeptiert sowohl Hostnamen als auch IP-Adressen im Objektpfad von Zeile 12. Ordnen Sie das Array der Variable arrTargets zu. 3.Verwenden einer For Each-Schleife für die Iteration durch die einzelnen Elemente im Array. Ausführen derselben Schritte für die einzelnen Computer, die im vorherigen Beispiel, Ping.vbs, auf dem Remotecomputer durchgeführt wurden.
Seite 49 von 169

Listing 15 Ping-multi.vbs
1 On Error Resume Next 2 3 arrTargets = Array("192.168.0.1", "192.168.0.11", "192.168.0.12", _ 4 "192.168.0.13") 5 6 For Each strTarget In arrTargets 7 Set objShell = CreateObject("WScript.Shell") 8 Set objExec = objShell.Exec("ping -n 2 -w 1000 " & strTarget) 9 strPingResults = LCase(objExec.StdOut.ReadAll) 10 If InStr(strPingResults, "reply from") Then 11 WScript.Echo VbCrLf & strTarget & " responded to ping." 12 Set objWMIService = GetObject("winmgmts:" _ 13 & "{impersonationLevel=impersonate}!\\" & strTarget & "\root\cimv2") 14 Set colCompSystems = objWMIService.ExecQuery("SELECT * FROM " & _ 15 "Win32_ComputerSystem") For Each objCompSystem In colCompSystems 16 17 WScript.Echo "Host Name: " & LCase(objCompSystem.Name) 18 Next 19 Else WScript.Echo VbCrLf & strTarget & " did not respond to ping." 20 21 End If 22Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>ping-multi.vbs 192.168.0.1 responded to ping. Host Name: server1 192.168.0.11 responded to ping. Host Name: client1 192.168.0.12 responded to ping. Host Name: client2 192.168.0.13 did not respond to ping.

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

Tabelle 6 Statuscodes von "Win32_Pingstatus"
Wert Beschreibung

0 11001 11002 11003 11004 11005 11006 11007 11008 11009 11010 11011 11012 11013 11014 11015 11016 11017 11018 11032 11050

Erfolg Puffer zu klein Zielnetzwerk nicht erreichbar Zielhost nicht erreichbar Zielprotokoll nicht erreichbar Zielport nicht erreichbar Keine Ressourcen Unzulässige Option Hardwarefehler Zu großes Paket Anforderungszeitüberschreitung Unzulässige Anforderung Unzulässige Route TTL-Übertragungsüberschreitung Reassemblierung der abgelaufenen Gültigkeitsdauer Unzulässiger Parameter Quelldrosselung Zu große Option Unzulässiges Ziel IPSEC-Aushandlung Allgemeiner Fehler

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

Seite 51 von 169

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

Seite 52 von 169

1 On Error Resume Next 2 3 strComputer = "." 4 strTarget = " client1" 'IP address or hostname 5 Set objWMIService = GetObject("winmgmts:" _ 6 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 7 Set colPings = objWMIService.ExecQuery _ 8 ("Select * From Win32_PingStatus where Address = '" & strTarget & "'") 9 If Err = 0 Then 10 Err.Clear 11 For Each objPing in colPings If Err = 0 Then 12 Err.Clear 13 If objPing.StatusCode = 0 Then 14 Wscript.Echo strTarget & " responded to ping." 15 Wscript.Echo "Responding Address: " & objPing.ProtocolAddress 16 Wscript.Echo "Responding Name: " & objPing.ProtocolAddressResolved 17 Wscript.Echo "Bytes Sent: " & objPing.BufferSize 18 Wscript.Echo "Time: " & objPing.ResponseTime & " ms" 19 Wscript.Echo "TTL: " & objPing.ResponseTimeToLive & " seconds" 20 Else 21 WScript.Echo strTarget & " did not respond to ping." 22 WScript.Echo "Status Code: " & objPing.StatusCode 23 End If 24 Else 25 Err.Clear 26 WScript.Echo "Unable to call Win32_PingStatus on " & strComputer & "." 27 28 End If 29 Next 30Else 31 Err.Clear 32 WScript.Echo "Unable to call Win32_PingStatus on " & strComputer & "." 33End If

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>pingstatus.vbs client1 responded to ping. Responding Address: 192.168.0.11 Responding Name: Bytes Sent: 32 Time: 0 ms TTL: 128 seconds

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

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

ExecPing verwendet denselben Code wie Ping.vbs zum Ausführen des Befehlszeilentools Ping.exe und interpretiert dessen Ausgabe. ExecPing gibt einen booleschen Wert zurück, der "True"(wahr) ist, wenn die Ping-Anforderung die Zeichenfolge "Antwort von" im zurückgegebenen Ausgabetext enthält (d. h. die PingAnforderung wurde erfolgreich gesendet). Andernfalls ist der Wert "False" (falsch) und "Antwort von" somit nicht enthalten.

10.Wenn ExecPing den Wert "True" (wahr) liefert, wird GetName aufgerufen, um den Namen des Zielcomputers aufzurufen. GetName erhält den Namen des Computers von der Eigenschaft Name von Win32_ComputerSystem. Listing 17 Pingstatus-multi.vbs

Seite 54 von 169

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

Teil 4: Skripterstellung für die IP-Adresszuweisung auf Clients
Veröffentlicht: 07. Dez 2004

Im Zentrum von TCP/IP-Netzwerken steht die Zuweisung von IP-Adressen. Wenn in Ihrem Netzwerk DHCP (Dynamic Host Configuration Protocol) eingesetzt wird, verwenden Sie bereits eine Form der Automatisierung zur Verwaltung dieser kritischen Funktion. In den Anfängen der TCP/IP-Netzwerke wurden IP-Adressen von den Administratoren manuell zugewiesen. Als die Netzwerke wuchsen und komplexer wurden, erwies sich diese Vorgehensweise zunehmend als unpraktisch. Bei den ersten Versuchen zur Automatisierung dieser Funktion, wie z. B. RARP (Reverse Address Resolution Protocol) und BOOTP (Bootstrap Protocol), war weiterhin ein erheblicher Umfang an manueller Konfiguration erforderlich. DHCP wurde als Ersatz für diese Protokolle entwickelt und sollte deren Funktionalität auf ein Client-/Serverprotokoll erweitern, mit dessen Hilfe ein IP-Adresspool und die zugehörigen Clientkonfigurationsparameter mit weit geringerem administrativem Eingriff verwaltet werden konnten. Heutzutage stellt DHCP bei den meisten Netzwerken beliebiger Größe das Standardautomatisierungsverfahren für die Verwaltung der IP-Adresskonfiguration dar. Doch selbst wenn in Ihrem Netzwerk DHCP eingesetzt wird, müssen Sie in bestimmten Fällen, z. B. bei Ausschlüssen, möglicherweise dennoch statische IP-Adressen verwenden. Außerdem werden in manchen kleineren oder älteren Netzwerken nur statische IP-Adressen verwendet. DHCP-Server und -Clients arbeiten auch mit anderen TCP/IP-Komponenten auf signifikante Art und Weise zusammen. Beispielsweise aktualisieren DHCP-Clients und -Server bei Verwendung der dynamischen DNS-Aktualisierung DNS-Server mit Änderungen der IP-Adressen, um sicherzustellen, dass die Namensauflösung unverändert erhalten bleibt, während IP-Adressleases freigegeben und erneuert werden. In diesem Fall können Sie – wie bei den meisten TCP/IP-Einstellungen – Änderungen auf einem lokalen Computer über die Windows-Benutzeroberfläche manuell vornehmen. Wie Abbildung 9 zeigt, können Sie DHCP-Einstellungen auf der Registerkarte IP-Einstellungen des Dialogfelds Erweiterte TCP/IP-Einstellungen konfigurieren.

Seite 56 von 169

Abbildung 9 Konfigurieren der DHCP-Einstellung über die Windows-Benutzeroberfläche Bild maximieren Wie weiter oben erwähnt, können Sie mithilfe des Befehlszeilentools Ipconfig.exe DHCPClienteinstellungen abrufen, Leases freigeben und erneuern und andere DHCP-Clientaufgaben ausführen. Im Zusammenhang mit Remoteclients und mehreren Clients sowie für komplexe lokale Aufgaben, bei denen manuelle Fehler möglich sind, kann die Skripterstellung jedoch eine effizientere Alternative darstellen. In diesem Abschnitt wird erläutert, wie Skripts für die Verwaltung der IP-Adresszuweisung mithilfe von DHCP- und statischer Adressierung erstellt werden. Dieses Dokument behandelt nur die Verfahren zum Konfigurieren von Clients, obwohl die Änderungen an Clients in manchen Fällen auch Änderungen an den DHCP-Servern erfordern. Die Verwaltung von DHCP-Servern wird in diesem Dokument nicht behandelt.

Verwalten von DHCP auf Clients
Obwohl es sich bei DHCP bereits um eine Form der Automatisierung handelt, können Sie die Konfiguration von Clientgruppen mithilfe von Skripts automatisieren, damit DHCP genutzt wird. Über die Eigenschaften und Methoden der WMI-Klasse Win32_NetworkAdapterConfiguration können Sie DHCP-Einstellungen auflisten, DHCP aktivieren oder deaktivieren und Leases erneuern oder freigeben. In Tabelle 9 werden die Win32_NetworkAdapterConfiguration-Eigenschaften beschrieben, die für die IP-Adresszuweisung verwendet werden können. Tabelle 9 "Win32_NetworkAdapterConfiguration"-Eigenschaften für die IP-Adresszuweisung
Eigenschaft Typ Beschreibung

DefaultIPGateway

ZeichenfolgenarrayArray von IP-Adressen der Standardgateways, die vom
Seite 57 von 169

Computersystem verwendet werden. DHCPEnabled Boolean-Wert TRUE gibt an, dass der DHCP-Server dem Computersystem beim Herstellen einer Netzwerkverbindung eine IP-Adresse automatisch zuweist. Datum und Uhrzeit des Ablaufs für eine geleaste IP-Adresse, die dem Computer vom DHCP-Server zugewiesen wurde. Datum und Uhrzeit, an bzw. zu dem die Lease für die IPAdresse bezogen wurde, die dem Computer vom DHCPServer zugewiesen wurde. IP-Adresse des DHCP-Servers. 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. 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. Array aller IP-Adressen, die dem aktuellen Netzwerkadapter zugeordnet sind. Array aller Subnetzmasken, die dem aktuellen Netzwerkadapter zugeordnet sind.

DHCPLeaseExpires DATETIME DHCPLeaseObtainedDATETIME

DHCPServer

Zeichenfolge

GatewayCostMetric Uint16

IPConnectionMetric Uint32 (Neu bei Windows XP) IPAddress IPSubnet Zeichenfolge Zeichenfolge

Alle Eigenschaften in der vorstehenden Tabelle sind schreibgeschützt. Bei den Typen uint16 und uint32 handelt es sich um ganze Zahlen ohne Vorzeichen, die von stark typisierten Programmiersprachen verwendet werden; VBScript behandelt sie effektiv als ganze Zahlen. In Tabelle 10 werden die Win32_NetworkAdapterConfiguration-Methoden beschrieben, die für die IP-Adresszuweisung verwendet werden können. Tabelle 10 "Win32_NetworkAdapterConfiguration"-Methoden für die IP-Adresszuweisung
Methode Parameter Beschreibung

EnableDHCP

Kein

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

EnableStatic

IPAddress – Array von Aktiviert die statische TCP/IP-Adressierung für den Zeichenfolgen Zielnetzwerkadapter. Infolgedessen wird DHCP für diesen Netzwerkadapter deaktiviert. SubnetMask – Array von Zeichenfolgen Kein Gibt die an einen bestimmten DHCP-Netzwerkadapter gebundene IP-Adresse frei.
Seite 58 von 169

ReleaseDHCPLease

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/IPNetzwerkadapter, gibt. ReleaseDHCPLeaseAllKein Statische Methode. Gibt die an alle DHCPNetzwerkadapter 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 DHCPNetzwerkadaptern. 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. Statische Methode. Erneuert die IP-Adressen auf allen DHCP-Netzwerkadaptern.

RenewDHCPLeaseAll Kein SetGateways DefaultIPGateway – Array von Zeichenfolgen

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 GatewayCostMetric – Netzwerkadapter im statischen IP-Modus befindet. unit16

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

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

Anzeigen von DHCP-Clientinformationen
Beim Arbeiten mit einer Technologie wie DHCP besteht der erste Schritt der Skripterstellung normalerweise darin, die aktuelle Konfiguration der relevanten Einstellungen zu ermitteln. Dieser Ansatz wird im vorliegenden Abschnitt und den folgenden Abschnitten behandelt. Win32_NetworkAdapterConfiguration stellt Eigenschaften auf Adapterbasis bereit, die zeigen, ob DHCP aktiviert ist: die IP-Adresse des DHCP-Servers; das Datum und die Uhrzeit, an dem bzw. zu der die Lease bezogen wurde und abläuft; die Client-IP-Adressen und -Subnetzmasken (Netzwerkadapter können jeweils mehr als eine davon aufweisen). Weil WMI die Datums- und Uhrzeitwerte für die Lease in einem schwer lesbaren Format zurückgibt, müssen diese Daten für die Anzeige in ein benutzerfreundlicheres Format konvertiert werden.
Seite 59 von 169

Das folgende Skript zeigt die IP-Adresszuweisungseinstellungen für einen Netzwerkclient an und verwendet dazu die folgenden Eigenschaften der Klasse Win32_NetworkAdapterConfiguration: DHCPEnabled, DHCPServer, DHCPLeaseObtained, DHCPLeaseExpires, IPAddress und IPSubnet. Die Einstellungen für DHCPServer, DHCPLeaseObtained und DHCPLeaseExpires werden nur angezeigt, wenn DHCP aktiviert ist. Statt die Einstellungen mithilfe der WSH WScript.Echo-Methode direkt anzuzeigen, weist sie das Skript einer Zeichenfolge zu und zeigt sie nach ihrer Erfassung an. Nachdem das Skript mit einer If ... Then-Bedingung überprüft hat, ob der Wert der DHCPEnabled-Eigenschaft True lautet, zeigt das Skript die untergeordneten Einstellungen an. Zwei der von Dhcpsettings.vbs angezeigten Einstellungen, DHCPLeaseObtained und DHCPLeaseExpires, werden als DATETIME-Wert zurückgegeben. Der angezeigte unformatierte Wert sieht folgendermaßen aus: 20021201000230.000000+000 Die ersten vier Ziffern stehen für das Jahr; die jeweils folgenden beiden Ziffern stehen für den Monat, den Tag, Stunden, Minuten, Sekunden usw. Sie können die Bedeutung herausfinden – obwohl dies u. U. einige Zeit in Anspruch nimmt. Unter Windows XP und Windows Server 2003 wurde ein neues SwbemDateTime-Objekt zur WMISkripterstellungs-API hinzugefügt. Dieses Objekt erleichtert die Analyse und Konvertierung von DATETIME-Werten, wenn auf allen Clients Windows XP und Windows Server 2003 ausgeführt wird. Falls diese Betriebssysteme jedoch nicht auf allen Netzwerkhosts ausgeführt werden, besteht eine praktischere, weniger komplizierte Lösung darin, DATETIME-Werte mithilfe der Zeichenfolgenverarbeitungsfunktionen von VBScript in ein lesbares Format zu konvertieren. Zum Konvertieren des DATETIME-Wertes in ein lesbareres Format ruft Dhcpsettings in diesem Skript die Funktion WMIDateToString() auf und übergibt ihr den Wert als Parameter. Die Funktion transformiert den Wert mithilfe der integrierten VBScript-Zeichenfolgenfunktionen Mid() und Left(). Anschließend ruft sie die VBScript-Funktion CDate() auf, um den Variantenwert (den Typ aller VBScript-Variablen) in den Datentyp Date umzuwandeln, und gibt das formatierte Datum an den Hauptteil des Skripts zurück. Weitere Informationen zum WMI-Format DATETIME finden Sie unter "Festlegen der Uhrzeit auf einem Computer mithilfe von WMI" weiter unten in diesem Dokument. Schritte zur Skripterstellung Das Skript in Listing 19 zeigt die DHCP-Einstellungen für die einzelnen Netzwerkadapterkonfigurationen auf einem Computer an. 1.Erstellen Sie eine Variable, und weisen Sie ihr den Namen eines Computers zu. Geben Sie für den lokalen Computer einfach "." als Computernamen an. Wenn Sie dieses Skript remote ausführen möchten, geben Sie den Namen eines verfügbaren Remotecomputers im Netzwerk an, für den Sie Administratorrechte besitzen. Der Name kann aus einem Hostnamen oder einer IP-Adresse bestehen. 2.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2 auf dem angegebenen Computer, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest.
Seite 60 von 169

3.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird. Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist. 4.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben aus. 5.Rufen Sie die Get-Methode für die Klasse objWMIService auf, um einen Objektverweis auf die Instanz von Win32_NetworkAdapter zu erhalten, deren DeviceID-Eigenschaft gleich der IndexEigenschaft 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 IPAdresszuweisung 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 WMIDateToStringFunktion. Diese Funktion konvertiert das von den beiden Eigenschaften zurückgegebene DATETIME-Format in lesbarere Zeichenfolgen. 11.Verketten Sie die Variablen zu einer langen Zeichenfolge, und zeigen Sie diese mit WScript.Echo an. Listing 19 Dhcpsettings.vbs

Seite 61 von 169

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

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>dhcpsettings.vbs DHCP Settings Host Name: client1 Network Adapter 1 3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet
Seite 62 von 169

Scheduler Miniport DHCP Enabled: True DHCP Server: 192.168.0.1 DHCP Lease Obtained: 5/13/2004 6:34:24 PM DHCP Lease Expires: 5/23/2004 9:34:24 PM

Aktivieren von DHCP auf einem Client
Das Automatisieren der Konfiguration von DHCP auf Clients kann sinnvoll sein, wenn ein Remoteclient oder eine Gruppe von Remoteclients von der Verwendung einer statischen IP-Adresse auf automatisches Beziehen der IP-Adresse konvertiert werden muss. Je nach Konfiguration der DHCP- und DNS-Server kann es dem Client durch das Aktivieren von DHCP auch ermöglicht werden, die Adressen für DNS-Server und Standardgateway vom DHCP-Server zu beziehen. Das folgende Skript zeigt die Verwendung der Win32_NetworkAdapterConfiguration-Methode EnableDHCP, die DHCP für den Dienst auf dem Netzwerkadapter eines Clients aktiviert. Die Methode verwendet keine Parameter. Bei einem Client mit mehreren Netzwerkadaptern, wie z. B. einem zweifach vernetzten Computer, können Sie das Skript so anpassen, dass nur ein bestimmter Adapter aktiviert wird. Schritte zur Skripterstellung Vorsicht Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen. Das Skript in Listing 20 aktiviert DHCP für jede Netzwerkadapterkonfiguration auf einem Computer. 1.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2 auf dem angegebenen Computer, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 2.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird. Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist. 3.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben aus. 4.Zeigen Sie die Indexnummer und Beschreibung für den Netzwerkadapter an. 5.Überprüfen Sie, ob DHCP bereits aktiviert ist. 6.Falls DHCP nicht aktiviert ist, rufen Sie die EnableDHCP-Methode der Klasse Win32_NetworkAdapterConfiguration auf. 7.Wenn die EnableDHCP-Methode

Seite 63 von 169

• •

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

8.Falls DHCP bereits aktiviert ist, zeigen Sie eine entsprechende Meldung mit der IP-Adresse des DHCP-Servers an. Listing 20 Dhcp-enable.vbs
1 On Error Resume Next 2 3 strComputer = "." 4 Set objWMIService = GetObject("winmgmts:" _ 5 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 6 Set colNicConfigs = objWMIService.ExecQuery _ 7 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 8 9 For Each objNicConfig In colNicConfigs 10 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index & _ 11 VbCrLf & " " & objNicConfig.Description & VbCrLf 12 If Not objNicConfig.DHCPEnabled Then 13 WScript.Echo " Enabling DHCP ..." 14 intReturn = objNicConfig.EnableDHCP 15 If intReturn = 0 Then 16 strSuccess = " DHCP enabled." 17 Else 18 strSuccess = " Unable to enable DHCP." 19 End If 20 WScript.Echo VbCrLf & strSuccess 21 22 Else 23 WScript.Echo " DHCP already enabled" & VbCrLf & _ 24 " DHCP Server: " & objNicConfig.DHCPServer 25 End If 26Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts\netcli>dhcp-enable.vbs Network Adapter 1 3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet Scheduler Miniport Enabling DHCP ... DHCP enabled.

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

Seite 64 von 169

aushandeln. Sie können Leases aber auch manuell oder programmgesteuert freigeben oder erneuern. Zu diesem Zweck stellt beispielsweise das Befehlszeilentool Ipconfig.exe Parameter bereit. Die Klasse Win32_NetworkAdapterConfiguration enthält vier Methoden auf Adapterbasis, die Ihnen die Verwaltung von DHCP-Leases für die Klasseninstanzen ermöglichen: ReleaseDHCPLease, ReleaseDHCPLeaseAll, RenewDHCPLease und RenewDHCPLeaseAll. Sie können alle Leases auch auf einfache Weise freigeben oder erneuern, indem Sie eine Iteration durch die Auflistung von Netzwerkadapterkonfigurationen durchführen und dabei jeweils ReleaseDHCPLease bzw. RenewDHCPLease verwenden.

Freigeben von DHCP-Leases
Durch die Freigabe einer DHCP-Lease für einen Netzwerkadapter wird dieser vom Netzwerk getrennt und die IP-Adresse für die Zuweisung an andere Hosts freigegeben. Der Befehl ipconfig.exe/release führt diese Aufgabe auf allen Netzwerkadaptern oder auf einem bestimmten Adapter aus. Eine Situation, in der eine DHCP-Lease auf einem Client möglicherweise freigegeben werden soll, ist die Reservierung eines Bereichs (von IP-Adressen) auf einem DHCP-Server für permanente Leasezuweisung. Einige der im Bereich reservierten Adressen werden eventuell bereits von vorhandenen Clients verwendet, die in diesen Bereich nicht einbezogen werden. Durch das Hinzufügen einer IP-Adresse zu einem Bereich auf dem DHCP-Server wird die Adresse auf dem Client, in dem sie momentan enthalten ist, noch nicht automatisch freigegeben. Das folgende Skript zeigt eine Möglichkeit zur Behebung dieses Problems. Es führt eine Iteration durch die Auflistung von Netzwerkadapterkonfigurationen durch und verwendet die ReleaseDHCPLease-Methode, um die Lease für jede der Konfigurationen freizugeben. Sie können dieses Skript für die Freigabe der Lease auf einem Remoteclient problemlos anpassen, indem Sie die folgende Zeile ändern:
strComputer = "."

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

Wie bei allen WMI-Remotevorgängen muss der Benutzer über die entsprechenden Administratorrechte auf dem Remotecomputer verfügen. Schritte zur Skripterstellung Vorsicht Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen. Das Skript in Listing 21 zeigt zunächst die DHCP-Einstellungen für die einzelnen Netzwerkadapter an. Anschließend überprüft es bei jedem Netzwerkadapter, ob DHCP aktiviert ist. Wenn dies zutrifft, gibt es die DHCP-Lease frei. 1.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2 auf dem angegebenen Computer, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 2.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled =
Seite 65 von 169

True" gefiltert wird. Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist. 3.Zeigen Sie den Text "Settings before releasing lease" an. 4.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Schritte aus. 5.Zeigen Sie die Indexnummer, die Beschreibung und die Mitteilung an, ob DHCP für jeden Adapter aktiviert ist. 6.Wenn DHCP aktiviert ist, rufen Sie die Daten ab, an denen die DHCP-Lease bezogen wurde und an denen sie ablaufen wird. Konvertieren Sie diese Daten in ein lesbares Format, indem Sie die WMIDateToString-Funktion aufrufen. Zeigen Sie die IP-Adresse des DHCP-Servers und die Leasedaten an. 7.Rufen Sie die ReleaseDHCPLease-Methode der Klasse Win32_NetworkAdapterConfiguration auf, und warten Sie dann 5 Sekunden, bis der Freigabeprozess beendet ist. Wichtig Wenn ein Client eine IP-Adresse über DHCP bezieht, wird er durch die Freigabe der Lease möglicherweise vom Netzwerk getrennt. 8.Abhängig von Rückgabewert der ReleaseDHCP-Methode machen Sie folgende Ausgaben:
• • •

0 – zeigen Sie eine Meldung an, dass die Lease freigegeben wurde. 1 – zeigen Sie eine Meldung an, dass die Lease freigegeben wurde und der Computer neu gestartet werden muss. Einen Wert größer als 1 – zeigen Sie eine Meldung an, dass die Lease nicht freigegeben werden kann.

9.Fragen Sie die Klasse Win32_NetworkAdapterConfiguration erneut ab, und filtern Sie sie erneut nur nach IP-Adaptern. Diese erneute Abfrage ist erforderlich, weil jede Abfrage einen Snapshot der bestehenden Einstellungen zum Zeitpunkt ihrer Ausführung zurückgibt und nicht automatisch aktualisiert wird, wenn die Einstellungen anschließend geändert werden. 10.Zeigen Sie die gleichen DHCP-Einstellungen wie zuvor erneut an. 11.Die WMIDateToString-Funktion verwendet einen Wert im WMI-Format DATETIME und konvertiert ihn in eine Zeichenfolge, die Datum und Uhrzeit in einem lesbareren Format darstellt. Listing 21 Dhcp-releaselease.vbs

Seite 66 von 169

1 On Error Resume Next 2 3 strComputer = "." 4 Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 5 6 Set colNicConfigs = objWMIService.ExecQuery _ ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 7 8 9 WScript.Echo VbCrLf & "Settings before releasing lease" 10 11 For Each objNicConfig In colNicConfigs 12 blnDHCPEnabled = objNicConfig.DHCPEnabled 13 14 WScript.Echo VbCrLf & _ 15 " Network Adapter " & objNicConfig.Index & VbCrLf & _ 16 " " & objNicConfig.Description & VbCrLf & VbCrLf & _ 17 " DHCP Enabled: " & blnDHCPEnabled 18 19 If blnDHCPEnabled Then 20 21 dtmLeaseObtainedDate = objNicConfig.DHCPLeaseObtained 22 strDHCPLeaseObtained = WMIDateToString(dtmLeaseObtainedDate) 23 dtmLeaseExpiresDate = objNicConfig.DHCPLeaseExpires 24 strDHCPLeaseExpires = WMIDateToString(dtmLeaseExpiresDate) 25 26 WScript.Echo " DHCP Server: " & objNicConfig.DHCPServer & _ 27 VbCrLf & " DHCP Lease Obtained: " & strDHCPLeaseObtained & _ 28 VbCrLf & " DHCP Lease Expires: " & strDHCPLeaseExpires 29 30 intReleaseReturn = objNicConfig.ReleaseDHCPLease 31 WScript.Sleep 5000 32 33 If (intReleaseReturn = 0 Or intReleaseReturn = 1) Then 34 strSuccess = " DHCP lease released." 35 If intReleaseReturn = 1 Then 36 strSuccess = strSuccess & " Must reboot machine." 37 End If 38 Else 39 strSuccess = " Unable to release DHCP lease." 40 End If 41 42 WScript.Echo VbCrLf & strSuccess 43 44 End If 45 46 47 Next 48 49 Set colNicConfigs = objWMIService.ExecQuery _ 50 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 51 52 WScript.Echo VbCrLf & "Settings after releasing lease" 53 54 For Each objNicConfig In colNicConfigs 55 blnDHCPEnabled = objNicConfig.DHCPEnabled 56 57 WScript.Echo VbCrLf & _ 58 " Network Adapter " & objNicConfig.Index & VbCrLf & _ 59 " " & objNicConfig.Description & VbCrLf & VbCrLf & _ 60 " DHCP Enabled: " & blnDHCPEnabled 61 62 If blnDHCPEnabled Then 63 64 Seite 67 von 169 dtmLeaseObtainedDate = objNicConfig.DHCPLeaseObtained 65 strDHCPLeaseObtained = WMIDateToString(dtmLeaseObtainedDate) 66 dtmLeaseExpiresDate = objNicConfig.DHCPLeaseExpires 67 strDHCPLeaseExpires = WMIDateToString(dtmLeaseExpiresDate) 68

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 DHCPServern können DNS-Server, die die dynamische DNS-Aktualisierung verwenden, nun viele Aspekte der Namensauflösung automatisieren, die zuvor durch manuell konfigurierte HOSTSDateien 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 WindowsBenutzeroberfläche Bild maximieren Das Befehlszeilentool Ipconfig.exe kann DNS-Clienteinstellungen ebenfalls abrufen und Aufgaben wie das Leeren des DNS-Clientauflösungscaches ausführen. Es kann jedoch vorkommen, dass Sie DNS-Clients remote oder in Gruppen konfigurieren müssen – beispielsweise, wenn Sie alte DNS-Server durch neue ersetzen, Änderungen an Servern vornehmen oder Subnetzanordnungen ändern. Wenn dann jeder einzelne Host manuell konfiguriert wird, beansprucht dieser Vorgang unnötig viel Verwaltungszeit. In derartigen Fällen stellt WMI wie bei anderen TCP/IP-Protokollen Methoden und Eigenschaften der Klasse Win32_NetworkAdapterConfiguration bereit, mit denen sich die DNS-Clientkonfiguration automatisieren lässt.
Seite 68 von 169

Beachten Sie, dass die Klasse Win32_NetworkAdapterConfiguration keine Eigenschaft oder Methode bereitstellt, die der Einstellung DNS-Serveradresse automatisch beziehen explizit entspricht. Die DNSServerSearchOrder-Eigenschaft zeigt die IP-Adressen aller auf dem Client konfigurierten DNS-Server an – unabhängig davon, ob diese lokal festgelegt oder vom DHCPServer 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 DHCPServer 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 DNSServeranbieter würden den Rahmen dieses Dokumentes jedoch überschreiten. Das Befehlszeilentool Dnscmd.exe stellt umfangreiche Optionen für die DNSServerkonfiguration 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 DNSDomänensuffixe und der DNS-Registrierungseinstellungen

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

Seite 69 von 169

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

DNSDomain

Zeichenfolge

Der Organisationsname, gefolgt von einem Punkt und einer Erweiterung, die den Typ der Organisation angibt, z. B. microsoft.com. Der Name kann aus einer beliebigen Kombination der Buchstaben A–Z, der Ziffern 0–9 sowie des Bindestrichs (-) bestehen; dazu kommt der Punkt (.) als Trennzeichen. Beispiel: "microsoft.com"

DNSDomainSuffixSearchOrder Zeichenfolge

Durch Leerzeichen getrennte Liste der DNS-Domänensuffixe, die während der Namensauflösung an Hostnamen angehängt werden. Wenn ein vollqualifizierter Domänenname (FQDN) von einem Hostnamen aufgelöst wird, wird der lokale Domänenname angehängt. Falls der Domänenname nicht angehängt werden kann, werden anhand der
Seite 70 von 169

Domänensuffixliste zusätzliche FQDNs in der aufgelisteten Reihenfolge erstellt und die DNS-Server für jeden einzelnen abgefragt. Beispiel: "samples.microsoft.com example.microsoft.com" DNSEnabledForWINSResolutionBoolean-Wert TRUE gibt an, dass DNS für die Namensauflösung über WINS (Windows Internet Name Service) aktiviert ist. Wenn der Name mithilfe von DNS nicht aufgelöst werden kann, wird die Anforderung an WINS weitergeleitet. 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 IPAdressen 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 MicrosoftNetzwerkcomputername; der Netzwerkadministrator kann jedoch einen anderen Hostnamen zuweisen, ohne den Computernamen zu ändern. Beispiel: "corpdns" DNSServerSearchOrder ZeichenfolgenarrayArray von Server-IP-Adressen, die für DNS-Serverabfragen verwendet werden. TRUE gibt an, dass die IP-Adressen für diese Verbindung in DNS – zusätzlich zu ihrer Registrierung unter dem vollständigen DNS-Namen des Computers – unter dem Domänennamen der Verbindung registriert sind. Der Domänenname der Verbindung wird mithilfe der SetDNSDomain()Methode festgelegt oder durch DHCP zugewiesen. Der registrierte Name ist der Hostname des Computers mit dem angehängten Domänennamen. Diese Eigenschaft ist neu bei Windows XP.
Seite 71 von 169

DNSHostName

Zeichenfolge

DomainDNSRegistrationEnabled Boolean-Wert

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 DNSName des Computers wird auf der Registerkarte Netzwerkidentifikation der Anwendung System in der Systemsteuerung angezeigt. Diese Eigenschaft ist neu bei Windows XP.

Alle Eigenschaften in der vorstehenden Tabelle sind schreibgeschützt. In Tabelle 14 werden die Win32_NetworkAdapterConfiguration-Methoden zum Erstellen von Skripts für die DNS-Clientkonfiguration beschrieben. Tabelle 14 DNS-Methoden von "Win32_NetworkAdapterConfiguration"
Methode Parameter Beschreibung

EnableDNS

DNSHostName – Zeichenfolge Aktiviert DNS auf dem Client. DNSDomain – Zeichenfolge DNSServerSearchOrder – Array von Zeichenfolgen DNSDomainSuffixSearchOrder – Zeichenfolge 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.

SetDNSDomain

SetDNSServerSearchOrder DNSServerSearchOrder – Array Verwendet ein Array von von Zeichenfolgen Zeichenfolgenelementen zum Festlegen der Suchreihenfolge für Server. Wenn Sie alle DNSServer aus der Suchreihenfolge entfernen möchten, müssen Sie Null statt einer leeren Zeichenfolge verwenden. Dieser instanzabhängige Methodenaufruf gilt auf Adapterbasis. Nachdem statische DNS-Server angegeben wurden, um die Verwendung von DHCP statt statischer DNS-Server einzuleiten, können Sie die Methode aufrufen, ohne Parameter für "in" angeben zu müssen. Unter Windows 2000 gilt die Einstellung für den
Seite 72 von 169

Zieladapter. Unter Windows NT 4.0 ist die Einstellung global. SetDNSSuffixSearchOrder DNSDomainSuffixSearchOrder Statische Methode. Verwendet – Zeichenfolge ein Array von Zeichenfolgenelementen zum Festlegen der Suchreihenfolge für Suffixe. Nur unter Windows NT: Dieser instanzabhängige Methodenaufruf gilt für alle Adapter.

SetDynamicDNSRegistrationFullDNSRegistrationEnabled – Gibt den Modus der dynamischen Boolean-Wert DNS-Registrierung von IPDomainDNSRegistrationEnabledAdressen für den IP-Adapter an. – Boolean-Wert Alle Methoden in der vorstehenden Tabelle geben eine positive ganze Zahl zurück:
• • •

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

Das folgende Skript, Dnssettings.vbs, gibt die DNS-Einstellungen aus, die von der Klasse Win32_NetworkAdapterConfiguration bereitgestellt werden. In diesem Fall wird die DNSEnabledForWINSResolution-Eigenschaft, die nur bei Verwendung der NetBIOSNamensauflö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 WMINamespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 3.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled
Seite 73 von 169

= True" gefiltert wird. Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist. 4.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben aus. 5.Weisen Sie die Win32_NetworkAdapterConfiguration-Eigenschaften DNSHostName, Index, Description, DNSDomain, DomainDNSRegistrationEnabled und FullDNSRegistrationEnabled Variablen zu. 6.Führen Sie eine Iteration durch die von den Eigenschaften DNSDomainSuffixSearchOrder und DNSServerSearchOrder zurückgegebenen Arrays durch, und konvertieren Sie sie in formatierte Zeichenfolgen. 7.Verketten Sie die Variablen und Bezeichnungen in eine Zeichenfolge. Verketten Sie bei jeder Iteration durch einen anderen Netzwerkadapter die zugehörigen Zeichenfolgen mit der ursprünglichen Zeichenfolge. 8.Zeigen Sie den Hostnamen und die Einstellungen für jeden Adapter an. Listing 28 Dnssettings.vbs

Seite 74 von 169

1 On Error Resume Next 2 3 strComputer = "." 4 Set objWMIService = GetObject("winmgmts:" _ 5 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 6 Set colNicConfigs = objWMIService.ExecQuery _ 7 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 8 9 For Each objNicConfig In colNicConfigs 10 strDNSSuffixSO = "" 11 strDNSServerSO = "" 12 strDNSHostName = objNicConfig.DNSHostName 13 strIndex = objNicConfig.Index 14 strDescription = objNicConfig.Description 15 strDNSDomain = objNicConfig.DNSDomain 16 strDNSSuffixSO = "" 17 If Not IsNull(objNicConfig.DNSDomainSuffixSearchOrder) Then 18 For Each strDNSSuffix In objNicConfig.DNSDomainSuffixSearchOrder 19 strDNSSuffixSO = strDNSSuffixSO & VbCrLf & String(37, " ") & _ 20 strDNSSuffix 21 Next 22 End If 23 strDNSServerSO = "" 24 If Not IsNull(objNicConfig.DNSServerSearchOrder) Then 25 For Each strDNSServer In objNicConfig.DNSServerSearchOrder 26 strDNSServerSO = strDNSServerSO & VbCrLf & String(37, " ") & _ 27 strDNSServer 28 Next 29 End If 30 strDomainDNSRegistrationEnabled = _ 31 objNicConfig.DomainDNSRegistrationEnabled 32 strFullDNSRegistrationEnabled = objNicConfig.FullDNSRegistrationEnabled 33 strDNSSettings = strDNSSettings & VbCrLf & VbCrLf & _ 34 " Network Adapter " & strIndex & VbCrLf & _ 35 " " & strDescription & VbCrLf & VbCrLf & _ 36 " DNS Domain: " & strDNSDomain & VbCrLf & _ 37 " DNS Domain Suffix Search Order:" & strDNSSuffixSO & VbCrLf & _ 38 " DNS Server Search Order:" & strDNSServerSO & VbCrLf & _ 39 " Domain DNS Registration Enabled: " & _ 40 strDomainDNSRegistrationEnabled & VbCrLf & _ 41 " Full DNS Registration Enabled: " & _ 42 strFullDNSRegistrationEnabled 43 44Next 46 47 WScript.Echo VbCrLf & "DNS Settings" & VbCrLf & VbCrLf & _ 48 "Host Name: " & strDNSHostName & strDNSSettings

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>dnssettings.vbs DNS Settings Host Name: client1 Network Adapter 1 3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet Scheduler Miniport
Seite 75 von 169

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

Aktivieren von DNS
Für Situationen, in denen DNS auf Hosts aktiviert werden muss, z. B. bei der Aktualisierung eines Netzwerks von einem anderen Namensauflösungssystem wie WINS, stellt die Klasse Win32_NetworkAdapterConfiguration die EnableDNS()-Methode bereit. Die Methode verwendet vier optionale Parameter: DNSHostName, DNSDomain, DNSServerSearchOrder und DNSDomainSuffixSearchOrder. Die Datentypen der ersten beiden sowie des letzten Parameters sind Zeichenfolgen; DNSServerSearchOrder ist ein Array von Zeichenfolgen. Die Klasse Win32_ComputerSystem umfasst eine Rename()-Methode, mit der Sie auch den Computernamen ändern können. Zur Verwendung der Rename()-Methode müssen Sie der lokalen Gruppe Administratoren angehören. Beachten Sie, dass mit dieser Methode keine Remotehosts umbenannt werden können, die einer Domäne angehören. Diese Klasse stellt außerdem die Methoden JoinDomainOrWorkgroup() und UnjoinDomainOrWorkgroup() bereit. Alle drei Methoden sind neu bei Windows XP und Windows Server 2003. Schritte zur Skripterstellung Vorsicht Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen. Das Skript in Listing 29 aktiviert DNS für alle Netzwerkadapter auf einem Computer. Dabei wird der Hostname auf client1, die DNS-Domäne auf fabrikam.com, die Suchreihenfolge für DNS-Server als 192.168.0.1 und 192.168.0.2 sowie die Suffixe für die DNS-Suchreihenfolge als fabrikam.com und na.fabrikam.com konfiguriert. Führen Sie dazu die folgenden Schritte im Skript aus: 1.Erstellen Sie Variablen zur Angabe des Computernamens und der Parameter, der/die an die EnableWINS-Methode übergeben werden soll(en). 2.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMINamespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 3.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, die nach den Instanzen gefiltert wird, bei denen IP aktiviert ist.
Seite 76 von 169

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

Seite 77 von 169

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

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>dns-enable.vbs DNS Host Name: client1 Attempting to enable DNS Unable to enable DNS.
Seite 78 von 169

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

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

Ersetzen der gesamten Liste mit der Suchreihenfolge für DNS-Server Ersetzen eines DNS-Servers durch einen anderen DNS-Server Hinzufügen eines DNS-Servers am Ende oder Anfang der Suchreihenfolge

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

Seite 79 von 169

Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen. Bei jedem Netzwerkadapter ersetzt das Skript in Listing 30 die aktuelle Suchreihenfolge für DNS-Server durch eine neue Liste. 1.Erstellen Sie eine Variable zur Angabe des Computernamens. 2.Weisen Sie IP-Adressen einem Array zu, das die neue Suchreihenfolge für DNS-Server darstellt. Beachten Sie, dass Sie zum Entfernen aller DNS-Server aus der Suchreihenfolge den Wert Null statt einer leeren Zeichenfolge verwenden müssen. 3.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMINamespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 4.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird. Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist. 5.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben aus. 6.Zeigen Sie den Index und die aktuelle Liste mit der Suchreihenfolge für DNS-Server des Netzwerkadapters an. 7.Rufen Sie die SetDNSServerSearchOrder-Methode der Klasse Win32_NetworkAdapterConfiguration auf, und übergeben Sie ihr als Parameter das Array von IP-Adressen, das die neue Suchreihenfolge für DNS-Server darstellt. 8.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine Erfolgsnachricht oder eine Fehlermeldung an. 9.Fragen Sie die Klasse Win32_NetworkAdapterConfiguration erneut ab, und zeigen Sie die neue Suchreihenfolge für DNS-Server an. Listing 30 Dns-replaceserverlist.vbs

Seite 80 von 169

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

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>dns-replaceserverlist.vbs Computer: . Network Adapter 1 DNS Server Search Order - Before: 192.168.0.1 Replaced DNS server search order list. -------------------------------------------------------------------------------Network Adapter 1
Seite 81 von 169

DNS Server Search Order - After: 192.168.0.1 192.168.0.2

Ersetzen eines DNS-Servers durch einen anderen
Wenn nur ein DNS-Server geändert wurde und die anderen DNS-Server weiterhin gültig sind, können Sie die IP-Adresse des alten Servers einfach durch die IP-Adresse des neuen Servers ersetzen und die Adresse an derselben Position in der Suchreihenfolge beibehalten. Dies wird möglicherweise erforderlich, wenn ein auf alter Hardware ausgeführter DNS-Server durch einen neuen Computer ersetzt wird. Nach Abschluss der Änderung müssen die Clients des ersetzten Servers mit der IP-Adresse des neuen Servers neu konfiguriert werden. Schritte zur Skripterstellung Vorsicht Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen. Das Skript in Listing 31 überprüft, ob sich die IP-Adresse eines bestimmten Servers in der Liste mit der Suchreihenfolge für DNS-Server (in einem Zeichenfolgenarray der DNSServerSearchOrder-Eigenschaft enthalten) für jede Netzwerkadapterkonfiguration auf einem Computer befindet. Wird die IP-Adresse gefunden, wird sie durch das Skript entfernt und stattdessen die IP-Adresse des neuen Servers mithilfe der SetDNSServerSearchOrder-Methode hinzugefügt. 1.Erstellen Sie eine Variable zur Angabe des Computernamens. 2.Weisen Sie IP-Adressen den Variablen zu, die für den alten zu ersetzenden DNS-Server und den neuen Server stehen. 3.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMINamespace 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 ForSchleife durch. Wenn die zu ersetzende IP-Adresse gefunden wird, ersetzen Sie sie durch die neue IP-Adresse, und setzen Sie ein boolesches Flag.
Seite 82 von 169

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

Seite 83 von 169

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

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>dns-replaceserver.vbs
Seite 84 von 169

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

Hinzufügen eines DNS-Servers am Ende der Suchreihenfolge
Statt in der Liste mit der Suchreihenfolge für DNS-Server die IP-Adresse eines alten DNSServers 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 WMINamespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 4.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE
Seite 85 von 169

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

Seite 86 von 169

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

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>dns-addserver-end.vbs Computer: . Network Adapter 1 DNS Server Search Order - Before:
Seite 87 von 169

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

Hinzufügen eines DNS-Servers am Anfang der Suchreihenfolge
Wenn Sie einen neuen DNS-Server am Anfang der Liste mit der Suchreihenfolge hinzufügen möchten, sind die dazu erforderlichen Schritte im folgenden Skript enthalten. In diesem Fall besteht die wichtigste Änderung darin, die eine Codezeile, mit der eine neue IP-Adresse am Ende des Arrays in Dns-addserver-end.vbs (Zeile 21) hinzugefügt wird, durch vier Zeilen zu ersetzen, die jedes Element im Array nach unten verschieben und die neue IP-Adresse am Anfang hinzuzufügen (Zeilen 21–24). Schritte zur Skripterstellung Vorsicht Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen. Das Skript in Listing 33 fügt einen neuen DNS-Server am Anfang der Liste mit der Suchreihenfolge für DNS-Server für jede Netzwerkadapterkonfiguration auf einem Computer hinzu. 1.Erstellen Sie eine Variable zur Angabe des Computernamens. 2.Weisen Sie der Variablen, die für den neuen DNS-Server steht, eine neue IP-Adresse zu. 3.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMINamespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 4.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird. Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist. 5.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben
Seite 88 von 169

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

Seite 89 von 169

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

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>dns-addserver-top.vbs Computer: . Network Adapter 1
Seite 90 von 169

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

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

Ändern der DNS-Domäne bei "Win32_NetworkAdapterConfiguration"
Seite 91 von 169

Das folgende Skript zeigt, wie die SetDNSDomain()-Methode der Klasse Win32_NetworkAdapterConfiguration verwendet wird, um die DNS-Domäne für alle Netzwerkadapter festzulegen. Weil diese Methode auf Adapterbasis funktioniert, könnten Sie damit auch die DNS-Domäne auf einem bestimmten Netzwerkadapter festlegen. Schritte zur Skripterstellung Vorsicht Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen. 1.Erstellen Sie eine Variable zur Angabe des Computernamens. 2.Erstellen Sie eine Variable zur Angabe des neuen DNS-Domänennamens. 3.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMINamespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 4.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration. Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer. 5.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben aus. 6.Zeigen Sie den Index, die Beschreibung des DNS-Hostnamens und die aktuelle DNS-Domäne des Netzwerkadapters an. 7.Rufen Sie die SetDNSDomain-Methode der Klasse Win32_NetworkAdapterConfiguration auf, und übergeben Sie ihr die Variable mit dem neuen DNS-Domänennamen. 8.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine Erfolgsnachricht oder eine Fehlermeldung an. 9.Fragen Sie die Klasse Win32_NetworkAdapterConfiguration erneut ab, und zeigen Sie die neue DNS-Domäne an. Listing 34 Dns-setdomain.vbs

Seite 92 von 169

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

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>dns-setdomain.vbs DNS Host Name: client1 Network Adapter 1 3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet Scheduler Miniport DNS Domain - Before:
Seite 93 von 169

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

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

Name Kennwort

Der Name der hinzufügenden Domäne oder Arbeitsgruppe. Darf nicht den Wert NULL haben. Muss angegeben werden, wenn ein alternativer Username-Parameter übergeben wird. Darf den Wert NULL haben, wenn kein Username-Parameter übergeben wird. 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. Optional. Darf den Wert NULL haben. Der vollständige Distinguished Name der Active Directory-Organisationseinheit, z. B. OU=HR,DC=fabrikam,DC=com. Eine Gruppe von Bitflags, die Optionen für das Hinzufügen einer Domäne oder Arbeitsgruppe angeben. Wenn Sie diesen Parameter nicht festlegen, wird der Standardwert 1 (Domäne beitreten) verwendet und der im ersten Parameter angegebene Name als Arbeitsgruppe angenommen. Sie können 0 oder weitere dieser Parameter gleichzeitig festlegen, indem Sie die erforderlichen Werte
Seite 94 von 169

Username

AccountOU

FJoinOptions

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 2 &h00002 4 &h00004 16 &h00010 32 &h00020 64 &h00040 128 &h00080 256

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. Erstellt ein Konto in einer Domäne.

Kontenerstellung

Kontenlöschung

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

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. Fügt einen Computer einer neuen Domäne hinzu, auch wenn er bereits Mitglied einer Domäne ist. Führt einen unsicheren Beitritt durch.

Domänenbeitritt falls beigetreten Unsicherer Beitritt

Computerkennwort weitergeleitet

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

Zurückgestellter SPN-Satz Das Schreiben der Attribute SPN und DnsHostName auf dem Computerobjekt sollte bis zum Umbenennen nach &h00100 dem Beitritt zurückgestellt werden. 262144 &h40000 Darüber hinaus enthält die Klasse Win32_ComputerSystem eine UnjoinDomainOrWorkgroup()-Methode (ebenfalls neu bei Windows XP), die einen Computer aus einer Domäne entfernt. Schritte zur Skripterstellung Vorsicht Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen.
Seite 95 von 169

Installationsaufruf

Die APIs wurden während der Installation aufgerufen.

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 WMINamespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 5.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_ComputerSystem. 6.Die zurückgegebene Auflistung besteht aus allen Computersystemen auf dem Computer. Nur ein Computersystem wird zurückgegeben. 7.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben aus. 8.Zeigen Sie den Computernamen und die aktuelle Domäne an. 9.Rufen Sie die JoinDomainOrWorkgroup-Methode der Klasse Win32_ComputerSystem auf, und übergeben Sie ihr zwei Parameter: die Variable zur Darstellung des neuen Domänennamens und die Konstante JOIN_DOMAIN. Kennzeichnen Sie die Stellen für die leeren optionalen Parameter durch Kommas. 10.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine Erfolgsnachricht oder eine Fehlermeldung an. 11.Fragen Sie die Klasse Win32_ComputerSystem erneut ab, und zeigen Sie die geänderte Domäne an. 12.Verwenden Sie eine Select Case-Anweisung, um die durch die DomainRole-Eigenschaft zurückgegebene ganze Zahl in eine aussagekräftige Zeichenfolge zu konvertieren, und zeigen Sie diese an. Listing 35 Dns-setdomain-global.vbs

Seite 96 von 169

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

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>dns-setdomain-global.vbs Computer Name: client1 Domain - Before: Joined computer to fabrikam.com domain. -------------------------------------------------------------------------------Seite 97 von 169

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

Ändern der Suchreihenfolge für DNS-Domänensuffixe
Außer dem Ändern der DNS-Domäne eines Computers können Sie auch die Suchreihenfolge für das DNS-Domänensuffix festlegen. Dies kann erforderlich sein, wenn der Host unvollständige Namen auf DNS-Servern in mehr als einer Domäne auflösen muss. Eine derartige Situation könnte eintreten, wenn ein Netzwerk mehrere sekundäre DNS-Server in unterschiedlichen Domänen umfasst oder wenn bei einem mehrfach vernetzten Computer jeder Netzwerkadapter einer anderen Domäne zugeordnet ist. Das folgende Skript legt die DNS-Domänensuffixe fest, die denjenigen Namen entsprechen, die Sie auf der Registerkarte DNS des Dialogfelds Erweiterte TCP/IP-Einstellungen im Textfeld unter Diese DNS-Suffixe anhängen (in Reihenfolge) eingeben würden. Vorsicht Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen. SetDNSSuffixSearchOrder ist eine statische Methode, die für alle Instanzen der Klasse Win32_NetworkAdapterConfiguration (also für alle IP-Netzwerkadapter) gilt. Dies bedeutet, dass Sie die einfachere Get()-Methode des SwbemServices-Objekts (zurückgegeben durch den vorherigen GetObject-Aufruf an den winmgmts:-Moniker) verwenden können, um ein Objekt zur Darstellung der gesamten Klasse abzurufen, statt die komplexere ExecQuery()-Methode bei einer WQL-Abfrage zu verwenden, um eine Auflistung von Objekten zur Darstellung von Instanzen der Klasse abzurufen. Die Get()-Methode steht in Zeile 24:
Set objNetworkSettings = objWMIService.Get("Win32_NetworkAdapterConfiguration")

Statt die SetDNSSuffixSearchOrder-Methode einfach ohne Parameter aufzurufen, wie bei EnableDHCP, müssen Sie ihr ein Array von Zeichenfolgen mit den Suffixnamen übergeben. Wenn Sie in einem Skript nur die SetDNSSuffixSearchOrder-Methode aufrufen müssten, könnten Sie kompaktere Möglichkeiten der Bindung an die Klasse Win32_NetworkAdapterConfiguration nutzen. Hier sind zwei Beispiele:
Set objNicConfig = GetObject("winmgmts:\\" & strComputer &_ "\root\cimv2:Win32_NetworkAdapterConfiguration") Set objNicConfig = GetObject("winmgmts:").Get _ ("Win32_NetworkAdapterConfiguration")

Das in einem bestimmten Kontext beste Verfahren ergibt sich oftmals aus Ihrem Programmierstil oder den Organisationsstandards. Schritte zur Skripterstellung Das Skript in Listing 36 ersetzt die alte Liste mit der Suchreihenfolge für DNS-Domänensuffixe durch eine neue Liste für alle Netzwerkadapter. 1.Erstellen Sie eine Variable zur Angabe des Computernamens.
Seite 98 von 169

2.Erstellen Sie eine Arrayvariable zur Angabe der Liste von DNS-Domänensuffixen. 3.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMINamespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 4.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird. Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist. 5.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben aus. 6.Überprüfen Sie, ob der Wert der DNSDomainSuffixSearchOrder-Eigenschaft nicht den Wert Null hat. 7.Führen Sie eine Iteration durch das Array der Zeichenfolgen durch, die von der DNSDomainSuffixSearchOrder-Eigenschaft zurückgegeben werden. 8.Verketten Sie die Arrayelemente in eine einzige Zeichenfolge. 9.Zeigen Sie die Zeichenfolge mit der Liste der DNS-Domänensuffixe in der richtigen Reihenfolge an. 10.Rufen Sie die SetDNSSuffixSearchOrder-Methode der Klasse Win32_NetworkAdapterConfiguration auf, und übergeben Sie ihr einen einzigen Parameter: das Array mit der Liste der DNS-Domänensuffixe. 11.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine Erfolgsnachricht oder eine Fehlermeldung an. 12.Fragen Sie die Klasse Win32_NetworkAdapterConfiguration erneut ab, und zeigen Sie die geänderte Liste von DNS-Domänensuffixen an. Listing 36 Dns-replacesuffixlist.vbs

Seite 99 von 169

1 On Error Resume Next 2 3 strComputer = "." 4 arrNewDNSSuffixSearchOrder = Array("hr.fabrikam.com", "contoso.com") 5 6 Set objWMIService = GetObject("winmgmts:" _ 7 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 8 Set colNicConfigs = objWMIService.ExecQuery _ 9 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 10 11 For Each objNicConfig In colNicConfigs 12 strDNSHostName = objNicConfig.DNSHostName 13Next 14WScript.Echo VbCrLf & "DNS Host Name: " & strDNSHostName 15 16 For Each objNicConfig In colNicConfigs 17 WScript.Echo VbCrLf & _ 18 " Network Adapter " & objNicConfig.Index & VbCrLf & _ 19 " " & objNicConfig.Description & VbCrLf & _ 20 " DNS Domain Suffix Search Order - Before:" 21 If Not IsNull(objNicConfig.DNSDomainSuffixSearchOrder) Then 22 For Each strDNSSuffix In objNicConfig.DNSDomainSuffixSearchOrder 23 WScript.Echo " " & strDNSSuffix Next 24 25 End If 26Next 27 28 WScript.Echo VbCrLf & String(80, "-") 29 30 Set objNetworkSettings = _ 31 objWMIService.Get("Win32_NetworkAdapterConfiguration") 32intSetSuffixes = _ 33 objNetworkSettings.SetDNSSuffixSearchOrder(arrNewDNSSuffixSearchOrder) 34If intSetSuffixes = 0 Then 35 WScript.Echo VbCrLf & "Replaced DNS domain suffix search order list." 36ElseIf intSetSuffixes = 1 Then 37 WScript.Echo VbCrLf & "Replaced DNS domain suffix search order list." & _ 38 VbCrLf & " Must reboot." 39Else 40 WScript.Echo VbCrLf & "Unable to replace DNS domain suffix " & _ 41 "search order list." 42End If 43 44 WScript.Echo VbCrLf & String(80, "-") 45 46 Set colNicConfigs = objWMIService.ExecQuery _ 47 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 48For Each objNicConfig In colNicConfigs 49 WScript.Echo VbCrLf & _ 50 " Network Adapter " & objNicConfig.Index & VbCrLf & _ 51 " " & objNicConfig.Description & VbCrLf & _ 52 " DNS Domain Suffix Search Order - After:" 53 If Not IsNull(objNicConfig.DNSDomainSuffixSearchOrder) Then 54 For Each strDNSSuffix In objNicConfig.DNSDomainSuffixSearchOrder 55 WScript.Echo " " & strDNSSuffix 56 Next 57 End If 58Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>dns-replacesuffixlist.vbs
Seite 100 von 169

DNS Host Name: client1 Network Adapter 1 3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet Scheduler Miniport DNS Domain Suffix Search Order - Before: -------------------------------------------------------------------------------Replaced DNS domain suffix search order list. -------------------------------------------------------------------------------Network Adapter 1 3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet Scheduler Miniport DNS Domain Suffix Search Order - After: hr.fabrikam.com contoso.com

Ändern der Einstellungen für dynamische DNS-Registrierung
Da sich IP-Adressen bei DHCP-Clients ändern, automatisieren die DNS-Registrierung und die dynamische Aktualisierung den Prozess, mit dem die Änderung von Hostname und IPAdresszuordnungen 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 DNSRegistrierung verwenden der DomainDNSRegistrationEnabled-Eigenschaft. Beide Eigenschaften und die Methode sind neu bei Windows XP und Windows Server 2003. Der Wert von DomainDNSRegistrationEnabled, deren Standardwert False ist, wird nur verwendet, wenn FullDNSRegistrationEnabled den Wert True aufweist; andernfalls wird er ignoriert. Sie können auf der Windows-Benutzeroberfläche den Namen suchen, auf den sich die FullDNSRegistrationEnabled-Eigenschaft bezieht. Öffnen Sie die Systemsteuerung, klicken Sie auf System, dann auf die Registerkarte Computername, und zeigen Sie das Feld
Seite 101 von 169

VollständigerComputername an. Der Wert in diesem Feld besteht aus dem Hostnamen mit angehängtem Domänennamen. Wenn die FullDNSRegistrationEnabled-Eigenschaft True lautet, werden die IP-Adressen für den Netzwerkadapter in DNS unter Verwendung dieses Namens registriert. Lautet die DomainDNSRegistrationEnabled-Eigenschaft True, werden die IP-Adressen zusätzlich in DNS registriert und dazu die DNSDomain-Eigenschaft für den jeweiligen Netzwerkadapter verwendet. So müssen Sie beispielsweise auf einem mehrfach vernetzten Computer, dessen Netzwerkadapter jeweils mit einem anderen Netzwerk mit einer anderen Domänenstruktur verbunden sind, bei der Domänenregistrierung verbindungsspezifische DNS-Suffixe verwenden. In solchen Fällen kann der Client für jede Netzwerkverbindung ein anderes Domänensuffix registrieren. Dies könnte durch Festlegen der Werte von FullDNSRegistrationEnabled und DomainDNSRegistrationEnabled auf True ermöglicht werden. Schritte zur Skripterstellung Vorsicht Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen. Dieses Skript ändert die Einstellungen für die Durchführung der dynamischen DNSRegistrierung, 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 WMINamespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 4.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird. Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist. 5.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben aus. 6.Zeigen Sie die aktuellen Einstellungen der dynamischen DNS-Registrierung an. 7.Rufen Sie die SetDynamicDNSRegistration-Methode der Klasse
Seite 102 von 169

Win32_NetworkAdapterConfiguration auf, und übergeben Sie ihr die beiden booleschen Parameter, die am Anfang des Skripts festgelegt wurden. 8.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine Erfolgsnachricht oder eine Fehlermeldung an. 9.Fragen Sie die Klasse Win32_NetworkAdapterConfiguration erneut ab, und zeigen Sie die geänderten Einstellungen für die dynamische DNS-Registrierung an. Listing 37 Dns-setdynreg.vbs
1 On Error Resume Next 2 3 strComputer = "." 4 blnFullDNSRegistrationEnabled = True 5 blnDomainDNSRegistrationEnabled = True 6 7 Set objWMIService = GetObject("winmgmts:" _ 8 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 9 Set colNicConfigs = objWMIService.ExecQuery _ 10 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 11 12 For Each objNicConfig In colNicConfigs 13 strDNSHostName = objNicConfig.DNSHostName 14Next 15WScript.Echo VbCrLf & "DNS Host Name: " & strDNSHostName 16 17 For Each objNicConfig In colNicConfigs 18 WScript.Echo VbCrLf & _ 19 " Network Adapter " & objNicConfig.Index & VbCrLf & _ " " & objNicConfig.Description & VbCrLf & _ 20 " DNS Full Registration Enabled - Before: " & _ 21 objNicConfig.FullDNSRegistrationEnabled & VbCrLf & _ 22 23 " DNS Domain Registration Enabled - Before: " & _ objNicConfig.DomainDNSRegistrationEnabled 24 25 intDynReg = objNicConfig.SetDynamicDNSRegistration _ 26 (blnFullDNSRegistrationEnabled, blnDomainDNSRegistrationEnabled) 27 If intDynReg = 0 Then 28 WScript.Echo VbCrLf & " Successfully set dynamic DNS registration." 29 ElseIf intDynReg = 1 Then 30 WScript.Echo VbCrLf & _ 31 " Successfully set dynamic DNS registration." & _ 32 VbCrLf & " Must reboot." 33 Else 34 WScript.Echo VbCrLf & " Unable to set dynamic DNS registration." 35 End If 36Next 37 38 WScript.Echo VbCrLf & String(80, "-") 39 40 Set colNicConfigs = objWMIService.ExecQuery _ 41 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 42 43 For Each objNicConfig In colNicConfigs 44 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index & _ 45 VbCrLf & " " & objNicConfig.Description & VbCrLf & _ 46 " DNS Full Registration Enabled - After: " & _ 47 objNicConfig.FullDNSRegistrationEnabled & VbCrLf & _ 48 " DNS Domain Registration Enabled - After: " & _ 49 objNicConfig.DomainDNSRegistrationEnabled 50Next

Seite 103 von 169

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

Szenario: Ändern von DNS-Servern und -Domänen
Bei großen Veränderung in einem Unternehmen - zum Beispiel Fusionen, Übernahmen und Umstrukturierungen - kann sich die DNS-Domänenhierarchie eines Unternehmens ändern, und Hosts müssen möglicherweise neu konfiguriert werden, damit sie in der neuen Struktur funktionieren. In diesem Szenario weist die IT-Abteilung bei Fabrikam, Inc., Clients, die sich zuvor in der Domäne der obersten Ebene, fabrikam.com, befanden, verschiedenen Unterdomänen zu: hr.fabrikam.com, it.fabrikam.com und ac.fabrikam.com. Der primäre DNS-Server für jede Unterdomäne dient außerdem zum Sichern der beiden anderen Unterdomänen. Dieses Skript verwendet statt der EnableDNS()-Methodedie Methoden SetDNSDomain() und SetDNSServerSearchOrder() der Klasse Win32_NetworkAdapterConfiguration. Für EnableDNS() sind zwei weitere optionale Parameter erforderlich, die leer bleiben könnten; die beiden anderen Methoden legen die für dieses Beispiel benötigten Parameter exakt fest. Bei Bedarf könnten Sie das Skript problemlos erweitern, um auch die Einstellungen für die dynamische Registrierung der Hosts mithilfe der SetDynamicDNSRegistration()-Methode zu konfigurieren. Denken Sie daran, dass bei einem Vorgang wie dem hier beschriebenen das Konfigurieren des Clients nur einen Teil der Aufgabe darstellt: Darüber hinaus müssen Sie die entsprechenden Änderungen auf den DNS-Servern vornehmen. Die Beschreibung der Skripterstellung für DNSServer würde den Rahmen dieses Dokumentes jedoch überschreiten.
Seite 104 von 169

Schritte zur Skripterstellung Vorsicht Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen. Das Skript in Listing 38 verwendet eine Textdatei als Eingabe. Sie müssen diese Datei vor Ausführung des Skripts erstellen. Der Pfad zur Datei wird in einer Variablen angegeben; in diesem Beispiel lautet er C:\Scripts\Hosts.txt. Jede Zeile der Textdatei enthält einen Hostnamen und einen neuen Domänennamen, die durch ein Komma getrennt werden (Leerzeichen zwischen den Namen sind nicht zulässig). Die letzte Zeile in der Datei darf NICHT mit einem Eingabezeichen abgeschlossen werden, weil dann die folgende Zeile vom Skript als leerer Eintrag gelesen würde.
client1,hr client2,it server1,ac

Das Skript weist jedem Host den neuen Domänennamen und eine neue Suchreihenfolge für DNS-Server zu. Die neue Reihenfolge hängt von dem neuen Domänennamen ab: Jede Unterdomäne verfügt über einen eigenen primären DNS-Server, der als Sicherung für die anderen beiden Unterdomänen dient. Das Skript erstellt eine CSV-Textdatei und protokolliert darin die Ergebnisse dieser Vorgänge. Der Pfad zur Datei wird in einer Variablen angegeben; in diesem Fall lautet er C:\Scripts\Newhosts.csv. 1.Definieren Sie die notwendigen Konstanten für das Objekt FileSystemObject. 2.Erstellen Sie Variablen zur Angabe der Pfade zu den Ein- und Ausgabedateien. 3.Erstellen Sie Variablen zur Angabe des Namens der Domäne der obersten Ebene. 4.Erstellen Sie drei Arrays von Zeichenfolgen mit der jeweiligen Suchreihenfolge für DNSServer für jede Unterdomäne. 5.Erstellen Sie ein FileSystemObject-Objekt, und verwenden Sie es zum Öffnen der Datei und zum Einlesen des Inhalts in eine Zeichenfolge. 6.Rufen Sie die GetInput-Funktion auf, und übergeben Sie ihr den Namen der Eingabetextdatei. Die Funktion liest den Inhalt der Eingabedatei und gibt ihn als Zeichenfolge zurück. 7.Verwenden Sie die VBScript-Funktion Split mit der VbCrLf-Konstante als Trennzeichen. um die Zeichenfolge aus der Eingabedatei in ein Array aufzuteilen, bei dem jedes Element aus einer Zeile der Textdatei besteht. Diese muss den Namen eines Computers und einer Unterdomäne enthalten. 8.Überprüfen Sie, ob die angegebene Ausgabedatei vorhanden ist. Wenn dies zutrifft, öffnen Sie sie zum Anhängen. Andernfalls müssen Sie sie erstellen und zum Schreiben öffnen. 9.Führen Sie eine Iteration durch jedes Arrayelement durch, das durch Aufteilen der Eingabedateizeilen zurückgegeben wurde. 10.Verwenden Sie Split erneut, und teilen Sie jedes Element des Arrays beim Komma. Dabei
Seite 105 von 169

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

Seite 106 von 169

1 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

Seite 107 von 169

' Write header for each computer. objOutputFile.WriteLine "Host:,," & strComputer & VbCrLf & VbCrLf & _

Teil 6: Skripterstellung für WINS auf Clients
Veröffentlicht: 07. Dez 2004

Obwohl der Dienst WINS (Windows Internet Name Service) unter Windows XP und Windows Server 2003 hauptsächlich aus Gründen der Abwärtskompatibilität mit älteren NetBIOS-basierten Versionen von Windows und Netzwerkanwendungen bereitgestellt wird, dient er vielfach weiterhin als Namensauflösungssystem für NetBIOS-Namen. Abbildung 12 zeigt die Registerkarte WINS des Dialogfelds Erweiterte TCP/IP-Einstellungen, die über die Windows-Benutzeroberfläche Zugriff auf diese Einstellungen bietet.

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

Eigenschaft

Typ

Beschreibung

DNSEnabledForWINSResolutionBoolscher 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. Einstellungen für NetBIOS über TCP/IP. Die Werte lauten: 0 = NetBIOS über DHCP aktivieren 1 = NetBIOS aktivieren 2 = NetBIOS deaktivieren

TcpipNetbiosOptions Neu bei Windows XP

Uint32

WINSEnableLMHostsLookup

Boolscher Wert

TRUE gibt an, dass die lokale LMHosts-Datei verwendet wird. Diese enthält die Zuordnung von IPAdressen 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 WINSEnableLMHostsLookupEigenschaft TRUE lautet. ZeichenfolgeIP-Adresse für den primären WINS-Server. 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/IPKommunikationen 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. ZeichenfolgeIP-Adresse für den sekundären WINS-Server.

WINSPrimaryServer WINSScopeID

WINSSecondaryServer

Alle Eigenschaften in der vorstehenden Tabelle sind schreibgeschützt. In Tabelle 20 werden die WINS-Methoden für die Klasse Win32_NetworkAdapterConfiguration beschrieben. Tabelle 20 WINS-Methoden für die Klasse "Win32_NetworkAdapterConfiguration"
Seite 109 von 169

Methode

Parameter

Beschreibung

EnableWINS

DNSEnabledForWINSResolution – Boolean-Wert

Statische Methode. Aktiviert die für TCP/IP spezifischen Einstellungen, ist jedoch unabhängig vom WINSEnableLMHostsLookup – Boolean- Netzwerkadapter. Wert WINSHostLookupFile – Zeichenfolge WINSScopeID – Zeichenfolge

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

Seite 110 von 169

2.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 3.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird. Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist. 4.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben aus. 5.Weisen Sie die Eigenschaft DNSHostName der Klasse Win32_NetworkAdapterConfiguration einer Variablen zu. 6.Verwenden Sie eine Select Case-Anweisung zum Konvertieren der Werte für die TcpipNetbiosOptions-Eigenschaft in aussagekräftige Zeichenfolgen. 7.Verketten Sie die Bezeichnungen, die aussagekräftige Zeichenfolge für die TcpipNetbiosOptionsEigenschaft sowie die Werte für die Win32_NetworkAdapterConfiguration-Eigenschaften Index, Description, WINSPrimaryServer, WINSSecondaryServer, WINSScopeID, WINSEnableLMHostsLookup, WINSHostLookupFile und DNSEnabledForWINSResolution zu einer Zeichenfolge. 8.Verketten Sie bei jeder nachfolgenden Iteration durch einen anderen Netzwerkadapter die zugehörige Zeichenfolge mit der ursprünglichen Zeichenfolge. 9.Zeigen Sie den Hostnamen und die Einstellungen für jeden Adapter an. Listing 39 Winssettings.vbs

Seite 111 von 169

1 On Error Resume Next 2 3 strComputer = "." 4 5 Set objWMIService = GetObject("winmgmts:" _ 6 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 7 Set colNicConfigs = objWMIService.ExecQuery _ 8 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 9 10 For Each objNicConfig In colNicConfigs 11 strDNSHostName = objNicConfig.DNSHostName 12 intNetBIOS = objNicConfig.TcpipNetbiosOptions 13 Select Case intNetBIOS 14 Case 0 strNetBIOS = "Use NetBIOS setting from the DHCP server." 15 Case 1 strNetBIOS = "Enable NetBIOS over TCP/IP." 16 Case 2 strNetBIOS = "Disable NetBIOS over TCP/IP." 17 Case Else strNetBIOS = "Unable to determine setting for NetBIOS " & _ 18 "Over TCP/IP." 19 End Select 20 strWINSSettings = strWINSSettings & VbCrLf & VbCrLf & _ 21 " Network Adapter " & objNicConfig.Index & VbCrLf & _ 22 " " & objNicConfig.Description & VbCrLf & VbCrLf & _ 23 " NetBIOS: " & strNetBIOS & VbCrLf & _ 24 " WINS Primary Server: " & _ 25 objNicConfig.WINSPrimaryServer & VbCrLf & _ 26 " WINS Secondary Server: " & _ 27 objNicConfig.WINSSecondaryServer & VbCrLf & _ 28 " WINS Scope ID: " & _ 29 objNicConfig.WINSScopeID & VbCrLf & _ 30 " WINS Enable LMHosts Lookup: " & _ 31 objNicConfig.WINSEnableLMHostsLookup & VbCrLf & _ 32 " WINS Host Lookup File: " & _ 33 objNicConfig.WINSHostLookupFile & VbCrLf & _ 34 " DNS Enabled For WINS Resolution: " & _ 35 objNicConfig.DNSEnabledForWINSResolution 36Next 37 38 WScript.Echo VbCrLf & "WINS Settings" & VbCrLf & VbCrLf & _ 39 "Host Name: " & strDNSHostName & strWINSSettings

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>winssettings.vbs WINS Settings Host Name: client1 Network Adapter 1 3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet Scheduler Miniport NetBIOS: Enable NetBIOS over TCP/IP. WINS Primary Server: WINS Secondary Server: WINS Scope ID:
Seite 112 von 169

WINS Enable LMHosts Lookup: True WINS Host Lookup File: DNS Enabled For WINS Resolution: False

Aktivieren von NetBIOS
Weil WINS NetBIOS-Namen auflöst, müssen Sie NetBIOS aktivieren, wenn Sie WINS auf einem Client aktivieren. Wenn DHCP aktiviert ist, kann der Client NetBIOS-Einstellungen vom DHCPServer abrufen. Wenn ein Client aber eine statische IP-Adresse verwendet, müssen Sie WINSEinstellungen 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/IPEinstellungen bereitgestellt (siehe Abbildung 12). Tabelle 21 zeigt, wie diese Optionsfelder den drei möglichen Werten der TcpipNetbiosOptionsEigenschaft 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 DHCPServer abzurufen. Falls eine statische IP-Adresse verwendet wird oder der DHCP-Server keine NetBIOS-Einstellung bereitstellt, aktiviert diese Einstellung NetBIOS über TCP/IP. Wenn die statische IP-Adressierung aktiviert und DHCP deaktiviert ist Wenn NetBIOS im Netzwerk nicht verwendet wird

1 2

NetBIOS aktivieren NetBIOS deaktivieren

Schritte zur Skripterstellung Vorsicht Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen. Das Skript in Listing 40 aktiviert NetBIOS auf einem Netzwerkadapter. Es verwendet die SetTCPIPNetBIOS()-Methode der Klasse Win32_NetworkAdapterConfiguration zum Festlegen der TcpipNetbiosOptions-Eigenschaft. Diese Eigenschaft ist neu bei Windows XP. 1.Definieren Sie Konstanten zur Darstellung der drei möglichen Werte für die TcpipNetbiosOptions-Eigenschaft. 2.Erstellen Sie eine Variable zur Angabe des Computernamens. 3.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 4.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse
Seite 113 von 169

Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird. Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist. 5.Zeigen Sie den Namen des Computers an. 6.Führen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die folgenden Aufgaben aus. 7.Zeigen Sie die Index-Eigenschaft des Netzwerkadapters an. 8.Rufen Sie die SetTCPIPNetBIOS-Methode der Klasse Win32_NetworkAdapterConfiguration auf, und übergeben Sie ihr als einzigen Parameter eine der drei Konstanten, die die Werte der TcpipNetbiosOptions-Eigenschaft darstellen. 9.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine Erfolgsnachricht oder eine Fehlermeldung an. 10.Fragen Sie die Klasse Win32_NetworkAdapterConfiguration erneut ab. 11.Zeigen Sie die neue TcpipNetbiosOptions-Eigenschaft an, und verwenden Sie dabei eine Select Case-Anweisung zum Konvertieren der ganzen Zahl in eine erklärende Zeichenfolge. Listing 40 Wins-enablenetbios.vbs

Seite 114 von 169

1 On Error Resume Next 2 3 Const ENABLE_NETBIOS_VIA_DHCP = 0 4 Const ENABLE_NETBIOS = 1 5 Const DISABLE_NETBIOS = 2 6 strComputer = "." 7 8 Set objWMIService = GetObject("winmgmts:" _ 9 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 10Set colNicConfigs = objWMIService.ExecQuery _ 11 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 12 WScript.Echo VbCrLf & "Host Name: " & strComputer 13For Each objNicConfig in colNicConfigs 14 15 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index & _ 16 " " & objNicConfig.Description & VbCrLf & _ 17 " Attempting to set NetBIOS over TCP/IP default." 18 intNetBIOS = objNicConfig.SetTCPIPNetBIOS(ENABLE_NETBIOS_VIA_DHCP) 19 If intNetBIOS = 0 Then 20 WScript.Echo " Successfully set NetBIOS over TCP/IP default." 21 ElseIf intNetBIOS = 1 Then 22 WScript.Echo " Successfully set NetBIOS over TCP/IP default." & _ 23 VbCrLf & " Must reboot." 24 Else 25 WScript.Echo " Unable to set NetBIOS default." 26 End If 27Next 28 29 WScript.Echo VbCrLf & String(80, "-") 30 31 Set colNicConfigs = objWMIService.ExecQuery _ 32 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 33 34 For Each objNicConfig In colNicConfigs 35 WScript.Echo VbCrLf & _ 36 " Network Adapter " & objNicConfig.Index & VbCrLf & _ 37 " " & objNicConfig.Description 38 intNetBIOS = objNicConfig.TcpipNetbiosOptions 39 Select Case intNetBIOS 40 Case 0 strNetBIOS = "Use NetBIOS setting from the DHCP server" 41 Case 1 strNetBIOS = "Enable NetBIOS over TCP/IP" 42 Case 2 strNetBIOS = "Disable NetBIOS over TCP/IP" 43 End Select 44 WScript.Echo " NetBIOS Over TCP/IP: " & strNetBIOS 45Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>wins-enablenetbios.vbs Host Name: . Network Adapter 1 3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet Scheduler Miniport Attempting to set NetBIOS over TCP/IP default. Successfully set NetBIOS over TCP/IP default. -------------------------------------------------------------------------------Seite 115 von 169

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

Aktivieren von WINS
Wenn NetBIOS über DHCP aktiviert ist, brauchen Sie WINS nicht zu aktivieren oder WINS-Server manuell zuzuweisen, weil der Client diese Einstellungen vom DHCP-Server abruft. Wenn NetBIOS jedoch unabhängig von DHCP aktiviert ist, müssen Sie WINS aktivieren sowie IP-Adressen für einen primären Server und (optional) für einen sekundären WINS-Server zuweisen. Die Klasse Win32_NetworkAdapterConfiguration stellt hierfür zwei Methoden bereit: Eine Methode aktiviert WINS und konfiguriert vier WINS-Einstellungen; eine andere Methode weist primäre und sekundäre WINS-Server zu. Schritte zur Skripterstellung Vorsicht Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen. Das Skript in Listing 41 aktiviert WINS und legt vier Parameter fest, die an die EnableWINSMethode übergeben werden. In Tabelle 22 werden die Parameter der EnableWINS-Methode beschrieben. Tabelle 22 Parameter der "EnableWINS"-Methode
Parameter Typ Beschreibung

DNSEnabledForWINSResolutionBooleanWert WINSEnableLMHostsLookup BooleanWert

Ein Wert, der angibt, ob DNS als Sicherungsmethode für die Namensauflösung aktiviert werden soll. Ein Wert, der angibt, ob die Verwendung der LMHOSTS-Datei für die Zuordnung von NetBIOSNamen 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. ZeichenfolgeDie Bereichskennung, die an den NetBIOS-Namen des Computers angehängt werden soll. Computer, die die gleiche Bereichskennung verwenden, können miteinander kommunizieren.

WINSScopeID

Der Name jedes Parameters ist auch der Name der Eigenschaft, die zum Abrufen des Wertes verwendet werden kann. EnableWINS ist eine statische Methode, die für alle Instanzen der Klasse (in diesem Fall für alle Netzwerkadapter) gilt.
Seite 116 von 169

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

Seite 117 von 169

1 On Error Resume Next 2 3 strComputer = "." 4 blnDNSEnabledForWINSResolution = True 5 blnWINSEnableLMHostsLookup = True 6 strWINSHostLookupFile = "" 7 strWINSScopeID = "WORKGROUP" 8 9 Set objWMIService = GetObject("winmgmts:" _ 10 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 11Set objNicConf = objWMIService.Get("Win32_NetworkAdapterConfiguration") 12 13 WScript.Echo VbCrLf & "Host Name: " & strComputer & VbCrLf & _ 14 " Attempting to enable WINS" 15intEnableWINS = objNicConf.EnableWINS(blnDNSEnabledForWINSResolution, _ 16 blnWINSEnableLMHostsLookup, strWINSHostLookupFile, strWINSScopeID) 17If intEnableWINS = 0 Then Successfully enabled WINS on all network adapters." 18 WScript.Echo " 19ElseIf intEnableWINS = 1 Then Successfully enabled WINS on all network adapters." & _ 20 WScript.Echo " 21 VbCrLf & " Must reboot." 22Else 23 WScript.Echo " Unable to enable WINS." 24End If 25 26 WScript.Echo VbCrLf & String(80, "-") 27 28 Set colNicConfigs = objWMIService.ExecQuery _ 29 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 30 31 For Each objNicConfig In colNicConfigs 32 WScript.Echo VbCrLf & _ 33 " Network Adapter " & objNicConfig.Index & VbCrLf & _ 34 " " & objNicConfig.Description 35 WScript.Echo " DNS Enabled For WINS Resolution: " & _ 36 objNicConfig.DNSEnabledForWINSResolution 37 WScript.Echo " WINS Enable LMHosts Lookup: " & _ 38 objNicConfig.WINSEnableLMHostsLookup 39 WScript.Echo " WINS Host Lookup File: " & _ 40 objNicConfig.WINSHostLookupFile 41 WScript.Echo " WINS Scope ID: " & objNicConfig.WINSScopeID 42Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>wins-enable.vbs Host Name: . Attempting to enable WINS Successfully enabled WINS on all network adapters. -------------------------------------------------------------------------------Network Adapter 1 3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet Scheduler Miniport
Seite 118 von 169

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

Festlegen von WINS-Servern für einen Client
Wenn NetBIOS unabhängig von DHCP aktiviert ist, müssen Sie IP-Adressen für einen primären Server und (optional) für einen sekundären WINS-Server zuweisen sowie WINS aktivieren. Die Klasse Win32_NetworkAdapterConfiguration stellt die SetWINSServer-Methode zum Zuweisen von WINS-Servern zu einem Client bereit. Schritte zur Skripterstellung Vorsicht Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen. Das Skript in Listing 42 weist einem Client primäre und sekundäre WINS-Server zu. SetWINSServer ist eine statische Methode, die für alle Instanzen der Klasse (in diesem Fall für alle Netzwerkadapter) gilt. 1.Erstellen Sie eine Variable zur Angabe des Computernamens. 2.Erstellen Sie zwei Variablen zur Angabe der IP-Adressen des primären und sekundären WINSServers, die an die EnableWINS-Methode übergeben werden sollen. 3.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 4.Rufen Sie die Get-Methode für die Klasse Win32_NetworkAdapterConfiguration auf. Damit wird ein Objektverweis auf die Klasse Win32_NetworkAdapterConfiguration selbst statt einer Auflistung der Klasseninstanzen zurückgegeben. Dieser Verweis auf die Klasse muss zum Aufrufen der statischen Methode SetWINSServer verwendet werden. 5.Zeigen Sie den Namen des Computers an. 6.Rufen Sie die statische Methode SetWINSServer der Klasse Win32_NetworkAdapterConfiguration auf, und übergeben Sie ihr die vorstehend definierten beiden Parameter. 7.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine Erfolgsnachricht oder eine Fehlermeldung an. 8.Verwenden Sie die ExecQuery-Methode zum erneuten Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird.
Seite 119 von 169

9.Zeigen Sie die IP-Adressen der WINS-Server an, die mit der SetWINSServer-Methode konfiguriert wurden. Listing 42 Wins-setservers.vbs
1 On Error Resume Next 2 3 strComputer = "." 4 strWINSPrimaryServer = "192.168.0.1" 5 strWINSSecondaryServer = "192.168.0.2" 6 7 Set objWMIService = GetObject("winmgmts:" _ 8 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 9 Set colNicConfigs = objWMIService.ExecQuery _ 10 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 11 12 WScript.Echo VbCrLf & "Host Name: " & strComputer & VbCrLf & _ 13 " Attempting to set WINS primary and secondary servers ..." 14 15 For Each objNicConfig In colNicConfigs 16 WScript.Echo VbCrLf & _ 17 " Network Adapter " & objNicConfig.Index & VbCrLf & _ 18 " " & objNicConfig.Description 19 intSetWINSServer = objNicConfig.SetWINSServer(strWINSPrimaryServer, _ 20 strWINSSecondaryServer) 21 If intSetWINSServer = 0 Then 22 WScript.Echo " Successfully set WINS servers." 23 ElseIf intSetWINSServer = 1 Then 24 WScript.Echo " Successfully set WINS servers." & _ 25 VbCrLf & " Must reboot." 26 Else 27 WScript.Echo " Unable to set WINS servers." 28 End If 29Next 30 31 WScript.Echo VbCrLf & String(80, "-") 32 33 Set colNicConfigs = objWMIService.ExecQuery _ 34 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 35 36 For Each objNicConfig In colNicConfigs 37 WScript.Echo VbCrLf & _ 38 " Network Adapter " & objNicConfig.Index & VbCrLf & _ 39 " " & objNicConfig.Description 40 WScript.Echo " Primary WINS Server: " & objNicConfig.WINSPrimaryServer 41 WScript.Echo " Secondary WINS Server: " & _ 42 objNicConfig.WINSSecondaryServer 43Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>wins-setservers.vbs Host Name: . Attempting to set WINS primary and secondary servers ... Network Adapter 1 3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet
Seite 120 von 169

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

Szenario: Vorbereiten eines Clients für WINS
Wenn Sie WINS auf einem Client konfigurieren möchten, müssen Sie zuerst entscheiden, ob und wie NetBIOS aktiviert werden soll. Wenn NetBIOS deaktiviert ist, können Sie WINS nicht verwenden. Ist NetBIOS über DHCP aktiviert, kann der Client die korrekten Einstellungen vom DHCP-Server abrufen. Wenn NetBIOS jedoch unabhängig von DHCP aktiviert ist, müssen Sie WINS aktivieren sowie den primären und sekundären WINS-Server zuweisen. Mithilfe der im Abschnitt "Skripterstellung für die Verwaltung von Remotenetzwerken" dieses Dokumentes beschriebenen Verfahren können Sie dieses Skript problemlos zur Ausführung für mehrere Clients erweitern. Schritte zur Skripterstellung Vorsicht Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen. Das Skript in Listing 43 ermöglicht Ihnen das Konfigurieren von Einstellungen für NetBIOS und WINS in einem Änderungsblock am Anfang des Listings. Zunächst wird der Modus von NetBIOS über TCP/IP auf jedem Netzwerkadapter festgelegt. Wenn NetBIOS aktiviert ist (allerdings nicht über DHCP), aktiviert das Skript WINS, konfiguriert die WINS-Einstellungen und legt die IP-Adressen der WINS-Server für den zu verwendenden Client fest. 1.Definieren Sie Konstanten zur Darstellung der drei möglichen Werte für die TcpipNetbiosOptions-Eigenschaft. 2.Erstellen Sie eine Variable zur Angabe des Computernamens. 3.Erstellen Sie Variablen zur Angabe der Parameter, die an die EnableWINS-Methode übergeben werden sollen. 4.Erstellen Sie Variablen zur Angabe der IP-Adressen des primären und sekundären WINS-Servers, die an die EnableWINS-Methode übergeben werden sollen. 5.Initialisieren Sie zwei Variablen mit dem Wert False.

Seite 121 von 169

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

Seite 122 von 169

1 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

Seite 123 von 169

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

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-, IPund TCP-Einstellungen, IPX-Einstellungen (Internetwork Packet Exchange) sowie die Aufzählung von auf Hosts ausgeführten Netzwerkprotokollen. Anhand der Beispielskripts werden weitere Eigenschaften und Methoden der Klasse Win32_NetworkAdapterConfiguration aufgezeigt, und es wird die neue WMI-Klasse Win32_NetworkProtocol vorgestellt. In diesem Abschnitt werden die Schritte der Skripterstellung und Beispielskripts für diese protokollbasierten Aufgaben bereitgestellt:
• •

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

• •

Verwalten von IPX Auflisten der Netzwerkprotokolle auf einem Computer

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

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

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

IPFilterSecurityEnabledBoolean-Wert

TRUE gibt an, dass die IP-Portsicherheit global für alle IPNetzwerkadapter 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 IPFiltersicherheit für alle Netzwerkadapter deaktiviert ist und der gesamte Port- und Protokollverkehr nicht gefiltert wird.
Seite 125 von 169

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

EnableIPFilterSec

IPFilterSecurityEnabled – Statische Methode. Aktiviert TCP/IP-Filter global für Boolean-Wert alle IP-Netzwerkadapter. Wenn die Sicherheit aktiviert ist, können die funktionalen Sicherheitseigenschaften für jeden Netzwerkadapter mit der für Netzwerkadapter spezifischen EnableIPSec-Methode gesteuert werden. 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.

EnableIPSec

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

0 bedeutet: erfolgreicher Abschluss.
Seite 126 von 169

• •

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

Das Befehlszeilentool Ipseccmd.exe und der Befehl netsh ipsec stellen umfassendere Funktionen für die Einsatzmöglichkeiten von IPSec bereit.

Anzeigen von TCP/IP-Filtereinstellungen
Zum Abrufen von TCP/IP-Filtereinstellungen stellt die Klasse Win32_NetworkAdapterConfiguration mehrere für Netzwerkadapter spezifische Eigenschaften bereit. IPFilterSecurityEnabled ist jedoch eine globale Eigenschaft, die für alle IP-Netzwerkadapter gilt. Beachten Sie, dass IPFilterSecurityEnabled die veraltete IPPortSecurityEnabled-Eigenschaft ersetzt. Die Eigenschaften IPSecPermitIPProtocols, IPSecPermitTCPPorts und IPSecPermitUDPPorts geben jeweils Zeichenfolgenarrays zurück, die die Ports oder Protokolle darstellen, denen Zugriffsberechtigungen erteilt wurden. Dabei gibt der Wert 0 an, dass alle Protokolle oder Ports über Zugriffsrechte verfügen, während eine leere Zeichenfolge angibt, dass keinem Port die Zugriffsberechtigung erteilt wurde. Schritte zur Skripterstellung In dem Skript in Listing 44 werden die TCP/IP-Filtereinstellungen aller installierten Netzwerkadapter mit den Eigenschaften der Klasse Win32_NetworkAdapterConfiguration angezeigt. 1.Erstellen Sie eine Variable, und weisen Sie ihr den Namen eines Computers zu. Geben Sie für den lokalen Computer einfach "." als Computernamen an. Wenn Sie dieses Skript remote ausführen möchten, geben Sie den Namen eines verfügbaren Remotecomputers im Netzwerk an, für den Sie Administratorrechte besitzen. Der Name kann aus einem Hostnamen oder einer IP-Adresse bestehen. 2.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 3.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird. Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist. 4.Zeigen Sie für jede Netzwerkadapterkonfiguration in der Auflistung die Indexnummer, die Beschreibung und den Wert für die IPFilterSecurityEnabled-Eigenschaft an. 5.Wenn die Eigenschaften IPSecPermitIPProtocols, IPSecPermitTCPPorts und IPSecPermitUDPPorts nicht den Wert Null aufweisen, sollten Sie die zurückgegebenen Arrays durchlaufen und die zugehörigen Werte anzeigen. Listing 44 Ipfiltersettings.vbs

Seite 127 von 169

1 On Error Resume Next 2 3 strComputer = "." 4 5 Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 6 Set colNicConfig = objWMIService.ExecQuery _ 7 ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True") 8 9 For Each objNicConfig in colNicConfig 10 WScript.Echo VbCrLf & "Network Adapter " & objNicConfig.Index & _ 11 VbCrLf & " " & objNicConfig.Description 12 WScript.Echo " IP Filter Security Enabled: " & _ 13 objNicConfig.IPFilterSecurityEnabled 14 WScript.Echo " Protocols Permitted over IP:" 15 If Not IsNull(objNicConfig.IPSecPermitIPProtocols) Then 16 For Each strIPProtocol In objNicConfig.IPSecPermitIPProtocols 17 WScript.Echo " " & strIPProtocol 18 Next 19 End If 20 WScript.Echo " TCP Ports Permitted:" 21 If Not IsNull(objNicConfig.IPSecPermitTCPPorts) Then 22 For Each strTCPPort In objNicConfig.IPSecPermitTCPPorts 23 WScript.Echo " " & strTCPPort 24 Next 25 End If 26 WScript.Echo " UDPPorts Permitted:" 27 If Not IsNull(objNicConfig.IPSecPermitUDPPorts) Then 28 For Each strUDPPort In objNicConfig.IPSecPermitUDPPorts 29 WScript.Echo " " & strUDPPort 30 Next 31 End If 32Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>ipfiltersettings.vbs Network Adapter 1 3Com 3C920 Integrated Fast Ethernet Controller (3C905C-TX Compatible) - Packet Scheduler Miniport IP Filter Security Enabled: False Protocols Permitted over IP: 0 TCP Ports Permitted: 0 UDPPorts Permitted: 0

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

Seite 128 von 169

für alle IP-Netzwerkadapter. Nachdem Sie die TCP/IP-Filter für alle Netzwerkadapter aktiviert haben, können Sie für jeden Netzwerkadapter bestimmte TCP/IP-Filtereinstellungen mit der EnableIPSecMethode konfigurieren. EnableIPFilterSec ist eine statische Methode, die für alle Instanzen der Klasse Win32_NetworkAdapterConfiguration (also für alle Netzwerkadapter) gilt. Dies bedeutet, dass Sie die Get()-Methode des SwbemServices-Objekts zum Abrufen der Klasse Win32_NetworkAdapterConfiguration verwenden können, statt die Instanzen der Klasse mithilfe der ExecQuery()-Methode abzurufen. Anstatt die Methode einfach ohne Parameter aufzurufen, wie bei EnableDHCP, müssen Sie der IPFilterSecurityEnabled-Eigenschaft einen booleschen Wert (True oder False) zuweisen. Wenn das Skript nur statische Methoden aufruft, können Sie auch kompaktere Möglichkeiten der Bindung an die Klasse Win32_NetworkAdapterConfiguration nutzen. Sie können beispielsweise eine der folgenden Zeilen verwenden:
Set objNicConfig = GetObject("winmgmts:\\" & strComputer & _ "\root\cimv2:Win32_NetworkAdapterConfiguration") Set objNicConfig = GetObject("winmgmts:").Get _ ("Win32_NetworkAdapterConfiguration")

Schritte zur Skripterstellung Vorsicht Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen. Das Skript in Listing 45 aktiviert die IP-Filtersicherheit für alle installierten Netzwerkadapter mithilfe der EnableIPFilterSec-Methode der Klasse Win32_NetworkAdapterConfiguration. Mit dieser Methode wird die IPFilterSecurityEnabled-Eigenschaft auf True festgelegt. Unter Windows XP und Windows Server 2003 wird die IP-Filtersicherheit im Dialogfeld Erweiterte TCP/IP-Einstellungen auf der Registerkarte Optionen als TCP/IP-Filterung bezeichnet. 1.Erstellen Sie eine Variable zur Angabe des Computernamens. 2.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 3.Verwenden Sie die statische Get-Methode des SWbemServices-Objekts zum Abrufen eines SWbemObject-Objekts, das die Klasse Win32_NetworkAdapterConfiguration darstellt. Die an diesem Objekt vorgenommenen Änderungen gelten für alle Netzwerkadapter auf dem Computer. 4.Rufen Sie die statische EnableIPFilterSec-Methode der Klasse Win32_NetworkAdapterConfiguration auf, und weisen Sie ihr den booleschen Parameter True zu. 5.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine Erfolgsnachricht oder eine Fehlermeldung an. Listing 45 Ipfilter-enableipfilter.vbs

Seite 129 von 169

1 On Error Resume Next 2 3 strComputer = "." 4 5 Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 6 Set objNicConfig = objWMIService.Get("Win32_NetworkAdapterConfiguration") 7 8 If Not objNicConfig.IPFilterSecurityEnabled Then 9 intFilterReturn = objNicConfig.EnableIPFilterSec(True) 10 If intFilterReturn = 0 Then 11 WScript.Echo "IP Filtering enabled for all network adapters." 12 ElseIf intFilterReturn = 1 Then 13 WScript.Echo "IP Filtering enabled for all network adapters." & _ 14 VbCrLf & "Must reboot for changes to take effect." 15 Else 16 WScript.Echo "Unable to enable IP Filtering." 17 End If 18Else 19 WScript.Echo "IP Filtering already enabled." 20End If

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>ipfilter-enableipfilter.vbs IP Filter Security Enabled: IP Filtering enabled for all network adapters. Must reboot for changes to take effect.

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

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

Seite 131 von 169

1 On Error Resume Next 2 3 Const ALLOW_ALL = 0 4 arrPermittedTCPPorts = Array(ALLOW_ALL) 5 arrPermittedUDPPorts = Array(ALLOW_ALL) 6 arrPermittedIPProtocols = Array(ALLOW_ALL) 7 8 strComputer = "." 9 10 Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 11Set colNicConfig = objWMIService.ExecQuery _ 12 ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True") 13 14 For Each objNicConfig in colNicConfig 15 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index 16 If objNicConfig.IPFilterSecurityEnabled Then intIPSecReturn = objNicConfig.EnableIPSec(arrPermittedTCPPorts, _ 17 arrPermittedUDPPorts, arrPermittedIPProtocols) 18 If intIPSecReturn = 0 Then 19 WScript.Echo " IP Filtering enabled for specified ports and protocols." 20 ElseIf intIPSecReturn = 1 Then 21 WScript.Echo " IP Filtering enabled for specified ports and protocols." _ 22 23 & VbCrLf & " Must reboot for changes to take effect." 24 Else 25 WScript.Echo " Unable to enable IP Filtering for " & _ 26 "specified ports and protocols." 27 End If 28 Else 29 WScript.Echo " IP Filtering not enabled. Must enable before " & _ 30 "specifying port and protocols." 31 End If 32Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausgabe wie die folgende angezeigt: C:\scripts>ipfilter-enableipsec.vbs Network Adapter 1 IP Filtering enabled for specified ports and protocols. Must reboot for changes to take effect.

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

• •

Der Wert von ALLOW_ALL ist eine Zeichenfolge mit der Zahl 0, die alle Ports oder Protokolle zulässt. Diese Konstante wird EnableIPSec als Parameter für die zulässigen UDP-Ports zugewiesen. Der Wert von ALLOW_NONE ist eine leere Zeichenfolge (""), die allen Ports oder Protokollen die Berechtigung verweigert. Diese Konstante wird EnableIPSec als Parameter für die zulässigen IPProtokolle zugewiesen.

Für die zulässigen TCP-Ports übergibt das Skript der Methode direkt zwei literale Zeichenfolgenwerte (80 und 443). Schritte zur Skripterstellung Vorsicht Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen. 1.Definieren Sie eine Konstante, um alle Ports und Protokolle zuzulassen (0), und definieren Sie eine Konstante, um keine Ports und Protokolle zuzulassen (leere Zeichenfolge). 2.Erstellen Sie eine Konstante für den Wert, der den gesamten Datenverkehr zulässt, und erstellen Sie eine Variable zur Angabe des Computernamens. 3.Legen Sie die boolesche Variable, die den Status der IPFilterSecurityEnabled-Eigenschaft angibt, auf False fest. 4.Weisen Sie Port 80 und Port 443 zum Array der zulässigen TCP-Ports zu. 5.Weisen Sie die ALLOW_NONE-Konstante zum Array der zulässigen UDP-Ports zu. 6.Weisen Sie die ALLOW_ALL-Konstante zu den Arrays der zulässigen IP-Protokolle zu. 7.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 8.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_NetworkAdapterConfiguration, wobei die WQL-Abfrage nach "WHERE IPEnabled = True" gefiltert wird. Die zurückgegebene Auflistung besteht aus allen Netzwerkadapterkonfigurationen auf dem Computer, für die IP aktiviert ist. 9.Führen Sie eine Iteration durch die Auflistung der Netzwerkadapter durch, und zeigen Sie die aktuellen TCP/IP-Filtereinstellungen an. 10.Wenn die IPFilterSecurityEnabled-Eigenschaft auf False festgelegt ist, rufen Sie die statische Get-Methode des SWbemServices-Objekts auf, um ein SWbemObject-Objekt abzurufen, das die Klasse Win32_NetworkAdapterConfiguration darstellt. Die an diesem Objekt vorgenommenen Änderungen gelten für alle Netzwerkadapter auf dem Computer. 11.Rufen Sie die EnableIPFilterSec-Methode der Klasse Win32_NetworkAdapterConfiguration in dem Klassenobjektverweis auf, und weisen Sie ihr den Parameter True zu.

Seite 133 von 169

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

Seite 134 von 169

1 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 Seite 135 von 169 WScript.Echo VbCrLf & " Network Adapter " & objNicConfig.Index & VbCrLf & _ " IP Filtering Enabled: " & objNicConfig.IPFilterSecurityEnabled WScript.Echo " TCP Ports:" If Not IsNull(objNicConfig.IPSecPermitTCPPorts) Then

Teil 8: Verwenden von fortgeschrittenen Verfahren für die Verwaltung von Netzwerken
Veröffentlicht: 07. Dez 2004

Neben Klassen wie Win32_NetworkAdapterConfiguration und und ihren Funktionen enthält WMI noch w Klassen und Funktionen, die sich insbesondere bei der Verwaltung von Netzwerkclients als nützlich erweisen Abschnitt befasst sich mit den fortgeschrittenen Skripterstellungstechniken und enthält die notwendigen Einzelschritte ebenso wie Beispielskripts für die folgenden Aufgaben:

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

Ändern von Netzwerkeinstellungen in der Registrierung

Auf die Windows-Registrierung einschließlich aller Einstellungen kann unter Verwendung des WMI-Anbiet die Systemregistrierung per Skript zugegriffen werden.

Diese fortgeschrittenen Skripterstellungstechniken können außer für die TCP/IP-Vernetzung auch für die Erst von Skripts für andere Bereiche der Systemverwaltung eingesetzt werden.

Koordinieren der Systemzeit über das Netzwerk

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

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

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

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

Win32_TimeZone, Win32_CurrentTime, Win32_LocalTime und Win32_UTCTime (die drei zuletzt gen sind unter Windows XP neu hinzugekommen) enthalten ebenfalls schreibgeschützte Eigenschaften, mit dene jede Komponente der Einstellungen von Datum und Uhrzeit, Zeitzone und Sommerzeit anzeigen lässt. Das SWbemDateTime-Objekt aus der WMI-Skriptingbibliothek, welches ebenfalls mit Windows XP neu eingeführt wurde, kann zudem in Verbindung mit den anderen Klassen verwendet werden, um Datums- und Uhrzeitobjekte zu manipulieren.

Win32_OperatingSystem

Tabelle 39 enthält eine Liste der schreibgeschützten Eigenschaften, die mit der Klasse Win32_OperatingSys die Verwaltung von Datums- und Uhrzeiteinstellungen bereitstehen. Tabelle 39 Datums- und Uhrzeiteigenschaften von "Win32_OperatingSystem"
Eigenschaft Typ Beschreibung Seite 136 von 169

CurrentTimeZone (schreibgeschützt) LocalDateTime (schreibgeschützt)

sint16

Gibt den Offset des Betriebssystems von GMT (Greenwic Time) in Minuten an. Die Zahl ist positiv, negativ oder N

datetime

Das vom Betriebssytem verwendete Format für Datum un 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. D 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 geschrieb werden können, um Datums- und Uhrzeiteinstellungen zu verwalten. Tabelle 41 Datums- und Uhrzeiteigenschaften von "Win32_ComputerSystem"
Eigenschaft Typ Beschreibung

CurrentTimeZone (Lesen/Schreiben) DaylightInEffect (schreibgeschützt) EnableDaylightSavingsTime (Lesen/Schreiben) Nur Windows XP und Windows Server 2003

sint16 Einheit: Minuten Boolean-Wert

Gibt den Offset des Computersystems von UTC (Coordin Universal Time) in Minuten an. Sommerzeitmodus ist aktiviert.

Boolean-Wert

Aktiviert die Sommerzeit (Daylight Saving Time, DST) a einem Computer. Der Wert "Wahr" gibt an, dass die Syste zu Beginn oder Ende der Sommerzeit eine Stunde zurück vorgestellt wird. Der Wert "Falsch" gibt an, dass die Syste zu Beginn oder Ende der Sommerzeit keine Stunde zurüc vorgestellt wird. Der Wert NULL gibt an, dass der Status auf dem System unbekannt ist.

Win32_TimeZone

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

Seite 137 von 169

Win32_CurrentTime

Anstelle dieser Klasse empfiehlt sich die Verwendung der Klassen Win32_LocalTime oder Win32_UTCTim Neu in Windows XP und Windows Server 2003

Als abstrakte Klasse ohne Instanzen dient Win32_CurrentTime als Vorlage für die anderen Zeitklassen. Sie beschreibt einen bestimmten Zeitpunkt über Elemente wie Sekunden, Minuten, Stunden, Tagen, Tagen der W Woche im Monat, Monaten, Quartalen und Jahren. Beachten Sie, dass die Eigenschaft Milliseconds im SDK für diese Klasse aufgeführt wird, jedoch noch nicht implementiert wurde.

Die Klassen Win32_LocalTime und Win32_UTCTime erben jeweils von der Klasse Win32_CurrentTime

Win32_LocalTime
Neu in Windows XP und Windows Server 2003

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

Win32_UTCTime
Neu in Windows XP und Windows Server 2003

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

Objekt "SWbemDate Time" aus der WMI-Skriptingbibliothek
Neu in Windows XP und Windows Server 2003

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

VBScript-Funktion "Now"

Diese Funktion extrahiert das aktuelle Systemdatum und die Systemuhrzeit des Computers mithilfe eines Skr

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

Das nachstehende Skript ruft die aktuelle Systemzeit eines Computers mithilfe der VBScript-Funktion Now a Listing 52 Time-get.vbs
1WScript.Echo "Current Date and Time: " & Now

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausga die folgende angezeigt:
Seite 138 von 169

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

Abrufen der Ortszeit mithilfe von WMI

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

Mit Listing 53 wird die Ortszeit eines Computers mit der WMI-Klasse Win32_LocalTime abgerufen. Diese K wurde für Windows XP neu eingeführt, daher kann das Skript nur unter Windows XP und Windows Server 2 ausgeführt werden.

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

2.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cim legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 3.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_LocalTime.

Hiermit wird eine aus einem Objekt bestehende Auflistung zurückgegeben, die die Ortszeit auf dem Compu repräsentiert.

4.Verwenden Sie die Eigenschaften des LocalTime-Objekts zum Anzeigen von Monat, Tag, Jahr, Quartal, W Monat, Tag der Woche und Uhrzeit. Listing 53 Time-get-local.vbs
1 On Error Resume Next 2 3 strComputer = "." 4 Set objWMIService = GetObject("winmgmts:" _ 5 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 6 Set colLocalTimes = objWMIService.ExecQuery("Select * from Win32_LocalTime") 7 8 For Each objLocalTime in colLocalTimes 9 Wscript.Echo "Date: " & objLocalTime.Month & "/" & objLocalTime.Day & _ 10 "/" & objLocalTime.Year 11 Wscript.Echo "Quarter: " & objLocalTime.Quarter 12 Wscript.Echo "Week In the Month: " & objLocalTime.WeekInMonth 13 Wscript.Echo "Day Of the Week: " & objLocalTime.DayOfWeek 14 Wscript.Echo "Time: " & objLocalTime.Hour & ":" & objLocalTime.Minute & _ 15 ":" & objLocalTime.Second 16Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausga die folgende angezeigt: C:\scripts>time-get-local.vbs Date: 5/19/2004
Seite 139 von 169

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

Abrufen der UTC-Zeit mithilfe von WMI

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

Mit Listing 54 wird auf einem Computer unter Verwendung der WMI-Klasse Win32_UTCTime die aktuelle abgerufen. Wie bei der Klasse Win32_LocalTime wird auch bei Win32_UTCTime die Zeit im 24-Stundendargestellt. Diese Klasse wurde für Windows XP neu eingeführt, daher kann das Skript nur unter Windows X Windows Server 2003 ausgeführt werden. 1.Erstellen Sie eine Variable zur Angabe des Computernamens.

2.Verwenden Sie einen GetObject-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cim legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 3.Verwenden Sie die ExecQuery-Methode zum Abfragen der Klasse Win32_LocalTime.

Hiermit wird eine aus einem Objekt bestehende Auflistung zurückgegeben, die die UTC auf dem jeweiligen Computer repräsentiert.

4.Verwenden Sie die Eigenschaften des UTC-Objekts zum Anzeigen von Monat, Tag, Jahr, Quartal, Woche i Monat, Tag der Woche und Uhrzeit. Listing 54 Time-get-utc.vbs
1 On Error Resume Next 2 3 strComputer = "." 4 Set objWMIService = GetObject("winmgmts:" _ 5 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 6 Set colUTCTimes = objWMIService.ExecQuery("Select * from Win32_UTCTime") 7 8 For Each objUTCTime in colUTCTimes Wscript.Echo "Date: " & objUTCTime.Month & "/" & objUTCTime.Day & _ 9 10 "/" & objUTCTime.Year 11 Wscript.Echo "Quarter: " & objUTCTime.Quarter 12 Wscript.Echo "Week In the Month: " & objUTCTime.WeekInMonth 13 Wscript.Echo "Day Of the Week: " & objUTCTime.DayOfWeek 14 Wscript.Echo "Time: " & objUTCTime.Hour & ":" & objUTCTime.Minute & _ 15 ":" & objUTCTime.Second 16Next

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausga die folgende angezeigt:
Seite 140 von 169

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

Abrufen der Uhrzeit von einem Remotecomputer

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

Vergleichen der Ortszeiten zweier Computer

Eine Möglichkeit zum Vergleichen von Systemdatum und -uhrzeit auf zwei Computern in der gleichen Zeitzo die LocalDateTime-Eigenschaft der Klasse Win32_OperatingSystem bereit. Diese schreibgeschützte Eigen gibt die lokale Datums- und Uhrzeiteinstellung des Betriebssystems einschließlich des Offsets von der GMT (Greenwich Mean Time) zurück, wodurch die Zeitzone angegeben wird. Diese Vorgehensweise funktioniert a Netzwerken, in denen Computer mit Betriebssystemen vor Windows XP und Windows Server 2003 betrieben werden.

Zum Vergleichen von Datum und Uhrzeit auf Computern in unterschiedlichen Zeitzonen kann dieses Skript z Kompensation der Zeitzonen angepasst werden, indem der Unterschied zwischen den letzten vier Ziffern des LocalDateTime zurückgegebenen Datum-/Uhrzeitwertes berechnet und angewendet wird. Diese Ziffern begi mit einem positiven oder negativen Vorzeichen, worauf ein dreistelliger Offsetwert folgt, der die Anzahl der M angibt, um die die örtliche Zeitzone von UTC abweicht.

Optional können die Angaben mit dem von der Klasse Win32_UTCTime zurückgegebenen Wert verglichen Die so ermittelten Datums- und Uhrzeitangaben sind auf zwei synchronisierten Computern gleich, ungeachtet Zeitzone. Diese Klasse wird mit Windows XP und Windows Server 2003 neu eingeführt. Schritte zur Skripterstellung

Listing 55 ermöglicht den Vergleich von Datum und Uhrzeit auf zwei Computern, entweder auf einem lokale einem Remotecomputer oder auf zwei Remotecomputern. 1.Erstellen Sie Variablen zur Angabe der Namen der beiden Computer.

2.Verwenden Sie auf jedem der beiden Computer einen GetObject-Aufruf zum Herstellen einer Verbindung WMI-Namespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 3.Verwenden Sie zudem auf beiden Computern die ExecQuery-Methode zum Abfragen der Klasse Win32_OperatingSystem. Hiermit werden zwei Auflistungen von Betriebssystemobjekten mit je einem Objekt pro Auflistung zurückgegeben.

4.Rufen Sie nach dem Eintreffen des Rückgabewertes jedes ExecQuery-Aufrufs die VBScript-Funktion No
Seite 141 von 169

und weisen Sie die Sekunden jeder Zeitangabe einer Variablen zu. Die Funktion Now gibt das Systemdatum und die Systemuhrzeit zum Zeitpunkt der Ausführung zurück.

5.Wenn der Unterschied zwischen den beiden Zeitvariablen nicht 0 ist, weisen Sie diesen einer Variablen zu ist der Unterschied zwischen den Zeiten, zu denen die Ausführung der beiden Abfragen der Klasse Win32_OperatingSystem beendet war.

Die mit der LocalDateTime-Eigenschaft auf jedem Computer abgerufene Zeit ist von dem exakten Zeitpu abhängig, zu dem die Abfrage ausgeführt wird.

6.Durchlaufen Sie jedes Betriebssystemobjekt in der Auflistung auf dem ersten Computer mit einer For Eac Schleife. 7.Durchlaufen Sie innerhalb der ersten For Each-Schleife jedes Betriebssystemobjekt in der Auflistung auf zweiten Computer mit einer verschachtelten For Each-Schleife. 8.Rufen Sie mithilfe der LocalDateTime-Eigenschaft die lokale Systemzeit von beiden Computern ab.

9.Kürzen Sie die von LocalDateTime zurückgegebenen Datums-/Uhrzeitobjekte auf die Datums-, StundenMinutenwerte, und wenn es eine Differenz zwischen den beiden von Now zurückgegebenen Werten gibt, p Sie anhand dieser Abweichung die erste Zeit an, bevor Sie beide Zeiten vergleichen.

10.Rufen Sie die Funktion WMIDateToString auf, um die beiden angepassten Systemdatums- und -uhrzeita in einem besser lesbaren Format anzuzeigen. Weitere Informationen über WMIDateToString finden Sie im Abschnitt "Anzeigen von DHCPClientinformationen" an früherer Stelle in diesem Dokument.

11.Vergleichen Sie die beiden angepassten Datums- und Uhrzeitwerte, und geben Sie das Resultat des Vergle aus.

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

Seite 142 von 169

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

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausga die folgende angezeigt: C:\scripts>time-compare.vbs Adjusted time on .: 5/19/2004 5:01:26 PM Adjusted time on server1: 5/19/2004 5:05:52 PM
Seite 143 von 169

Dates and times are not equal.

Festlegen der Uhrzeit auf einem Computer mithilfe von Befehlszeilentools

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

Date.exe verwendet die folgende Syntax:
dateDatumTag / Monat / Jahr

Beispielsweise wird das Systemdatum mit der folgenden Befehlszeile auf den 8. März 2004 festgelegt:
date 03/08/2004

Wird dieser Befehl ohne Argumente ausgeführt, gibt er das aktuelle Systemdatum zurück.

Time.exe verwendet die folgende Syntax, wobei Stunden: Minuten im 24-Stunden-Format angegeben wird:
timeStunden: Minuten

Beispielsweise wird die Systemuhrzeit mit der folgenden Befehlszeile auf den 18:25 festgelegt:
time 18:25

Wird dieser Befehl ohne Argumente ausgeführt, gibt er die aktuell Systemuhrzeit zurück.

Die Befehlszeilentools Date.exe und Time.exe stehen unter allen Windows-Betriebssystemen zur Verfügung Der Befehl net time bietet Optionen zur Synchronisation der Zeit mit einem Zeitserver.

Festlegen der Uhrzeit auf einem Computer mithilfe von WMI

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

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

Die Klasse Win32_OperatingSystem enthält zudem eine Methode, SetDateTime(), die ein Datum und eine in Form eines DATETIME-Objekts als Parameter akzeptiert und diese Angabe als aktuelles Datum und Uhrz Computers festlegt. SetDateTime() gibt den Wert 0 zurück, wenn die Ausführung erfolgreich war, im Falle e Fehlers eine beliebige andere Zahl. Zum Ausführen von SetDateTime() muss das Script von einem Benutzer ausgeführt werden, dessen Anmeldeinformationen das Recht SE_SYSTEMTIME_NAME umfassen.

Das folgende Skript verwendet die LocalDateTime-Eigenschaft und die SetDateTime()-Methode zum Festle eines neuen Datums und einer neuen Uhrzeit auf einem lokalen oder einem Remotecomputer.

Das neue Datum und die neue Uhrzeit müssen im Format DATETIME vorliegen, einem WMI-Datentyp, bei d sich um eine Zeichenfolge mit fester Länge handelt, die in WMI ein bestimmtes Datum und eine bestimmte U repräsentiert. Die Zeichenfolge hat folgendes Format:
yyyymmddHHMMSS.mmmmmmsUUU

In Tabelle 42 sind die gültigen Werte für die DATETIME-Felder aufgeführt. Sämtliche Feldinhalte müssen d der Tabelle angegebenen Feldlängen entsprechen. Verwenden Sie im Bedarfsfall führende Nullen.
Seite 144 von 169

Tabelle 42 Beschreibungen zum DATETIME-Feld
Feld Beschreibung

jjjj mm tt

Vierstellige Variable für die Jahreszahl (0000-9999) Zweistellige Variable für den Monat (01-12)

Zweistellige Variable für den Tag des Monats (01-31) Dieser Wert muss für den jeweiligen M geeignet sein. Beispielsweise ist ein 31. Februar ungültig. Allerdings muss Ihre Implementier Daten nicht auf Gültigkeit prüfen.

HH MM SS mmmmmm s UUU

Zweistellige Variable für die Stunde des Tages bei Verwendung der 24-Stunden-Uhr (00-23) Zweistellige Variable für die Minuten der Stunde (00-59) Zweistellige Variable für die Sekunden der Minute (00-59) Sechsstellige Variable für die Mikrosekunden der Sekunde (000000–999999) Pluszeichen (+) oder Minuszeichen (-), um einen positiven oder negativen Offset von UTC anzugeben.

Dreistelliger Offset, der die Anzahl der Minuten angibt, um die die Zeitzone von UTC abwei WMI ist es ratsam, jedoch nicht zwingend, Zeitangaben in GMT (mit einem UTC-Offset von umzuwandeln.

Zum Füllen nicht verwendeter Felder oder als Platzhalter kann das Sternchen (*) verwendet werden. Beispiels kann ein Datum und eine Uhrzeit mit unbestimmten Jahr in jedem beliebigen Jahr auftreten, wie im folgenden Beispiel:
****0416******.******+***

Soll ein Feld unbestimmt bleiben, muss das gesamte Feld mit Sternchen gefüllt werden. Das folgende Beispie gültige und ungültige Varianten der Verwendung von Sternchen:
19980416******.000000+*** 1998-04-16 ******:*** 199*0416******.000000+*** 199*-04-16 ******:*** ' Gültig ' Ungültig ' Ungültig ' Ungültig

Weitere Informationen über den Datentyp DATETIME finden Sie im WMI SDK im Abschnitt "Date and Tim Format", aus dem auch diese Erläuterung übernommen wurde. Weitere Informationen über das Arbeiten mit D und Uhrzeitangaben in Skripten enthalten die Abschnitte "Working with Dates and Times" in Kapitel 6 des W 2000 Scripting-Handbuchs unter /germany/technet/datenbank/articles/600362.mspx. Schritte zur Skripterstellung

Mit Listing 56 wird die Systemzeit auf einem lokalen oder Remotecomputer eingestellt. Dieses Skript zeigt, w SetDateTime-Methode der Klasse Win32_OperatingSystem eingesetzt wird. Allerdings ist die Genauigkeit dieser Vorgehensweise in der Regel auf die Minute und nicht auf die Sekunde beschränkt, da hierbei die korre im letzten Moment eingegeben werden muss. 1.Erstellen Sie eine Variable, und weisen Sie ihr den Namen eines Computers zu.

2.Erstellen Sie eine Variable, und weisen Sie ihr eine Zeichenfolge (im WMI-Format DATETIME) zu, die da Datum und die Uhrzeit repräsentiert, die festgelegt werden sollen. Ersetzen Sie kurz vor Ausführung des Sk das WMI DATETIME-Format durch die tatsächliche Uhrzeit, die festgelegt werden soll. Als Beispieldatum uhrzeit wird im Skript der 7. Mai 2004, 17:01 mit einem negativen Offset von 8 Stunden (480 Minuten) von
Seite 145 von 169

verwendet.

3.Verwenden Sie einen GetObject()-Aufruf zum Herstellen einer Verbindung zum WMI-Namespace root\cim und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. 4.Rufen Sei die ExecQuery-Methode zum Abfragen der Win32-OperatingSystem-Klasse auf.

Hiermit wird eine Auflistung bestehend aus einem Objekt zurückgegeben, das das Betriebssystem repräsent 5.Führen Sie für jedes Betriebssystemobjekt in der Auflistung die folgenden Aufgaben aus.

6.Rufen Sie die SetDateTime-Methode der Win32_OperatingSystem-Klasse auf, und übergeben Sie den Da /Uhrzeitwert.

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

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

9.Rufen Sie die Funktion WMIDateToString auf, um den Datums-/Uhrzeitwert in einem besser lesbaren Form anzuzeigen. Weitere Informationen über diese Funktion finden Sie im Abschnitt "Anzeigen von DHCPClientinformationen" an früherer Stelle in diesem Dokument. Listing 56 Time-set.vbs
1 On Error Resume Next 2 3 strComputer = "." 4 dtmNewDateTime = "20040520151300.000000-480" 5 Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate, " _ 6 & "(Systemtime)}!\\" & strComputer & "\root\cimv2") 7 Set colOSes = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem") 8 9 For Each objOS In colOSes 10 intSet = objOS.SetDateTime(dtmNewDateTime) 11 If intSet = 0 Then Wscript.Echo "Successfully set new date and time." 12 13 Else Wscript.Echo "Unable to set mew date and time." 14 15 End If 16Next 17 18 Set colOSes = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem") 19For Each objOS In colOSes 20 Wscript.Echo "New date and time: " & WMIDateToString(objOS.LocalDateTime) 21Next 22 23 '****************************************************************************** 24 25 Function WMIDateToString(dtmDate) 26WMIDateToString = CDate(Mid(dtmDate, 5, 2) & "/" & _ 27 Mid(dtmDate, 7, 2) & "/" & _ 28 Left(dtmDate, 4) & " " & _ 29 Mid(dtmDate, 9, 2) & ":" & _ 30 Mid(dtmDate, 11, 2) & ":" & _ 31 Mid(dtmDate, 13, 2)) 32End Function

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausga die folgende angezeigt:
Seite 146 von 169

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

Synchronisieren der Uhrzeiten auf zwei Computern

Der Betrieb eines Netzwerkes setzt häufig voraus, dass die Systemzeiten netzwerkübergreifend synchronisier werden. Einige Anwendungen wie solche, die Dateien basierend auf Zeitstempeln vergleichen, erfordern, das Zeiten auf unterschiedlichen Hosts weitestgehend übereinstimmen.

Bei den fortschrittlicheren Methoden zur Sicherstellung einer akkuraten und synchronisierten Uhrzeit im gesa Netzwerk kommen Tools zum Einsatz, die eine Synchronisation mit öffentlichen Zeitservern durchführen. In Abschnitt soll jedoch gezeigt werden, wie mithilfe eines einfache Skripts die Zeiten auf zwei Computern verg werden können und, sofern keine Übereinstimmung vorliegt, die Zeit auf dem Zielcomputer auf die Zeit des Referenzcomputers festgelegt werden kann. Bei dieser Vorgehensweise wird davon ausgegangen, dass bereits eine externe Quelle zugegriffen und auf dem Referenzcomputer die korrekte Zeit eingestellt wurde.

Mit einem komplexeren Skript könnte automatisch eine Referenzzeit von einer externen Quelle abgerufen und auf den Zielcomputern entsprechend eingestellt werden. Zwar wird diese Funktion von WMI nicht geboten, k jedoch über ein Befehlszeilentool oder eine Webanwendung ausgeführt werden, das oder die über die WSH E Methode ausgeführt wird.

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

In Listing 57 wird mithilfe der LocalDateTime-Eigenschaft der Klasse Win32_OperatingSystem die System (zeitzonenbereinigt) auf zwei Computern verglichen Auf jedem Computer zieht das Skript die vierzehn ganz befindlichen Zeichen von LocalDateTime heran (die, mit denen Datum und Uhrzeit sekundengenau angegeb werden) und vergleicht die gekürzten Zeichenfolgen

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

Bei Verwendung dieses Skripts ist die Genauigkeit der Zeitsynchronisation in der Regel auf die Minute und n die Sekunde beschränkt, da Netzwerklatenz und die Zeit zum Ausführen des Codes berücksichtigt werden mü Führen Sie dazu im Skript die folgenden Schritte aus: 1.Erstellen Sie Variablen zur Angabe der Namen der beiden Computer.

2.Verwenden Sie auf jedem der beiden Computer einen GetObject-Aufruf zum Herstellen einer Verbindung WMI-Namespace root\cimv2, und legen Sie den Parameter "impersonationLevel" auf "impersonate" fest. Beachten Sie, dass dieses Skript nicht die Netzwerkkonnektivität zum jeweiligen Computer prüft.
Seite 147 von 169

3.Verwenden Sie auf beiden Computern die ExecQuery-Methode zum Abfragen der Win32_OperatingSys Klasse. Hiermit werden zwei Auflistungen von Betriebssystemobjekten mit je einem Objekt pro Auflistung zurückgegeben.

4.Rufen Sie nach dem Eintreffen des Rückgabewertes jedes ExecQuery-Aufrufs die VBScript-Funktion No und weisen Sie die Sekunden jeder Zeitangabe einer Variablen zu. Die Funktion Now gibt das Systemdatum und die Systemuhrzeit zum Zeitpunkt der Ausführung zurück.

5.Weisen Sie die Differenz zwischen den beiden Zeitvariablen einer weiteren Variablen zu, die die Differenz zwischen den Zeiten repräsentiert, zu denen die Abfragen von Win32_OperatingSystem ausgeführt wurd Zeitpunkt, zu dem die jeweilige Abfrage ausgeführt wurde, bestimmt die Zeit, die die LocalDateTimeEigenschaft von diesem Computer abruft.

6.Wenn die Differenz zwischen den beiden Zeitvariablen nicht 0 beträgt, weisen Sie diese einer Variablen zu die Differenz zwischen den Zeiten repräsentiert, zu denen die Ausführung der beiden Abfragen von Win32_OperatingSystem abgeschlossen war.

Die mit der LocalDateTime-Eigenschaft auf jedem Computer abgerufene Zeit ist von dem exakten Zeitpu abhängig, zu dem die Abfrage ausgeführt wird.

7.Durchlaufen Sie jedes Betriebssystemobjekt in der Auflistung auf dem ersten Computer mit einer For Eac Schleife. 8.Durchlaufen Sie innerhalb der ersten For Each-Schleife jedes Betriebssystemobjekt in der Auflistung auf zweiten Computer mit einer verschachtelten For Each-Schleife. 9.Rufen Sie mithilfe der LocalDateTime-Eigenschaft die lokale Systemzeit von beiden Computern ab.

10.Weisen Sie die LocalDateTime-Eigenschaft des ersten (Referenz-)Computers einer Variablen zu, die verw wird, um die Zeit auf dem zweiten (Ziel-)Computer im Bedarfsfall einzustellen. 11.Kürzen Sie die von LocalDateTime zurückgegebenen Datums-/Uhrzeitobjekte auf den Datums-, StundenMinutenwert.

12.Falls es eine Abweichung zwischen den beiden Now-Werten gibt, verwenden Sie diese zum Anpassen der Referenzzeit, bevor Sie die beiden Zeiten vergleichen. 13.Vergleichen Sie die beiden angepassten Datums- und Uhrzeitwerte. 14.Wenn Datums- und Uhrzeitangaben gleich sind, geben Sie eine Meldung aus.

15.Wenn Datums- und Uhrzeitangaben nicht gleich sind, rufen Sie auf dem Zielcomputer die SetDateTime-M von Win32-OperatingSystem auf.

16.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine Erfolgs- oder Fehlermel an. Listing 57 Time-sync.vbs

Seite 148 von 169

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

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

Synchronisieren der Uhrzeiten auf mehreren Computern

Die Erweiterung des Zeitvergleichs von zwei auf eine beliebige Anzahl Computer gestaltet sich relativ einfac folgenden Skript wird grundlegend der gleiche Code wie in Time-sync.vbs verwendet. Allerdings wird eine L Computern aus einem Array abgerufen und dann eine Iteration durchgeführt, bei der die Systemzeiten mit der Referenzcomputers verglichen und im Bedarfsfall synchronisiert werden.

Das Skript verwendet einen groben Algorithmus für Zeitvergleich und Synchronisation und zeigt so eine Mög zum Synchronisieren von Computerzeiten mithilfe von Skripten auf. Wenn die Netzwerklatenz jedoch zu hoc
Seite 149 von 169

Weise von der Referenzzeit abweichen.

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

In Listing 58 wird die Systemzeit (zeitzonenbereinigt) auf mehreren Computern verglichen, deren Namen ode Adresse aus einem Array abgerufen werden. Wenn die Zeit auf einem der Computer nicht mit der Standardze übereinstimmt, wird sie vom Skript zurückgesetzt. 1.Erstellen Sie eine Variable zur Angabe des Namens des Referenzcomputers. 2.Erstellen Sie ein Array, das die Namen oder IP-Adressen der Zielcomputer aufnehmen soll.

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

4.Durchlaufen Sie das Array mit den Zielcomputern mit einer Schleife und führen Sie für jeden Computer di folgenden Aufgaben durch.

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

6.Verwenden Sie auf jedem Computer die ExecQuery-Methode zum Abfragen der Win32_OperatingSyste Klasse. Hiermit werden zwei Auflistungen von Betriebssystemobjekten mit je einem Objekt pro Auflistung zurückgegeben.

7.Rufen Sie nach dem Eintreffen des Rückgabewertes jedes ExecQuery-Aufrufs die VBScript-Funktion No und weisen Sie die Sekunden jeder Zeitangabe einer Variablen zu. Die Funktion Now gibt das Systemdatum und die Systemuhrzeit zum Zeitpunkt der Ausführung zurück.

8.Weisen Sie die Differenz zwischen den beiden Zeitvariablen einer weiteren Variablen zu, die die Differenz zwischen den Zeiten repräsentiert, zu denen die Abfragen von Win32_OperatingSystem ausgeführt wurd Zeitpunkt, zu dem die jeweilige Abfrage ausgeführt wird, bestimmt die Zeit, die von der LocalDateTimeEigenschaft auf diesem Computer zurückgegeben wird.

9.Wenn der Unterschied zwischen den beiden Zeitvariablen nicht 0 ist, weisen Sie diesen einer Variablen zu Variable repräsentiert den Unterschied zwischen den Zeiten, zu denen die Ausführung der beiden Win32_OperatingSystem-Abfragen beendet war.

Die mit der LocalDateTime-Eigenschaft auf jedem Computer abgerufene Zeit ist von dem exakten Zeitpu abhängig, zu dem die Abfrage ausgeführt wird.

10.Durchlaufen Sie jedes Betriebssystemobjekt in der Auflistung auf dem ersten Computer mit einer For Eac Schleife. 11.Durchlaufen Sie innerhalb der ersten For Each-Schleife jedes Betriebssystemobjekt in der Auflistung auf zweiten Computer mit einer verschachtelten For Each-Schleife. 12.Rufen Sie mithilfe der LocalDateTime-Eigenschaft die lokale Systemzeit von beiden Computern ab.
Seite 150 von 169

13.Weisen Sie die LocalDateTime-Eigenschaft des ersten (Referenz-)Computers einer Variablen zu, die verw wird, um die Zeit auf dem zweiten (Ziel-)Computer im Bedarfsfall einzustellen. 14.Kürzen Sie die von LocalDateTime zurückgegebenen Datums-/Uhrzeitobjekte auf den Datums-, StundenMinutenwert.

15.Falls es eine Abweichung zwischen den beiden Now-Werten gibt, verwenden Sie diese zum Anpassen der Referenzzeit, bevor Sie die beiden Zeiten vergleichen. 16.Vergleichen Sie die beiden angepassten Datums- und Uhrzeitwerte. 17.Wenn Datums- und Uhrzeitangaben gleich sind, geben Sie eine Meldung aus.

18.Wenn Datums- und Uhrzeitangaben nicht gleich sind, rufen Sie auf dem Zielcomputer die SetDateTime-M von Win32-OperatingSystem auf.

19.Überprüfen Sie den von der Methode zurückgegebenen Wert, und zeigen Sie eine Erfolgs- oder Fehlermel an. Listing 58 Time-sync-multi.vbs

Seite 151 von 169

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

Seite 152 von 169

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

Ändern von Netzwerkeinstellungen in der Registrierung

TCP/IP-Netzwerkeinstellungen können unter Verwendung der Registrierung abgerufen und geändert werden. Registrierung enthält einige Netzwerkeinstellungen, auf die nicht mithilfe von WMI-Klassen, Befehlszeilento über die Windows-Oberfläche zugegriffen werden kann.

Verwenden Sie zum Bearbeiten der Registrierung die Klasse StdRegProv des WMI-Anbieters für die Systemregistrierung. Diese Klasse befindet sich im Namespace \root\default, wohingegen sich alle Win32_die bis dato in diesem Dokument besprochen wurden, im Namespace \root\cimv2 befinden.

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

Ändern Sie zur Verwendung dieser Klasse die Zeilen in Skripts, mit denen die Verbindung zu WMI hergestel wie folgt:
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ strComputer & "\root\default:StdRegProv")

Geben Sie im GetObject-Aufruf, mit dem die Bindung zum WMI-Dienst hergestellt (ein Verweis erzeugt) w Namespace \root\default (anstelle des Namespaces \root\cimv2) als Teil des Objektpfades an. Erstellen Sie anschließend direkt eine Instanz der Klasse, indem Sie einen Doppelpunkt und den Namen der StdRegProv-K an das Ende des Objektpfades anhängen. Die Klasse StdRegProv gibt einen Verweis auf eine einzelne Instanz in Form eines SWbemObject-Objekts
Seite 153 von 169

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

Wenn Sie mit den Objekten SWBemObject und SWBemObjectSet als Teil des Objektmodells der WMISkriptingbibliothek noch nicht vertraut sind, schlagen Sie in den folgenden Referenzdokumenten nach:
• •

Unter dem Thema "Die WMI Scripting-Bibliothek " im Kapitel 6 des Windows 2000 Scripting-Handbuches /germany/technet/datenbank/articles/600362.mspx#E01M0AA. Unter dem Thema "Scripting API for WMI" in der WMI-Referenz im WMI SDK unter http://go.microsoft.com/fwlink/?LinkId=29998 (englischsprachig).

Die Klasse StdRegProv weist keine Eigenschaften auf. Tabelle 43 enthält Beschreibungen der Methoden der StdRegProv. Tabelle 43 Methoden von "StdRegProv"
Methode Beschreibung

CheckAccess CreateKey DeleteKey DeleteValue EnumKey EnumValues GetBinaryValue GetDWORDValue GetExpandedStringValue GetMultiStringValue GetStringValue SetBinaryValue SetDWORDValue SetExpandedStringValue SetMultiStringValue SetStringValue

Überprüft, ob der Benutzer über die angegebenen Zugriffsrechte ve Erstellt einen Unterschlüssel. Löscht einen Unterschlüssel. Löscht einen benannten Wert. Erstellt eine Auflistung der Unterschlüssel. Erstellt eine Auflistung der benannten Werte eines Schlüssels. Ruft den Binärdatenwert eines benannten Wertes ab. Ruft den DWORD-Datenwert eines benannten Wertes ab.

Ruft den Datenwert der erweiterten Zeichenfolge eines benannten W ab.

Ruft die Datenwerte mehrerer Zeichenfolgen eines benannten Wert Ruft den Datenwert der Zeichenfolge eines benannten Wertes ab. Legt den Binärdatenwert eines benannten Wertes fest. Legt den DWORD-Datenwert eines benannten Wertes fest.

Legt den Datenwert der erweiterten Zeichenfolge eines benannten W fest.

Legt die Werte mehrerer Zeichenfolgen eines benannten Wertes fes Legt den Zeichenfolgewert eines benannten Wertes fest.
Seite 154 von 169

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

0 bedeutet: erfolgreicher Abschluss. Zahlen größer als 0 weisen auf einen Fehler hin.

Weitere Informationen über die Klasse StdRegProv und deren Methoden finden Sie unter "StdRegProv" im W SDK unter http://go.microsoft.com/fwlink/?LinkId=29999 (englischsprachig).

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

Die Skripts in diesem Abschnitt rufen Zeichenfolgen- (REG_SZ) und DWORD-Werte (REG_DWORD, eine Ganzzahl) aus der Registrierung ab und legen diese ebenso fest. Zum Abrufen und Festlegen von Zeichenfolg DWORD-Typen werden verschiedene Methoden verwendet. Die Klasse StdRegProv umfasst darüber hinaus weitere Methoden für Mehrfachzeichenfolgen-, erweiterte Zeichenfolgen- und Binärwerte. Der Eintrag mit der Zeichenfolge (Hostname) lautet: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Hostname Der Eintrag mit dem DWORD-Wert (DeadGWDetectDefault) lautet:

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

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet Enthält globale TCP/IP-Konfigurationseinstellun \Services\Tcpip\Parameters die sich auf alle Netzwerkadapter im Computer beziehen.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet Enthält TCP/IP-Konfigurationseinstellungen für \Services\Tcpip\Parameters\Interfaces spezifischen Adapter (Schnittstelle) in seinen Unterschlüsseln, die mit GUIDs bezeichnet sind

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet Enthält Konfigurationseinstellungen für DHCP\Services\Dhcp\Parameters\Options Optionen in seinen Unterschlüsseln.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet Enthält Konfigurationseinstellungen für den lok \Services\Dnscache\Parameters DNS-Cacheauflösungsdienst des DNS-Clients.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet Enthält globale Konfigurationseinstellungen für \Services\NetBT\Parameters NetBIOS über TCP/IP und WINS, die sich auf a Netzwerkadapter im Computer beziehen.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet Enthält Konfigurationseinstellungen für NetBIO TCP/IP und WINS für jeden spezifischen Adapt
Seite 155 von 169

\Services\NetBT\Parameters\Interfaces

(Schnittstelle) in seinen Unterschlüsseln, die mit bezeichnet sind.

Weitere Informationen über die Verwendung von Skripts zum Konfigurieren der Registrierung sowie detaillie Informationen über zahlreiche Registrierungseinträge finden Sie in den nachstehenden Referenzdokumenten:
• •

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

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

Abrufen eines Zeichenfolgenwertes aus der Registrierung mithilfe von WMI

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

2.Erstellen Sie eine Variable, und weisen Sie ihr den Namen des Computers zu. Der Name kann entweder aus Hostnamen oder einer IP-Adresse bestehen. 3.Erstellen Sie Variablen für den Pfad des Registrierungsschlüssels und den Namen des Eintrags.

4.Verwenden Sie einen GetObject-Aufruf, um auf dem angegebenen Computer eine Verbindung zum WMINamespace root\default herzustellen, legen Sie den Parameter "impersonationLevel" auf "impersonate" fes erstellen Sie eine Instanz der Klasse StdRegProv, und weisen Sie diese der Variablen objReg zu.

5.Rufen Sie die GetStringValue-Methode der Klasse StdRegProv auf, übergeben Sie Parameter für Unterstr Schlüsselpfad und Eintragsname, und weisen Sie den Ausgabeparameter für den Zeichenfolgenwert der Var strValue zu. 6.Zeigen Sie den Eintragsnamen und dessen Zeichenfolgenwert an. Listing 59 Reg-get-string.vbs
1 Const HKEY_LOCAL_MACHINE = &H80000002 2 strComputer = "." 3 strKeyPath = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" 4 strEntryName = "Hostname" 5 6 Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ 7 strComputer & "\root\default:StdRegProv") 8 9 objReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue 10Wscript.Echo strEntryName & ": " & strValue

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausga die folgende angezeigt: C:\scripts>reg-get-string.vbs Hostname: client1
Seite 156 von 169

Abrufen eines numerischen Wertes aus der Registrierung mithilfe von WMI

Dieses Skript zeigt, wie eine TCP/IP-Netzwerkeinstellung (DeadGWDetectDefault) aus einem Registrierung abgerufen wird, dessen Wert ein DWORD (REG_DWORD, eine 32-Bit-Ganzzahl) ist. Zu diesem Zweck verw das Skript die GetDWORDValue-Methode der Klasse StdRegProv des WMI-Anbieters für die Systemregis Schritte zur Skripterstellung 1.Erstellen Sie eine Konstante zur Aufnahme des Hexadezimalwertes für HKEY_LOCAL_MACHINE.

2.Erstellen Sie eine Variable, und weisen Sie ihr den Namen des Computers zu. Der Name kann entweder aus Hostnamen oder einer IP-Adresse bestehen. 3.Erstellen Sie Variablen für den Pfad des Registrierungsschlüssels und den Namen des Eintrags.

4.Verwenden Sie einen GetObject-Aufruf, um auf dem angegebenen Computer eine Verbindung zum WMINamespace root\default herzustellen, legen Sie den Parameter "impersonationLevel" auf "impersonate" fes erstellen Sie eine Instanz der Klasse StdRegProv, und weisen Sie diese der Variablen objReg zu.

5.Rufen Sie die GetDWORDValue-Methode der Klasse StdRegProv auf, übergeben Sie Parameter für Unterstruktur, Schlüsselpfad und Eintragsname, und weisen Sie den Ausgabeparameter für den DWORD-W Variablen strValue zu. 6.Zeigen Sie den Eintragsnamen und dessen DWORD-Wert an. Listing 60 Reg-get-dword.vbs
1 Const HKEY_LOCAL_MACHINE = &H80000002 2 strComputer = "." 3 strKeyPath = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" 4 strEntryName = "DeadGWDetectDefault" 5 6 Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ 7 strComputer & "\root\default:StdRegProv") 8 9 objReg.GetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,dwValue 10Wscript.Echo strEntryName & ": " & dwValue

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausga die folgende angezeigt: C:\scripts>reg-get-dword.vbs DeadGWDetectDefault: 1

Festlegen eines Zeichenfolgenwertes in der Registrierung mithilfe von WMI

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

2.Erstellen Sie eine Variable, und weisen Sie ihr den Namen des Computers zu. Der Name kann entweder aus Hostnamen oder einer IP-Adresse bestehen.
Seite 157 von 169

3.Erstellen Sie Variablen für den Pfad des Registrierungsschlüssels und den Namen des Eintrags.

4.Verwenden Sie einen GetObject-Aufruf, um auf dem angegebenen Computer eine Verbindung zum WMINamespace root\default herzustellen, legen Sie den Parameter "impersonationLevel" auf "impersonate" fes erstellen Sie eine Instanz der Klasse StdRegProv, und weisen Sie diese der Variablen objReg zu. 5.Rufen Sie die SetStringValue-Methode der Klasse StdRegProv auf, und übergeben Sie Parameter für Unterstruktur, Schlüsselpfad, Eintragsname und Zeichenfolgenwert.

6.Rufen Sie die GetStringValue-Methode der Klasse StdRegProv auf, übergeben Sie Parameter für Unterstr Schlüsselpfad und Eintragsname, und weisen Sie den Ausgabeparameter für den Zeichenfolgenwert der Var strValue zu. 7.Zeigen Sie den Eintragsnamen und dessen Zeichenfolgenwert an. Listing 61 Reg-set-string.vbs
1 Const HKEY_LOCAL_MACHINE = &H80000002 2 strComputer = "." 3 strKeyPath = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" 4 strEntryName = "Domain" 5 strValue = "fabrikam.com" 6 7 Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ 8 strComputer & "\root\default:StdRegProv") 9 10 objReg.SetStringValue HKEY_LOCAL_MACHINE, strKeyPath, strEntryName, strValue 11 12 objReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue 13Wscript.Echo strEntryName & ": " & strValue

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausga die folgende angezeigt: C:\scripts>reg-set-string.vbs Domain: fabrikam.com

Festlegen eines numerischen Wertes in der Registrierung mithilfe von WMI

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

2.Erstellen Sie eine Variable, und weisen Sie ihr den Namen des Computers zu. Der Name kann entweder aus Hostnamen oder einer IP-Adresse bestehen. 3.Erstellen Sie Variablen für den Pfad des Registrierungsschlüssels und den Namen des Eintrags.

4.Verwenden Sie einen GetObject-Aufruf, um auf dem angegebenen Computer eine Verbindung zum WMINamespace root\default herzustellen, legen Sie den Parameter "impersonationLevel" auf "impersonate" fes erstellen Sie eine Instanz der Klasse StdRegProv, und weisen Sie diese der Variablen objReg zu. 5.Rufen Sie die SetDWORDValue-Methode der Klasse StdRegProv auf, und übergeben Sie Parameter für
Seite 158 von 169

Unterstruktur, Schlüsselpfad, Eintragsname und DWORD-Wert.

6.Rufen Sie die GetDWORDValue-Methode der Klasse StdRegProv auf, übergeben Sie Parameter für Unterstruktur, Schlüsselpfad und Eintragsname, und weisen Sie den Ausgabeparameter für den DWORD-W Variablen dwValue zu. 7.Zeigen Sie den Eintragsnamen und dessen DWORD-Wert an. Listing 62 Reg-set-dword.vbs
1 Const HKEY_LOCAL_MACHINE = &H80000002 2 strComputer = "." 3 strKeyPath = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" 4 strEntryName = "DeadGWDetectDefault" 5 dwValue = 1 6 7 Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ 8 strComputer & "\root\default:StdRegProv") 9 10 objReg.SetDWORDValue HKEY_LOCAL_MACHINE, strKeyPath, strEntryName, dwValue 11 12 objReg.GetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,dwValue 13Wscript.Echo strEntryName & ": " & dwValue

Wenn Sie Cscript.exe zur Ausführung dieses Skripts verwenden, wird im Befehlsfenster eine ähnliche Ausga die folgende angezeigt: C:\scripts>reg-set-dword.vbs DeadGWDetectDefault: 1

Tools für die Netzwerkverwaltung mit fortgeschrittenen Skriptingtechniken

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

Befehlszeilentools Ping.exe Befehlszeilentools Remote.exe Befehlszeilentools Remote Command Service (Rcmd.exe und Rcmdsvc.exe) Befehlszeilentools Remote Console Befehlszeilentools Rsh.exe und Rshsvc.exe: TCP/IP Remote Shell Service Befehlszeilentools Telnet.exe Befehlszeilentools Timezone.exe: Tool zur Aktualisierung der Sommerzeit Befehlszeilentools Tzedit.exe: Zeitzoneneditor

Windows-Betriebssysteme1 Windows Server 2003-Supporttools Windows 2000 Resource Kit Windows 2000 Resource Kit Windows 2000 Resource Kit Windows-Betriebssysteme Windows 2000 Resource Kit Windows 2000 Resource Kit (GUI-Tool)
Seite 159 von 169

Befehlszeilentools Wsremote.exe WSH WMI WMI WMI WMI WMI WMI WMI WMI WMI WMI WMI ADSI WshController StdRegProv SWbemDateTime Win32_ComputerSystem Win32_CurrentTime Win32_LocalTime Win32_NetworkAdapterConfiguration Win32_NetworkAdapter Win32_OperatingSystem Win32_PingStatus Win32_TimeZone Win32_UTCTime Keines

Windows XP-Supporttools

Nur Windows XP und Windows Server 2003

Nur Windows XP und Windows Server 2003 Nur Windows XP und Windows Server 2003

Nur Windows XP und Windows Server 2003

Nur Windows XP und Windows Server 2003

1Windows 2000, Windows XP und Windows Server 2003. Kann auch in anderen Windows-Versionen vorhan sein.

Tabelle 46 enthält eine Liste der Registrierungsschlüssel zum Verwalten des Netzwerkes bei Verwendung von fortgeschrittenen Verfahren zur Skripterstellung.

Vorsicht Durch eine fehlerhafte Bearbeitung der Registrierung kann ernsthafter Schaden am System verursacht werden Sie Änderungen an der Registrierung vornehmen, sollten Sie eine Sicherungskopie aller wichtigen Daten auf Computer erstellen. Tabelle 46 Registrierungsunterschlüssel für das Verwalten von Netzwerken mit fortgeschritten Skriptingtechniken
Registrierungsunterschlüssel

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dhcp\Parameters\Options HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces

Teil 9: Szenario für das Hinzufügen neuer Clients
Veröffentlicht: 07. Dez 2004 Seite 160 von 169

In Organisationen, in deren Netzwerken eine hohe Fluktuation unter den Netzwerkclients herrscht, wie in Universitäten, Hotels und Konferenzzentren, kann die Automatisierung von Änderungen an der Konfiguration von Netzwerkclients die Zahl der manuellen Fehler erheblich reduzieren und so die Produktivität steigern, da sich die Netzwerkadministratoren somit auf dringlichere Probleme konzentrieren können. Fortschrittlichere Methoden wie die Verwendung von Gruppenrichtlinien in Verbindung mit Active Directory sind häufig die beste Lösung für den Umgang mit den zahlreichen Neukonfigurationen bei sich häufig ändernden Hosts. Eine kostengünstige und schnelle Alternative (oder Ergänzung) kann jedoch auch ein Skript sein, das den Clientcomputern, die einem Netzwerk hinzugefügt, die geändert oder hieraus entfernt werden müssen, die notwendigen Netzwerkeinstellungen zuweist. Ein solches Skript müsste Einstellungen für DHCP (oder statische IP-Adressen), DNS, WINS sowie Gatewayinformationen enthalten. Einige der Funktionen des Skripts können in vorhandene Anmeldeskripts integriert werden oder das Skript kann separat oder vom Helpdeskpersonal ausgeführt werden, je nachdem, welche Vorgehensweise für die Arbeitsabläufe der jeweiligen Organisation am besten geeignet ist. In Abhängigkeit von den Einstellungen, die geändert werden müssen, müssen ggf. auch die entsprechenden Änderungen an den DHCP-, DNS- und WINS-Servern vorgenommen werden, und viele hiervon können ebenfalls mit Skripts oder Befehlszeilentools automatisiert werden. Diese serverseitigen Vorgänge sind jedoch nicht Thema dieses Dokuments. Obwohl mit diesem Skript zunächst nur die TCP/IP-Einstellungen eines Clients bearbeitet werden, können auch einfach weitere Clienteinstellungen wie standardmäßige Netzwerkfreigaben oder Stammverzeichnisse hinzugefügt werden. In Netzwerken, in denen Active Directory eingesetzt wird, kann das Skript für die Verwendung von ADSI zum Hinzufügen oder Ändern von Computer- oder Benutzerinformationen im Verzeichnis erweitert werden. Das Skript Mit diesem Skript werden in einem TCP/IP-Netzwerk Clientcomputer hinzufügt, aktualisiert und aus diesem entfernt. Vorsicht Dieses Skript nimmt möglicherweise Änderungen an der Computerkonfiguration vor. Führen Sie es deshalb nur auf einem Testcomputer aus, und notieren Sie sich vor der Skriptausführung die davon betroffenen Einstellungen. Eingabedatei Das Skript akzeptiert eine Textdatei als Eingabe. Der Pfad zu dieser Datei wird im Skript angegeben. Im vorliegenden Beispiel wird die Textdatei Clients.csv verwendet. CSV steht für "Comma-separated Values" (Per Komma getrennte Werte). Eine CSV-Datei kann in einer Tabellenkalkulationsanwendung ebenso wie in einem Texteditor bearbeitet werden. Die Erstellung und Bearbeitung dieser Datei gestaltet sich in einer Tabellenkalkulationsanwendung allerdings wesentlich einfacher. Jede Zeile der Datei enthält die folgenden Parameter durch Kommas getrennt: hostname, add or remove client, IP address allocation method, IP address, subnet mask, default gateway, default gateway cost metric, DNS changes, DNS server search order, DNS hostname, DNS domain, DNS domain suffix search order, full DNS registration enabled, domain DNS registration enabled, WINS changes, NetBIOS TCP/IP options, DNS enabled for WINS resolution, WINS LMHOST lookup enabled, WINS HOST lookup file, WINS scope ID, WINS primary server, WINS secondary server
Seite 161 von 169

Tabelle 47 enthält eine Liste der Parameter der Eingabedatei Clients.csv sowie Angaben zu deren Typ. Tabelle 47 Parameter der Eingabedatei "Clients.csv"
Parameter (in der vorgegebenen Reihenfolge) Typ

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

IP address allocation method2, sollten die folgenden vier Zeichenfolge Parameter (IP address, subnet mask, default gateway und gateway cost metric) leer sein und nur das Komma als Trennzeichen aufweisen. Wenn der Parameter IP address allocation method auf "static IP adressing" festgelegt wird, müssen auch diese vier Parameter festgelegt werden, und wenn der Computer die Verbindung zu einem Netzwerk unter Verwendung von DNS herstellt, muss zudem auch für den Parameter DNS search order die IP-Adresse von mindestens einem DNS-Server festgelegt werden. IP address Subnet mask Default gateway Default gateway cost metric DNS changes DNS server search order DNS hostname DNS domain DNS domain suffix search order Zeichenfolgenarray Zeichenfolgenarray Zeichenfolgenarray Array mit Ganzzahlen Boolean-Wert Zeichenfolgenarray Zeichenfolge Zeichenfolge Zeichenfolgenarray

Full DNS registration enabled3full DNS registration Boolean-Wert enabled nicht festgelegt wurde, wird die folgende Parametereinstellung (domain DNS registration enabled) ignoriert. Domain DNS registration enabled4domain DNS Boolean-Wert registration enabled ist nur dann von Bedeutung, wenn der vorherige Parameter (full DNS registration enabled) auf "Wahr" festgelegt wurde. WINS changes Boolean-Wert

Seite 162 von 169

NetBIOS TCP/IP options DNS enabled for WINS resolution WINS LMHOST lookup enabled WINS HOST lookup file WINS scope ID WINS primary server WINS secondary server
1Wenn dieser Parameter auf "remove" festgelegt ist 2Wenn dieser Parameter auf "DHCP" festgelegt wurde 3Wenn der Parameter 4Der Parameter

Ganzzahl Boolean-Wert Boolean-Wert Zeichenfolge Zeichenfolge Zeichenfolge Zeichenfolge

Für alle Parameter, die nicht festgelegt werden, muss ein Komma (dem kein Leerzeichen vorangeht) verwendet werden. Die letzte Zeile in der Datei darf nicht mit einem Eingabezeichen abgeschlossen werden, da dies vom Skript als leerer Eintrag gelesen würde. Beachten Sie, dass das folgende Beispiel nur vier Zeilen umfasst, die von einem Wagenrücklauf-/Zeichenvorschubzeichen abgeschlossen werden: diese Zeilen beginnen mit "client1", "client2", "newclient1" und "oldclient1" jeweils in Fettdruck, um die Lesbarkeit des Beispiels zu verbessern. Die zweite und dritte scheinbare Zeile ist jeweils eine Fortsetzung der ersten Zeile, die nicht von einem Wagenrücklauf-/Zeilenvorschubzeichen abgeschlossen wird. Die eigentliche zweite Zeile beginnt mit "client2". Das Skript weist den Parameter IP address allocation method für jeden Host zu, der nicht entfernt werden soll. Wenn als Methode die statische IP-Adressierung verwendet werden soll, weist das Skript auch die nächsten vier Parameter sowie den Parameter DNS server search order zu. Wenn als Methode DHCP verwendet werden soll, weist das Skript keine weiteren Parameter zu.
client1,,staticip,192.168.0.13,255.255.255.0,192.168.0.1,1,True,192.168.0.1 192.168.0.2,peter-d2,fabrikam.com,hr.fabrikam.com it.fabrikam.com,True,True,True,1,,,,,, client2,,dhcp,,,,,False,,,,,,,False,,,,,,, newclient1,add,staticip,192.168.0.13,255.255.255.0,192.168.0.1,1,True,192.168.0.1 192.168.0.2,peter-d2,fabrikam.com,hr.fabrikam.com it.fabrikam.com,True,True,True,1,,,,,, oldclient1,remove,,,,,,False,,,,,,,False,,,,,,,

Schritte zur Skripterstellung 1.Definieren Sie Konstanten zur Verwendung mit FileSystemObject. 2.Erstellen Sie Variablen zur Aufnahme der Pfade zu den Eingabe- und Ausgabedateien sowie für die Zähler für die abschließende Kontrollzählung. 3.Rufen Sie die GetInput-Funktion auf, und übergeben Sie den Pfad zur Eingabedatei. 4.Verwenden Sie die VBScript-Funktion Split, um den zurückgegebenen Dateiinhalt so auf ein Array aufzuteilen, dass jedes Element eine Zeile der Textdatei enthält, wobei das Zeilenumbruchzeichen als Trennzeichen verwendet wird, 5.Prüfen Sie, ob die angegebene Ausgabedatei vorhanden ist. Ist sie vorhanden, öffnen Sie sie zum Anhängen, so dass der Inhalt nicht überschrieben wird. Ist sie nicht vorhanden, erstellen und öffnen Sie die Datei.
Seite 163 von 169

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

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

Sie beginnt mit der Prüfung der Rolle des Computers in der Domäne mithilfe der DomainRoleEigenschaft 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 EnableStaticMethode 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 IPSeite 165 von 169

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

Wenn ein neuer DNS-Hostname zugewiesen wird, ruft die Funktion die EnableDNS-Methode der Klasse Win32_NetworkAdapterConfiguration auf und übergibt Parameter für DNS host name, DNS domain, DNS server search order und DNS domain suffix search order. Wenn dem Computer kein neuer DNS-Name zugewiesen werden soll, ruft die Unterroutine die Methoden SetDNSDomain, SetDNSServerSearchOrder und SetDNSSuffixSearchOrder der Klasse Win32_NetworkAdapterConfiguration auf und übergibt Parameter aus der Eingabedatei für diese Einstellungen. Unabhängig davon, ob dem Computer ein neuer DNS-Hostname zugewiesen wurde, ruft die Unterroutine die Methode SetDynamicDNSRegistration der Klasse Win32_NetworkAdapterConfiguration auf und übergibt Parameter aus der Eingabedatei für die dynamischen DNS-Registrierungseinstellungen.

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

Seite 166 von 169

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

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

Seite 168 von 169

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

Das Kapitel "Registry" des Windows 2000 Scripting Guide unter http://go.microsoft.com/fwlink/?LinkId=30001 (englischsprachig). "Resource Kit Registry Reference for Windows Server 2003" unter http://go.microsoft.com/fwlink/?LinkId=30003 (englischsprachig). "Technical Reference to the Registry" von Windows 2000 Server unter http://go.microsoft.com/fwlink/?LinkId=31141 (englischsprachig).

Die Windows-Registrierung enthält zahlreiche netzwerkbezogene Einstellungen. Unter Verwendung des WMI-Anbieters für die Systemregistrierung können Registrierungseinstellungen direkt mit einem Skript gelesen und geändert werden, indem die Klasse StdRegProv im Namespace \Root\Default verwendet wird. Tabelle 48 enthält eine Liste der wichtigeren Registrierungsunterschlüssel für die Erstellung von Skripts für netzwerkbezogene Einstellungen. Vorsicht Durch eine fehlerhafte Bearbeitung der Registrierung kann ernsthafter Schaden am System verursacht werden. Bevor Sie Änderungen an der Registrierung vornehmen, sollten Sie eine Sicherungskopie aller wichtigen Daten auf dem Computer erstellen. Tabelle 48 Registrierungsunterschlüssel für die Erstellung von Skripts für netzwerkbezogene Einstellungen
Registrierungsunterschlüssel

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces \ AdapterIdentifier HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dhcp HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBIOS HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netman

Tools und Downloads

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

Seite 169 von 169