Windows PowerShellEinfache Befehle. Leistungsstarke Verwaltung

Don Jones

Dieser Artikel basiert auf einer Vorabversion von Windows PowerShell. Änderungen an den in diesem Artikel enthaltenen Informationen sind vorbehalten.

Es hat eine Weile gedauert, aber jetzt ist Windows PowerShell fast startbereit. Das heißt, es ist nun an der Zeit, dass Windows-Administratoren darauf aufmerksam werden. Windows PowerShell bietet möglicherweise den leichtesten und flexibelsten Weg, um viele verschiedene Verwaltungsaufgaben zu automatisieren und Ihre Arbeit effizienter und produktiver zu gestalten.

Und was noch wichtiger ist, Microsoft baut die grafischen Verwaltungskonsolen von Produkten wie Exchange Server 2007 und System 2007 auf Windows PowerShell™ auf. Mit anderen Worten, Sie können fast jede Verwaltungsaufgabe innerhalb von Windows PowerShell durchführen. Microsoft plant, das gleiche Prinzip allmählich auf die Verwaltungsfunktionen von mehr und mehr Produkten auszudehnen. So könnte Windows PowerShell schließlich das erste Universaltool zum Verwalten nahezu aller Microsoft-Serverprodukte werden. Als Einführungshilfe wird Windows PowerShell regelmäßig in dieser neuen Rubrik behandelt. Laden Sie sich eine Kopie der Software herunter.

Leistungsstärke und Einfachheit

Wie der Name schon andeutet, handelt es sich bei Windows PowerShell um eine Shell, im Unterschied zur Eingabeaufforderung (Cmd.exe), die es seit Windows NT® 3.1 gibt. Cmd.exe wird fortbestehen, doch mit der Verfügbarkeit von Windows PowerShell gibt es kaum mehr einen Grund, weiterhin Cmd.exe zu verwenden.

In der Anwendung verhält sich Windows PowerShell nicht anders als Cmd.exe, außer dass Windows PowerShell leistungsfähiger ist. Wie Cmd.exe verfügt auch Windows PowerShell über eine integrierte Skriptsprache. Diese ist jedoch weitaus viel flexibler als die ursprüngliche Batchsprache von Cmd.exe. Flexibilitätsgrad Mit Windows PowerShell können Sie äußerst komplizierte Aufgaben mit einer Sprache automatisieren, die nur etwa ein halbes Dutzend integrierter Schlüsselwörter umfasst.

Da die Skriptprogrammierung bereits angesprochen wurde, sollte als Nächstes die Sicherheit erwähnt werden. Windows PowerShell profitiert von dem, was Microsoft im vergangenen Jahrzehnt und darüber hinaus über Sicherheitsfragen gelernt hat. Standardmäßig führt Windows PowerShell keine Skripts aus; es kann nur interaktiv verwendet werden, um einzelne Befehle auszuführen. Wenn Sie die Skriptprogrammierung aktivieren, können Sie Windows PowerShell anleiten, nur digital signierte Skripts auszuführen. All diese Maßnahmen sollen gewährleisten, dass Windows PowerShell nicht zum nächsten VBScript wird – einer hervorragenden Sprache, die oft dazu missbraucht wurde, schädliche Skripts zu erstellen. Auch VBScript wird fortbestehen. Sie werden jedoch wahrscheinlich feststellen, dass Windows PowerShell für viele verschiedene Aufgaben leichter verwendbar ist.

Mit Windows PowerShell kann nahezu alles ausgeführt werden, was Sie mit Cmd.exe ausgeführt hätten. Sie können z. B. ipconfig ausführen und zu einem ähnlichen Ergebnis kommen. Windows PowerShell führt jedoch einen neuen Satz von Befehlen ein, bei denen es sich nicht um externe ausführbare Dateien handelt. Diese so genannten Cmdlets (ausgeschrieben „command-lets“) sind direkt in Windows PowerShell integriert. (Einen Überblick über die nützlichsten Cmdlets, mit denen Sie eine Einführung in Windows PowerShell erhalten, finden Sie in der Randleiste „Die zehn wichtigsten sofort einsatzbereiten Cmdlets“.)

