WMI - Pearson
Transcription
WMI - Pearson
Bibliografische Information der Deutschen Nationalbibliothek Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.dnb.de abrufbar. Die Informationen in diesem Produkt werden ohne Rücksicht auf einen eventuellen Patentschutz veröffentlicht. Warennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt. Bei der Zusammenstellung von Texten und Abbildungen wurde mit größter Sorgfalt vorgegangen. Trotzdem können Fehler nicht vollständig ausgeschlossen werden. Verlag, Herausgeber und Autoren können für fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch irgendeine Haftung übernehmen. Für Verbesserungsvorschläge und Hinweise auf Fehler sind Verlag und Herausgeber dankbar. Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien. Die gewerbliche Nutzung der in diesem Produkt gezeigten Modelle und Arbeiten ist nicht zulässig. Fast alle Hard- und Softwarebezeichnungen und weitere Stichworte und sonstige Angaben, die in diesem Buch verwendet werden, sind als eingetragene Marken geschützt. Da es nicht möglich ist, in allen Fällen zeitnah zu ermitteln, ob ein Markenschutz besteht, wird das ® Symbol in diesem Buch nicht verwendet. 10 9 8 7 6 5 4 3 2 1 15 14 13 ISBN 978-3-8273-3205-9 Print; 978-3-86324-559-7 PDF; 978-3-86324-225-1 ePUB © 2013 by Addison-Wesley Verlag, ein Imprint der Pearson Deutschland GmbH, Martin-Kollar-Straße 10–12, D-81829 München/Germany Alle Rechte vorbehalten Umschlagkonzept: Kochan & Partner, München Lektorat: Thomas Pohlmann Korrektorat: Petra Kienle Herstellung: Claudia Bäurle, [email protected] Satz: Nadine Krumm, mediaService, Siegen, www.mediaservice.tv Druck und Verarbeitung: Kösel, Krugzell (www.KoeselBuch.de) Printed in Germany Kapitel 6 Komponenten für das Scripting Um die Gruppenrichtlinie zu ändern, wählen Sie Bearbeiten im Kontextmenü der Richtlinie. Dadurch öffnet sich der Group Policy Object Editor (GPEdit.dll), der auch unter Windows 2000 schon vorhanden war. WMI-Filter Ein WMI-Filter ist ein in der WMI Query Language (WQL) festgelegter Suchausdruck (vgl. auch Kapitel 6.6.3). WMI-Filter können dazu verwendet werden, Gruppenrichtlinien fallweise auszuführen. Ein WMI-Filter besteht aus einer oder mehreren WQL-Abfragen. Wenn eine Gruppenrichtlinie an einen WMI-Filter gebunden ist, dann wird sie nur ausgeführt, wenn alle WQL-Abfragen des Filters ein Ergebnis liefern. Auf diese Weise kann man die Ausführung einer Gruppenrichtlinie von einer beliebigen Information im WMI-Repository abhängig machen. Beispielsweise liefert die folgende WQL-Abfrage nur dann ein Ergebnis, wenn sie auf einem Computer mit Windows XP (Windows Build 2600) ausgeführt wird: SELECT * FROM Win32_OperatingSystem WHERE BuildNumber=2600 Indem Sie diesen WMI-Filter an eine Gruppenrichtlinie binden, erreichen Sie, dass die Gruppenrichtlinie nur auf Windows XP-Computern ausgeführt wird. Die WMI-Filter-Funktion ist nur ab Windows Server 2003-basierten Active Directory-Installationen verfügbar. Ergebnismengen Die für einen konkreten Active Directory-Benutzer oder -Computer geltenden Richtlinien zu ermitteln, ist nicht trivial, weil Container Gruppenrichtlinien an die Untercontainer vererben und weil an jeden Container beliebig viele Gruppenrichtlinien gebunden sein können. Wenn Sie eine Organisationseinheit anwählen, können Sie auf der Registerkarte Gruppenrichtlinienvererbung sehen, welche Gruppenrichtlinien durch die Containervererbung auf eine Organisationseinheit einwirken. Sie können auch die einzelnen Einstellungen betrachten, die für ein konkretes Objekt auf Basis der Summe der wirkenden Gruppenrichtlinien gelten. Dies nennt man den Resultant Set of Policies (RSoP). Man kann einen RSoP-Bericht sowohl auf der Ebene einer Organisationseinheit (Ast Gruppenrichtlinienmodellierung) als auch auf der Ebene eines Benutzers oder einer Gruppe (Ast Gruppenrichtlinienergebnisse) einsehen. Im letzteren Fall kann man wählen, für welchen Computer der RSoP angezeigt werden soll. 154 Group Policy Management-Komponente (GPMC Objects) Bild 6.12: Beispiel für einen RSoP-Bericht Aktualisierung von Gruppenrichtlinien Normalerweise werden Gruppenrichtlinien nur in längeren Intervallen (fünf Minu- secedit.exe/ ten auf Domänencontrollern, 90 Minuten zzgl. einer zufälligen Verzögerung von 0 gpupbis 30 Minuten auf anderen Computern) aktualisiert. Diese für Testzwecke (und date.exe auch einige Realwelt-Situationen) unbefriedigende Wartezeit kann durch die Nutzung der Kommandozeilenwerkzeuge secedit.exe bzw. gpupdate.exe oder die Reduzierung des Aktualisierungsintervalls manipuliert werden. Die Kommandozeilenwerkzeuge secedit.exe (Windows 2000) bzw. gpupdate.exe (ab Windows XP) erzwingen die sofortige Aktualisierung aller Gruppenrichtlinien auf einem System (siehe folgende Tabelle). Leider gibt es keine Skriptbefehle zum Erzwingen der Gruppenrichtlinienaktualisierung; Sie können aber die Werkzeuge secedit.exe und gpupdate.exe aus einem Skript heraus als externe Prozesse starten (vgl. Kapitel 16.2). 155 Kapitel 6 Komponenten für das Scripting Group refresh interval Gruppenrichtlinienaktualisierung in Windows 2000 Gruppenrichtlinienaktualisierung ab Windows XP secedit /refreshpolicy user_policy /enforce secedit /refreshpolicy machine_policy /enforce gpupdate /force Eine andere Alternative (nur für Benutzerrichtlinien) besteht darin, das Aktualisierungsintervall herabzusetzen. Es ist möglich, durch die Gruppenrichtlinieneinstellung /Benutzerkonfiguration/Administrative Vorlagen/System/Group Policy/Group refresh interval for users das Aktualisierungsintervall auf wenige Sekunden (Einstellung 0, vgl. folgende Abbildung) zu reduzieren. Wenn Sie das Aktualisierungsintervall in der „ Default Domain Policy“ ändern, dann wirkt die Aktualisierung sowohl auf Veränderungen in allen bestehenden Gruppenrichtlinien als auch in Bezug auf die Neuzuordnung von Gruppenrichtlinien oder die Entfernung bereits bestehender Gruppenrichtlinien. Bild 6.13: Setzen des Aktualisierungsintervalls für Gruppenrichtlinien 156 Windows Management Instrumentation (WMI) 6.5.4 Beispiele Konkrete Scripting-Beispiele zur GPMC-Komponente folgen in Kapitel 18. 6.6 Windows Management Instrumentation (WMI) Die Windows Management Instrumentation (kurz: WMI) ist die größte, mächtigste, WMI umfassendste und komplizierteste Komponente für das Windows Scripting. Die Windows Management Instrumentation ist ein übergreifender Ansatz zum Zugriff auf alle möglichen Arten von System- und Netzwerkinformationen. WMI ermöglicht auch den Zugriff auf Informationen aus Quellen wie Registrierungsdatenbank, Dateisystem und Ereignisprotokolle, die durch andere Einzelkomponenten bereits abgedeckt sind. Während WMI den Vorteil der Einheitlichkeit bietet, sind die speziellen Komponenten im konkreten Anwendungsfall oft etwas einfacher zu handhaben. Daneben gibt es aber unzählige Funktionen, die man nur mit WMI realisieren kann. WMI ist die Microsoft-Implementierung des Web Based Enterprise Managements WBEM (WBEM). WBEM ist ein Standard der Desktop Management Task Force (DMTF) für das Netz- und Systemmanagement, also zur Verwaltung von Netzwerk- und Systemressourcen (z.B. Hardware, Software, Benutzer). WBEM wurde ursprünglich von BMC Software, Cisco Systems, Compaq, Intel und Microsoft entwickelt und später an die DMTF übergeben. Aus historischen Gründen findet man in WMITools häufig noch die Bezeichnung WBEM. Kern von WBEM ist das Common Information Model (CIM), das die durch WBEM zu CIM verwaltenden Ressourcen durch objektorientierte Methoden modelliert. CIM ist ein Framework zur Beschreibung sowohl physischer als auch logischer Objekte (alias Managed Objects). Die DMTF versteht CIM als eine Vereinigung bestehender Managementarchitekturen wie dem OSI Management Framework X.700 (Common Management Information Protocol – CMIP) und dem Simple Network Management Protocol. Ein Managed Object (MO) ist eine von WMI/WBEM verwaltete und im CIM Managed Object beschriebene Ressource in einem System oder einem Netzwerk. Der Name Web Based Enterprise Management ist irreführend, weil er nahelegt, dass es sich bei WBEM um eine grafische Benutzerschnittstelle auf Webbasis für das Management von Systeminformationen handelt. WBEM ist jedoch lediglich eine Architektur mit Programmierschnittstelle, also weder Tool noch Anwendung. 157 Kapitel 6 Komponenten für das Scripting 6.6.1 Installation WMI ist in vielen verschiedenen Versionen im Umlauf, siehe Tabelle. Tabelle 6.8 Verfügbarkeit der WMIKomponente Betriebssystem Verfügbarkeit Windows 95 Nicht enthalten, Add-On für WMI 1.5 kann installiert werden Windows 98 Version 1.0 enthalten, Add-On für WMI 1.5 kann installiert werden Windows ME WMI 1.5 enthalten Windows NT4 Nicht enthalten, Add-On für WMI 1.5 kann installiert werden Windows 2000 WMI 1.5 gehört zum Standardinstallationsumfang Windows XP WMI 5.1 gehört zum Standardinstallationsumfang Windows Server 2003 WMI 5.2 gehört zum Standardinstallationsumfang Windows Vista und Windows Server2008 WMI 6.0 gehört zum Standardinstallationsumfang Windows 7 und Windows Server 2008 R2 WMI 6.1 gehört zum Standardinstallationsumfang Windows 8 und WMI 6.2 gehört zum Standardinstallationsumfang Windows Server 2012 Im Zuge von Windows 8/Windows Server 2012 entwickelte Microsoft auch eine neue Implementierung von WMI. Microsoft nennt diese Version „ WMI 2“. Damit bezieht Microsoft sich aber auf die grundlegende WMI-Infrastruktur, während die Versionszählung 6.x sich auf die Inhalte im WMI-Repository bezieht. Microsoft knüpft für die WMI-Infrastruktur an die alte Versionszählung (1.5) bei Windows 2000 an. WMI 2 ist für alle Betriebssysteme verfügbar, auf denen auch PowerShell 3.0 verfügbar ist (also ab Windows 7 und Windows Server 2008) und wird zusammen mit PowerShell 3.0 als Teil des „ Windows Management Framework“ installiert. Versionsnummer ermitteln Um die Versionsnummer des bei Ihnen installierten WMI zu ermitteln, starten Sie das Skript WMI-Version.vbs von der Website zu diesem Buch (Verzeichnis /Skripte/ Kapitel06/). ' ' ' ' WMI-Version.vbs WMI-Version ermitteln verwendet: WMI ------------------------------- Dim objWO ' As WbemScripting.SWbemObject Set objWO = GetObject("WinMgmts:root\default:__cimomidentification=@") Msgbox "WMI-Version: " & objWO.versionusedtocreatedb Listing 6.4: /Skripte/Kapitel06/WMI-Version.vbs 158 Windows Management Instrumentation (WMI) Provider WMI ist – genau wie ADSI – nicht in einer einzigen DLL realisiert. Für unterschied- Provider liche Systembausteine gibt es unterschiedliche sogenannte WMI-Provider. Für jeden WMI-Provider existiert eine DLL. WMI kann genauso wie ADSI Fernzugriffe auf andere Computer realisieren. Anders als bei ADSI muss dazu aber auf beiden Computern WMI installiert sein. WMI starten WMI wird durch die ausführbare Datei WinMgmt.exe implementiert. WinMgmt.exe Winläuft unter NT-basierten Systemen als Dienst unter dem Namen „ WinMgmt Mgmt.exe (Windows-Verwaltungsinstrumentation)“. Auf Windows 9x/Windows ME wird WinMgmt.exe beim ersten WMI-Aufruf als normaler Prozess gestartet, wenn ein Aufruf erfolgt. Bitte stellen Sie auf NT-basierten Systemen sicher, dass die WMI-Dienste sowohl auf dem aufrufenden als auch auf dem aufgerufenen Rechner nicht deaktiviert sind, weil sonst Ihre Skripte nicht funktionieren können. 6.6.2 WMI-Klassen WMI 6.2 bietet derzeit mehrere tausend Klassen. Zum Beispiel gibt es auf einem Windows 8 mit installiertem Office 2010 25.114 Klassen. Durch die Installation von Zusatzprodukten kommen Dutzende, teilweise sogar Hunderte weiterer Klassen hinzu, da heute viele Softwareprodukte einen WMI-Provider mitliefern. WMI-Klassen beginnen meistens mit der Vorsilbe „ Win32“ oder „ CIM“. Spezielle Systemklassen beginnen mit einem doppelten Unterstrich „ __“. WMI-Klassennamen Bedeutung Win32_OperatingSystem Klasse für das installierte Betriebssystem Win32_CDRomDrive CD-ROM-Laufwerk Win32_Networkadapter Netzwerkadapter Win32_LogicalDisk Laufwerk Win32_VideoController Grafikkarte CIM_DataFile Datei CIM_Directory und Win32_Directory Verzeichnis/Ordner Win32_Product Installierte Software Win32_Process Laufender Prozess Win32_WordDocument Ein Dokument für Microsoft Word Win32_NTLogEvent Ereignisprotokolleintrag Win32_UserAccount Benutzerkonto (lokales Konto oder Domänenkonto) Tabelle 6.9 Beispiele für WMI-Klassen 159 Kapitel 6 Komponenten für das Scripting WMI-Klassennamen Bedeutung Win32_Share Verzeichnisfreigabe im Netzwerk Win32_PingStatus Klasse zur Ausführung eines Ping __Namespace WMI-Namensraum __Event Basisklasse für WMI-Ereignisse __InstanceDeletionEvent Konkretes Ereignis, das ausgelöst wird, wenn ein WMI-Objekt gelöscht wurde 6.6.3 Scripting-Hilfsklassen für WMI Vom eigentlichen WMI ist die WMI-COM-Komponente abzugrenzen. Sie realisiert ein Metaobjektmodell (vgl. Erläuterungen dazu im Kapitel „ COM“), um die sehr große Anzahl von WMI-Grundklassen ansteuern zu können und es zu ermöglichen, dass zusätzliche WMI-Provider ohne Veränderung der WMI-COM-Komponente adressiert werden können. Tabelle 6.10 Klassen der WMI-COMKomponente Klasse Erläuterung SWbemLocator Diese Klasse stellt eine (von mehreren) Möglichkeiten dar, die Verbindung zu einem WMI-Server aufzubauen und Zugriff auf einen Namensraum zu nehmen. Diese Klasse ist instanziierbar durch WbemScripting.SWbemLocator. SWbemObject SWbemObject ist die zentrale Metaklasse für den Zugriff auf WMI- Instanzen und WMI-Klassen. 160 SWbemObjectSet Eine Objektmenge von Objekten des Typs SWbemObject. SWbemServices Ein SWbemServices-Objekt repräsentiert einen WMI-Namensraum als Ganzes. SWbemMethod Repräsentiert eine Methode in einem MO SWbemMethodSet Objektmenge aller Methoden in einem MO SWbemProperty Repräsentiert ein Attribut in einem MO SWbemPropertySet Objektmenge aller Attribute in einem MO SWbemObjectPath Dient dem Lesen und Schreiben von WMI-Pfaden SWbemNamedValue Ein SWbemNamedValue speichert ein Attribut-Wert-Paar. Die Klasse besitzt nur zwei Attribute (Name und Value). SWbemNamedValueSet Liste von SWbemNamedValue-Objekten, repräsentiert also eine Liste von Attribut-Wert-Paaren. Dieses Instrument wird z.B. eingesetzt, um die Schlüsselwerte eines MO zu ermitteln und um bei asynchronen Aufrufen Informationen an die Ereignisbehandlungsroutinen zu übermitteln. SWbemPrivilege Repräsentiert ein einzelnes Privileg Windows Management Instrumentation (WMI) Klasse Erläuterung SWbemPrivilegeSet Liste aller Privilegien SWbemQualifier Repräsentiert einen Qualifier SWbemQualifierSet Repräsentiert eine Liste von Qualifiern SWbemSecurity Sicherheitseinstellungen, die aber auch über den WMI-Pfad vorgenommen werden können. Die Klassen SWbemLocator, SWbemServices, SWbemObject, SWbemObjectSet, SWbemObjectPath, SWbemLastError und SWbemEventSource besitzen ein Attribut Security_ vom Typ SWbemSecurity. SWbemEventSource Ein Objekt dieser Klasse ist das Ergebnis der Methode ExecNotificationQuery() aus der Klasse SWbemServices. Nach der Ausführung einer Aktion dient das SWbemEventSource-Objekt dazu, die auftretenden Ereignisse nacheinander abzugreifen. SWbemLastError Informationen über den letzten Fehler. Der Aufbau der Klasse entspricht exakt dem der Klasse SWbemObject. SWbemSink SWbemSink dient COM-Clients dazu, Benachrichtigungen von Ereignissen und im Rahmen von asynchronen WMI-Operationen zu empfangen. SWbemLocator "WbemScripting.SWbemLocator" SWbemService ConnectServer() SWbemObjectSet AssociatorsOf() ExecQuery() InstancesOf() ReferencesTo() SubclassesOf() SWbemObject InParameters OutParameters ExecMethod() Get() SWbemObjectPath "WbemScripting.SwbemObjectPath" Methods_ SWbemMethodsSet Path_ SWbemMethod SWbemNamedValueSet Qualifiers Keys SWbemPropertySet SWbemNamedValue Properties_ SWbemProperty Qualifiers WbemQualifierSet Qualifiers_ © [email protected] WbemQualifier Bild 6.14: Das komplette Objektmodell der WMI-Scripting-Hilfsklassen 161 Kapitel 6 Komponenten für das Scripting 6.6.4 Objektauswahl Grundsätzlich verwendet WMI den GetObject()-Befehl. Bei GetObject() anzugeben ist eine Zeichenkette in einer speziellen Form, ein sogenannter WMI-Pfad. Ein WMI-Pfad ist folgendermaßen aufgebaut: Aufbau der WMI-Pfade WinMgmts:\\Computer\Namensraum:Klasse.Schluessel='wert' Dabei bedeuten die jeweiligen Elemente Folgendes: 왘 WinMgmts ist ein feststehender Begriff, der dem WSH sagt, dass nun WMI zu ver- wenden ist. Anders als bei ADSI ist die Groß-/Kleinschreibung egal. 왘 Computer steht für den Namen des anzusprechenden Computers. Ein Punkt in Anführungszeichen (" ") steht dabei für den lokalen Computer, auf dem das Skript läuft. 왘 Namensraum: Da WMI so viele Klassen besitzt, sind diese in einen hierarchischen Baum einsortiert. Der Pfad in dem Baum wird Namensraum (engl. Namespace) genannt. 왘 Klasse ist der Name der Klasse, die angesprochen werden soll. 왘 Mit Schluessel='wert' wird festgelegt, welche Instanz der Klasse angesprochen werden soll. Dabei ist Schluessel der Name des Schlüsselattributs der Klasse und Wert der Wert dieses Schlüsselattributs in der gesuchten Instanz. Die folgende Tabelle zeigt Beispiele für den Zugriff auf WMI-Objekte am Beispiel der Klasse Win32_LogicalDisk, die ein Laufwerk repräsentiert. Die Klasse liegt im Namensraum \root\cimv2. Wie Sie der Tabelle entnehmen können, sind viele Bestandteile der Pfadangabe optional. Tabelle 6.11 Beispiele für WMI-Zugriffe Objekt Pfad Die Instanz der Klasse Win32_LogicalDisk aus dem Namensraum \root\cimv2: mit dem Namen „D:“ auf dem lokalen Computer GetObject("WinMgmts:\\.\root\cimv2: Die Instanz der Klasse Win32_LogicalDisk aus dem Namensraum \root\cimv2: mit dem Namen „D:“ auf dem Computer ServerE02 GetObject("WinMgmts:\\SERVERE02\root\cimv2: Die Instanz der Klasse Win32_LogicalDisk aus dem Standardnamensraum mit dem Namen „D:“ auf dem lokalen Computer GetObject("WinMgmts: Win32_LogicalDisk.DeviceID='D:'") Win32_LogicalDisk.DeviceID='D:'") Win32_LogicalDisk.DeviceID='D:'") Der sogenannte Standardnamensraum, in dem die Klasse gesucht wird, wenn kein Namensraum explizit genannt wurde, ist in der Registrierungsdatenbank festgelegt (HKEY_LOCAL_MACHINE\Software\Microsoft\WBEM\Scripting\Default Namespace). Die Standardeinstellung ist \root\cimv2. Sie sollten diese Einstellung nicht ändern. 162 Windows Management Instrumentation (WMI) Beispiel Ein Beispiel hilft, die Anwendung zu veranschaulichen. Das folgende Skript gibt Einzelobjekt den Namen eines Laufwerks aus und ändert ihn dann. Wichtig ist der Aufruf der ansprechen Methode Put_(). Änderungen in WMI-Objekten werden erst nach Aufruf dieser Methode wirksam. ' WMI_EinzelObjekt.vbs ' Ändern des Namens eines Laufwerkes ' verwendet: WMI ' ------------------------------Const COMPUTERNAME = "ServerE02" Set Laufwerk = GetObject("WinMgmts:\\" & COMPUTERNAME & _ "\root\cimv2:Win32_ LogicalDisk='C:'") WScript.Echo "Name vorher: " & Laufwerk.VolumeName Laufwerk.VolumeName = "Laufwerk C" Laufwerk.Put_ WScript.Echo "Änderung ausgeführt!" WScript.Echo "Name nachher: " & Laufwerk.VolumeName Listing 6.5: Verwendung eines einzelnen WMI-Objekts Mengenzugriffe: alle Instanzen Eine schöne Besonderheit von WMI besteht darin, dass man nicht nur ein bestimmtes Objekt ansprechen kann, sondern auch alle Instanzen einer Klasse bzw. eine beliebige Teilmenge aus den Instanzen einer Klasse wählen kann. Dazu nennt man bei GetObject() nur „ WinMgmts“ und den Namen des anzuspre- Alle chenden Computers. Auf dem zurückgelieferten Objekt ruft man InstancesOf() Instanzen unter Nennung des Klassennamens auf. Mit For Each kann man dann alle Instanzen ansprechen auflisten. ' ' ' ' WMI_Menge1.vbs Größe der Laufwerke ermitteln verwendet: WMI ------------------------------- Set Computer = GetObject("WinMgmts:\\COMPUTERNAME") Set menge = Computer.InstancesOf("Win32_LogicalDisk") For Each o In menge WScript.Echo o.name & " Größe:" & o.size Next Listing 6.6: Beispiel für das Auslesen aller Instanzen einer WMI-Klasse Neu seit Windows Vista ist, dass man in einer WMI-Objektmenge über die Eigenschaft ItemIndex() direkt ein Element der Liste ansprechen kann. Beispielsweise ist Menge.ItemIndex(1) das zweite Element, weil die Zählung bei 0 beginnt. 163 Copyright Daten, Texte, Design und Grafiken dieses eBooks, sowie die eventuell angebotenen eBook-Zusatzdaten sind urheberrechtlich geschützt. Dieses eBook stellen wir lediglich als persönliche Einzelplatz-Lizenz zur Verfügung! Jede andere Verwendung dieses eBooks oder zugehöriger Materialien und Informationen, einschließlich der Reproduktion, der Weitergabe, des Weitervertriebs, der Platzierung im Internet, in Intranets, in Extranets, der Veränderung, des Weiterverkaufs und der Veröffentlichung bedarf der schriftlichen Genehmigung des Verlags. Insbesondere ist die Entfernung oder Änderung des vom Verlag vergebenen Passwortschutzes ausdrücklich untersagt! Bei Fragen zu diesem Thema wenden Sie sich bitte an: [email protected] Zusatzdaten Möglicherweise liegt dem gedruckten Buch eine CD-ROM mit Zusatzdaten bei. Die Zurverfügungstellung dieser Daten auf unseren Websites ist eine freiwillige Leistung des Verlags. Der Rechtsweg ist ausgeschlossen. Hinweis Dieses und viele weitere eBooks können Sie rund um die Uhr und legal auf unserer Website herunterladen: http://ebooks.pearson.de