Die zehn wichtigsten sofort einsatzbereiten Cmdlets

  • „Get-Command“ ruft eine Liste aller verfügbaren Cmdlets ab.
  • „Get-Help“ zeigt Informationen zu Cmdlets und Begriffen an.
  • „Get-WMIObject“ ruft Verwaltungsinformationen mithilfe von WMI ab.
  • „Get-EventLog“ ruft Windows-Ereignisprotokolle ab.
  • „Get-Process“ ruft einen einzelnen Prozess oder eine Liste aktiver Prozesse ab.
  • „Get-Service“ ruft einen Windows-Dienst ab.
  • „Get-Content“ liest Textdateien, die jede Zeile als ein untergeordnetes Objekt behandeln.
  • „Add-Content“ fügt einer Textdatei Inhalt hinzu.
  • „Copy-Item“ kopiert Dateien, Ordner und andere Objekte.
  • „Get-Acl“ ruft Zugriffssteuerungslisten (ACLs) ab.

Eine vollständige Liste von Cmdlets, die in der Lieferung von Windows PowerShell enthalten sind, finden Sie unter windowssdk.msdn.microsoft.com/en-us/library/ms714408,aspx.

Alle Cmdlets sind standardmäßig in einem Verbsubstantivformat benannt, und dies erleichtert es, sie zu lernen und sich zu merken. Zum Beispiel werden durch das Cmdlet „Get-Command“ alle verfügbaren Cmdlets aufgelistet. Das nützlichste Cmdlet für einen Administrator ist möglicherweise „Get-WMIObject“. Angenommen, Sie möchten herausfinden, welches Service Pack auf Server2 ausgeführt wird. Dazu führen Sie einfach Folgendes aus:

Get-WMIObject Win32_OperatingSystem –Property ServicePackMajorVersion
 –Computer Server2

Um die gleichen Informationen mithilfe von VBScript zu erhalten, müssten Sie mehrere Zeilen von Code schreiben. Andere Cmdlets ermöglichen Ihnen die Arbeit mit Diensten („Start-Service“, „Stop-Service“ usw.), Prozessen („Stop-Process“ und andere), Dateien (z. B. „Rename-Item“, „Copy-Item“, „Remove-Item“, „Move-Item“) und vieles mehr. Viele von diesen Cmdlets haben außerdem Verknüpfungsnamen, so genannte Aliase. Im Fall von „Get-WMIObject“ müssen Sie nur „gwmi“ eingeben. Wenn Sie „Get-Alias“ ausführen, erhalten Sie eine Liste dieser Verknüpfungsnamen.

Der Grund für die Objektorientierung

Windows PowerShell ist auf dem Microsoft® .NET Framework aufgebaut und vollständig objektorientiert. Normalerweise würde sich nur ein Softwareentwickler darüber freuen, doch in diesem Fall führt die Objektorientierung zu einer großen Zeitersparnis für Administratoren. Das liegt daran, dass Administratoren jetzt direkt mit umfangreichen Objekten innerhalb einer textorientierten Shell arbeiten können. Betrachten Sie folgendes Beispiel:

Get-Process | Sort-Object pm –desc | Select-Object –first 10

Dies ist nur eine einzelne Zeile mit drei verschiedenen Cmdlets, die von Pipes (mehr dazu folgt etwas später) getrennt wird. Das erste Cmdlet ruft alle ausgeführten Prozesse ab und leitet diese dann an „Sort-Object“ weiter. Das zweite Cmdlet sortiert die jeweiligen Prozessobjekt-PMs (Physical Memory) nach Eigenschaft in absteigender Reihenfolge. Die sortierte Sammlung von Prozessobjekten wird dann an „Select-Object“ weitergeleitet, das die ersten zehn auswählt und anzeigt. Das Ergebnis Diese einfache Zeile zeigt die 10 Elemente an, die den meisten physischen Speicher auf dem Computer verbrauchen, siehe Abbildung 1. Dies ist eine äußerst wirksame Weise, sich bei einer Problembehandlung einen schnellen Überblick zu verschaffen.

Abbildung 1 Verwendung eines einfachen Cmdlets zur Problembehandlung

Abbildung 1** Verwendung eines einfachen Cmdlets zur Problembehandlung **(Klicken Sie zum Vergrößern auf das Bild)

Die Verwendung von Pipes (bei einer Pipe handelt es sich um den senkrechten Strich, der sich auf US-amerikanischen Tastaturen in der Regel über dem umgekehrten Schrägstrich befindet) trägt wesentlich zu den Fähigkeiten von Windows PowerShell bei. Durch die Verwendung dieses Zeichens können Sie Objekte von einem Cmdlet zu einem anderem weiterleiten, sodass jeder dieser Befehle die Ergebnisse weiter verfeinern und sie für die Anzeige formatieren kann usw. Dieser Mechanismus funktioniert, weil jedes Cmdlet ein oder mehrere Objekte, anstatt reinen Text, zurückgibt, und somit nachfolgenden Cmdlets das vollständige Objekt bereitstellt.

Die Verwendung von Objekten ist in Windows PowerShell ist umfassend und dringt bis zu den Variablen durch. Und Sie müssen Variablen nicht von Anfang an deklarieren; Sie können sie als ein Dollarzeichen ($) vor einem Variablennamen darstellen. Obwohl dies nicht erforderlich ist, können Sie bei Windows PowerShell auch angeben, welchen Datentyp Sie in der Variable verwenden möchten. Dadurch kann Windows PowerShell die Variable einem der äußerst leistungsfähigen .NET Framework-Typen zuordnen, was Ihnen viel zusätzliche integrierte Funktionalität bietet. Angenommen, Sie möchten z. B. einen Computernamen anfordern und eine Service Pack-Version von diesem Computer abrufen, wissen jedoch nicht, ob die Person, die den Computernamen eingibt, zwei umgekehrte Schrägstriche (wie z. B. \\Server2) verwenden wird. Da Sie wissen, dass das Cmdlet „Get-WMIObject“ die umgekehrten Schrägstriche nicht benötigt, können Sie den Computernamen in einer Zeichenfolgenvariable speichern und die Methode „Replace“ verwenden, um umgekehrte Schrägstriche mit leeren Zeichenfolgen zu ersetzen, z. B. wie folgt:

[string]$c = Read-Host "Enter computer name"
$c = $c.Replace("\","")
    Get-WMIObject Win32_OperatingSystem
    –Property  ServicePackMajorVersion
    –Computer $c

Der Wert für den Parameter „Computer“ wurde in der $c-Variable bereitgestellt. Diese Variable wurde anfänglich als eine Zeichenfolge erstellt, deshalb hat sie die gesamte Funktionalität des .NET Framework-Zeichenfolgetyps, einschließlich der Methode „Replace“, übernommen. Selbstverständlich wird das Erlernen all dieser Möglichkeiten eine Zeit lang dauern, doch es sollte Ihnen relativ leicht fallen, sie sich mithilfe von Beispielen anzueignen. Windows PowerShell selbst vereinfacht den Lernvorgang. Wenn Sie z. B. „$c = $c.“ eingeben (ohne den Punkt zu vergessen) und die Eingabetaste drücken, dann zeigt Windows PowerShell „Clone()“ an – die erste Methode vom Typ Zeichenfolge. Wenn Sie die Eingabetaste gedrückt halten, durchläuft Windows PowerShell alle verfügbaren Methoden. Hierbei zeigt Ihnen Windows PowerShell im Prinzip, was es mit einer Zeichenfolge machen kann.

Hier ist eine komplexere Aufgabe. Zeigen Sie eine Liste von Computernamen in einer Datei an, d. h. einen Namen pro Zeile, und zeigen Sie für jeden Computer die Service Pack-Nummer an. In VBScript würde diese Aufgabe ein Dutzend oder mehr Zeilen von Code erfordern. In Cmd.exe müssten Sie eine komplizierte Batchdatei verwenden. In Windows PowerShell ist für diese Aufgabe nur eine Zeile erforderlich:

Get-Content "c:\computers.txt" | foreach  
{ $_; gwmi Win32_OperatingSystem -prop 
ServicePackMajorVersion -comp $_ }

Das Cmdlet „Get-Content“ liest den Inhalt von „C: \Computers.txt“. Jede Zeile der Datei wird zu einem eigenständigen Objekt. Diese Sammlung der Objekte, d. h. Computernamen, wird an den Befehl „foreach“ geleitet, der eigentlich nur ein Alias für das Cmdlet „ForEach-Object“ ist. Die Befehle innerhalb der geschweiften Klammern werden einmal für jedes weitergeleitete Objekt wiederholt, das heißt, in diesem Beispiel werden sie einmal für jeden Computernamen ausgeführt. Die besondere Variable „$_“ enthält also das aktuelle Objekt (d. h. den aktuellen Computernamen).

Innerhalb der geschweiften Klammern sind eigentlich zwei Befehle enthalten: Der erste Befehl zeigt schlicht den aktuellen Computernamen an, indem er den Inhalt von „$_“ zurückgibt. Der zweite Befehl ist der jetzt bereits vertraute Befehl „gwmi“. Das Ergebnis stellt eine Liste von Service Pack-Versionen für jeden Computer dar, der in der Datei aufgelistet ist. Und dieses Ziel wurde mit einer verhältnismäßig einfachen Zeile von Befehlen erreicht.

Beachten Sie, dass die Parameter „Property“ und „Computer“ abgekürzt wurden. Windows PowerShell erfordert nur so viel, wie zur einmaligen Unterscheidung von Parameternamen nötig ist.

Lesbarkeit und Wiederverwendung

Das Schreiben einer einzelnen Zeile von Befehlen und Parametern trägt jedoch nicht zur Lesbarkeit bei. Mit Windows PowerShell können Sie diese Zeile lesbarer gestalten, und dieses lesbare Ergebnis direkt in die Shell eingeben, ohne jemals ein Skript zu schreiben. Dies könnte folgendermaßen aussehen:

PS C:\> $names = get-content "c:\computers.txt"
PS C:\> foreach ($name in $names) {
>> $name
>> gwmi Win32_OperatingSystem -prop ServicePackMajorVersion -comp $name
>> }
>>

Diesmal wird der Inhalt der Datei in der Variable „$names“ gespeichert. In diesem Beispiel wird weiterhin „foreach“ verwendet, aber es wird nicht durch eine Pipeline eingegeben. Deshalb müssen Sie angeben, welche Sammlung von Objekten es durchlaufen und in welcher Variable die einzelnen Objekte gespeichert werden sollen – das ist der Teil, der „($name in $names)“ lautet. Alles andere bleibt sich gleich, und sobald Sie die Eingabetaste drücken, wird der Code ausgeführt, und die Ergebnisse werden angezeigt.

Wenn Sie denselben Code immer wieder verwenden möchten, können Sie einfach eine Funktion daraus erstellen. Geben Sie dazu Folgendes direkt in die Shell ein:

PS C:\> function Get-ServicePacks ($file) {
>> $names = get-content $file
>> foreach ($name in $names) {
>> $name
>> gwmi win32_operatingsystem -prop servicepackmajorversion -comp $name
>> }
>> }
>>

Wie Sie sehen, hat sich im Grunde nicht viel geändert. Dies schließt einfach das vorherige Beispiel in einer Funktion namens „Get-ServicePacks“ ein (gemäß der Verbsubstantiv-Benennungskonvention von Windows PowerShell). Die Funktion enthält jetzt einen Eingabeparameter namens „$file“, die im Cmdlet „Get-Content“ ersetzt wurde, damit eine unterschiedliche Datei angegeben werden kann, wenn die Funktion ausgeführt wird. Nachdem die Funktion definiert wurde, können Sie sie, fast so wie ein Cmdlet, einfach durch Aufrufen des Namens und durch Weiterleiten des Eingabeparameters ausführen:

PS C:\> Get-ServicePacks c:\computers.txt

In Abbildung 2 werden die Ergebnisse angezeigt.

Der Nachteil ist, dass diese Funktion nur so lange existiert, wie die Instanz von Windows PowerShell ausgeführt wird. Wenn Sie die Shell schließen, verschwindet die Funktion. Sie können die Funktion in Ihr Windows PowerShell-Profil kopieren, bei dem es sich um eine Art automatisches Skript handelt, das bei jedem Start von Windows PowerShell ausgeführt wird. Diese Vorgehensweise würde die Funktion in jedem Windows PowerShell-Fenster zur Verfügung stellen, das Sie öffnen. Alternativ dazu können Sie die Funktion in ein eigenständiges Skript umwandeln, das Sie dann einfach durch Eingabe des Skriptpfads und Dateinamens ausführen können.

Abbildung 2 Ergebnisse beim Ausführen der Funktion „Get-ServicePacks“

Abbildung 2** Ergebnisse beim Ausführen der Funktion „Get-ServicePacks“ **

Die Welt ist eine Datei (oder ein Ordner)

Windows PowerShell besteht aus mehr als nur Funktionen und Cmdlets. Im Folgenden wird ein Blick auf die Dateiverwaltung geworfen, um Ihnen einen Einblick in weitere Funktionen zu gewähren. Sie sind wahrscheinlich besser mit der Laufwerks- und Ordnernavigation in Cmd.exe vertraut. Geben Sie „C:“ ein, um zum C-Laufwerk zu wechseln, und „cd \test“, um den Ordner „C:\Test“ zu öffnen. Windows PowerShell funktioniert genauso, wobei „cd“ nur ein Alias für das Cmdlet „Set-Location“ ist.

Versuchen Sie, „Get-PSDrive“ auszuführen – das Cmdlet, das alle verfügbaren Laufwerke auflistet. Zusätzlich zu den üblichen Laufwerken C:, D: und möglicherweise A: werden Sie außerdem die so genannten Laufwerke Cert, Env und andere Laufwerke namens HKCU und HKLM finden Windows PowerShell macht viele verschiedene Arten von Speicherressourcen als Laufwerke verfügbar, wobei der lokale Zertifikatsspeicher, Umgebungsvariablen und die Registrierung über eine vertraute dateiartige Navigationsschnittstelle bereitgestellt werden.

Ändern Sie die Registrierungsgruppe „HKEY_LOCAL_MACHINE“ durch Eingabe von „Set-Location HKLM:“ (oder „cd hklm:“, falls sie die Verknüpfung bevorzugen), und drücken Sie die Eingabetaste. Führen Sie dann „cd software\microsoft“ aus, um in den Schlüssel „SOFTWARE\Microsoft“ zu wechseln. Mithilfe von „dir“, einem Alias für das Cmdlet „Get-ChildItem“, können Sie die Unterschlüssel in diesem Teil der Registrierung auflisten. Wenn Sie einen Schlüssel entfernen möchten, verwenden Sie „del“, als ob der Schlüssel eine Datei oder ein Ordner wäre. (An dieser Stelle wird zur Vorsicht geraten, da schwerwiegende Probleme auftreten können, wenn Sie erforderliche Schlüssel entfernen oder die Registrierung falsch ändern).

All diese Flexibilität rührt von den Anbietern her, die Ressourcen (wie z. B. den Registrierungs- und Zertifikatsspeicher) einem Format zuordnen, das wie ein Dateisystem aussieht. Microsoft plant, Windows PowerShell auf zusätzliche Anbieter zu erweitern, die Ihnen die Möglichkeit geben, z. B. so durch einen Exchange Server-Speicher zu navigieren, als ob er ein Dateisystem wäre. Dies ist insofern ein sehr wichtiges Verfahren, als es die große Vielfalt an Repositorys, die von Windows verwendet werden, identisch erscheinen lässt. Außerdem können alle Repositorys durch ein System von Befehlen und Verfahren, mit denen Sie bereits vertraut sind, leicht verwaltet werden.

Entwicklung mit Blick auf Sicherheit

Wie bereits erwähnt, wurde Windows PowerShell im Hinblick auf Sicherheit entworfen. Die primäre Sicherheitsfunktion in Windows PowerShell ist seine Ausführungsrichtlinie. Standardmäßig ist diese Richtlinie auf „Restricted“ (Eingeschränkt) festgelegt. Diese Einstellung können Sie durch Ausführen des Cmdlets „Get-ExecutionPolicy“ überprüfen. Im eingeschränkten Modus funktionieren Skripts nicht. Daran lässt sich nichts ändern. Da dies der Standardmodus ist, können integrierte Skripts mit Windows PowerShell nicht ausgeführt werden.

Sie können mit dem Cmdlet „Set-ExecutionPolicy“ andere Modi angeben. Ich persönlich bevorzuge den Modus „RemoteSigned“. Damit können lokale Skripts (nicht jedoch Remoteskripts) ausgeführt werden, ohne digital signiert zu sein. Dies ist die einfachste Methode zum Entwickeln und Testen von Skripts. Im Modus „AllSigned“ werden keine Skripts ausgeführt, es sei denn sie sind digital anhand eines Zertifikats signiert worden, das von einem vertrauenswürdigen Herausgeber stammt. Mit der Richtlinie „Unrestricted“ wird alles ausgeführt. Von diesem Modus ist abzuraten, da hiermit in Windows PowerShell unter Umständen die Ausführung schädlicher Skripts ermöglicht wird, die auf Ihren Computer gelangen. Beachten Sie, dass die Ausführungsrichtlinie auch von der Gruppenrichtlinie gesteuert werden kann, die alle lokalen Einstellungen außer Kraft setzt. (Sie werden von „Set-ExecutionPolicy“ gewarnt, wenn eine Gruppenrichtlinieneinstellung Ihre lokalen Einstellungen außer Kraft setzt.)

Außerdem führt Windows PowerShell keine Skripts vom aktuellen Verzeichnis aus, falls Sie den Pfad nicht angegeben haben. Dadurch sollen unberechtigte Befehlsaneignungen verhindert werden. Angenommen, ein Benutzer erstellt ein Skript, das die Bezeichnung „IPConfig.ps1“ trägt („PS1“ ist die Dateinamenerweiterung für Windows PowerShell-Skriptdateien). Wenn Dateien aus dem aktuellen Ordner ausgeführt werden könnten, bestünde das Risiko, dass Sie „ipconfig“ eingeben und dieses benutzerdefinierte Skript ausführen, obwohl Sie eigentlich das Windows-Programm Ipconfig.exe ausführen möchten. Da in Windows PowerShell Skripts vom aktuellen Ordner aus nicht ausgeführt werden, kann dies nicht passieren. Wenn Sie kein Skript vom aktuellen Ordner aus ausführen wollen, geben Sie nur den Pfad an, zum Beispiel: .\myscript. Über den expliziten Verweis auf den aktuellen Ordner wird sichergestellt, dass Sie wissen, dass Sie ein Skript und keinen Shellbefehl ausführen.

Windows PowerShell hat außerdem Funktionen, die das Experimentieren sicherer machen. Stellen Sie sich z. B. dieses erschreckende Szenario vor (probieren Sie dies jedoch nicht aus):

Get-Process | Stop-Process

Das Cmdlet „Get-Process“ erstellt eine Sammlung von Prozessobjekten und leitet sie zum Cmdlet „Stop-Process“, das sie tatsächlich beenden wird! Als Ergebnis wird nach ungefähr fünf Sekunden ein blauer Bildschirm mit einem STOP-Fehler angezeigt, während alle wichtigen Windows-Prozesse vernichtet werden. Sie können jedoch sehen, was geschehen wird, ohne es tatsächlich zuzulassen, indem Sie den praktischen Parameter „Whatif“ hinzufügen:

Get-process | Stop-Process -Whatif

Wenn Sie dies in Windows PowerShell ausführen, erhalten Sie Angaben dazu, welche Aktionen durch die Cmdlets ausgeführt worden wären, ohne dass die Ausführung tatsächlich erfolgt. Das Onlinehilfesystem in Windows PowerShell (auf das Sie über den Hilfealias zugreifen können) enthält zwar noch keine Erläuterungen zum Parameter „Whatif“, aber sie sollten diesen Parameter im Gedächtnis behalten. Es handelt sich dabei um ein hervorragendes Tool für das Testen von Skripts und Cmdlets und das Überprüfen der Ergebnisse, ohne potenziell schädliche Auswirkungen.

Schlussbemerkung

Unter den Funktionen, die in dieser Version von Windows PowerShell nicht untergebracht werden konnten, stellt der Support für ADSI (Active Directory® Services Interface) die möglicherweise wichtigste Funktion dar. Während Windows PowerShell die sehr widerstandsfähigen .NET-Klassen verwenden kann, die mit Active Directory und anderen Verzeichnisdiensten kompatibel sind, fehlt ihm noch ein praktisches „Get-ADSIObject“-Cmdlet. Aus diesem Grund ist die Arbeit mit Verzeichnisobjekten etwas schwieriger.

Außerdem bietet Windows PowerShell oft viele verschiedene Wege an, die gleiche Aufgabe durchzuführen. Das ist zwar gut, kann jedoch beim Erlernen von Windows PowerShell Verwirrung stiften, da Ihnen für eine vorgegebene Aufgabe gegebenenfalls ein halbes Dutzend verschiedener Beispiele präsentiert wird.

All dies wird mit der Zeit ausgebessert, und das Windows PowerShell-Team wird dem Produkt weitere Funktionen und Möglichkeiten hinzufügen. Halten Sie sich auf dem Laufenden, besuchen Sie den Blog des Teams.

Don Jones ist der Gründer von ScriptingAnswers.com und der Mitautor von Windows PowerShell: TFM (SAPIEN Press, 2006). Sie erreichen ihn unter: don@scriptinganswers.com.

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