Mobile-Menu

System-Administration mit Microsofts PowerShell Teil 5 Systemverwaltung mit PowerShell

Autor / Redakteur: Markus Widl / Dipl.-Ing. (FH) Andreas Donner

Der fünfte Teil der PowerShell-Artikelserie widmet sich der Systemverwaltung. Dabei werden nur Bordmittel, also die von der PowerShell bereitgestellten Cmdlets betrachtet. Auch das Navigationsparadigma spielt beim Zugriff auf unterschiedliche Informationsspeicher eine wichtige Rolle.

Anbieter zum Thema

Die PowerShell unterstützt die Verwaltung folgender Systembereiche direkt durch eine Reihe von Cmdlets: Prozesse, Dienste, Ereignisprotokolle, Dateien und Ordner sowie Systemregistrierung

Die Verwaltung dieser fünf Bereiche wird im Artikel näher vorgestellt. Natürlich beschränkt sich eine vollständige Systemadministration nicht nur auf diese Bereiche, jedoch ist der Anwender dabei häufig gezwungen, auf andere Techniken wie WMI (Windows Management Instrumentation) auszuweichen, weil keine geeigneten Cmdlets zur Verfügung stehen. WMI ist Bestandteil von Folge 7 dieser Artikelserie.

Zugriff auf Prozesse

Zur Prozessverwaltung gibt es die beiden Cmdlets get-process und stop-process. Zu diesen und auch allen anderen Befehlen kann über get-help , also beispielsweise get-help get-process, ein Hilfetext aufgerufen werden, der die Möglichkeiten zum Einsatz beschreibt.

get-process ohne die Angabe weiterer Parameter liefert eine Liste der aktiven Prozesse, welche einige Eigenschaften der vom Cmdlet ermittelten Process-Objekte enthält. Die dort enthalten Informationen stellen eine Vorauswahl der PowerShell-Entwickler dar. Sollen alle verfügbaren Eigenschaften dargestellt werden, kann dies mittels select-object erreicht werden:

get-process | select-object *

Um nur die Daten bestimmter Prozesse auszugeben, kann eine Filterung über die Prozessbezeichnung und die Prozess-ID erfolgen. Beispielsweise liefert folgender Aufruf nur die Daten zu Notepad-Instanzen:

get-process -name notepad

Die Auswahl über die Prozess-ID erfolgt über den Paramater „id“. Beispiel:

get-process -id 3068

Mit stop-process können laufende Prozesse angehalten werden. Die Auswahl, welche Prozesse davon betroffen sein sollen, wird ebenfalls über die oben angesprochenen Parameter durchgeführt. Alternativ dazu kann stop-service auch die über die Pipeline übergebenen Prozesse anhalten. Beispiel:

get-process -name notepad | stop-service

Dies kann gegebenenfalls sinnvoll sein, wenn über die Pipeline eine komplexe Auswahl der Prozessobjekte erfolgt. Die Pipeline selbst war bereits Gegenstand des 3. Teils der Artikelserie.

Dienste verwalten

Zur Dienstverwaltung kennt die PowerShell eine ganze Reihe verschiedener Cmdlets: get-, new-, restart-, resume-, set-, start-, stop- und suspend-service. Durch die jeweils vorangestellten Verben ist der Zweck der einzelnen Cmdlets weitgehend selbsterklärend. Deren Einsatz kann von den Prozess-Cmdlets abgeleitet werden.

Ereignisprotokolle auslesen

Zum Auslesen der Ereignisprotokolle gibt es den Befehl get-eventlog. Dieses Cmdlet muss zwingend mit dem Parameter logname aufgerufen werden, dem der Name des gewünschten Protokolls übergeben wird, also etwa:

get-eventlog -logname Application

Als Ergebnis liefert der Befehl sämtliche Einträge des angegebenen Protokolls. Ist die Liste zu umfangreich, kann über den Parameter newest festgelegt werden, dass nur eine bestimmte Anzahl der neuesten Einträge aufgeführt wird. Folgender Aufruf liefert beispielsweise nur die aktuellsten fünf Einträge:

get-eventlog -logname Application -newest 5

Über das Cmdlet where-object kann aber auch eine komplexere Filterung vorgenommen werden. Die zurückgegebenen Objekte von get-eventlog verfügen über die Eigenschaft entrytype. Sollen etwa nur Fehlermeldungen ausgegeben werden, kann damit eine Abfrage formuliert werden:

get-eventlog -logname Application | where-object { $_.entrytype -eq „error“ }

Welche Eigenschaften in den jeweils gelisteten Objekten enthalten sind, kann über das Cmdlet get-member ermittelt werden. Beispiel:

get-eventlog -logname Application | get-member

Dieses Cmdlet zeigt zu Beginn den Typ des Objekts und in einer Tabelle dessen Aufbau an.

Zugriff auf Dateien und Ordner mittels Navigationsparadigma

Dateien und Ordner werden, wie etwa auch die Systemregistrierung, über das Navigationsparadigma bereitgestellt. Das heißt, der Zugriff auf diese Inhalte geschieht über denselben Befehlssatz. So ist es beispielsweise möglich, durch die Schlüsselhierarchie genauso zu navigieren, wie durch die Ordnerstruktur auf dem Dateisystem. Dazu werden virtuelle Laufwerke bereitgestellt, etwa HKLM: und HKCU:, doch dazu später mehr.

Neben dem Dateisystem werden auch folgende Informationsspeicher über das Navigationsparadigma angesprochen: Zertifikatspeicher, Umgebungsvariablen, Aliase, Funktionen sowie Variablen.

Diese Liste ist dabei erst der Anfang. Mit hoher Wahrscheinlichkeit wird Microsoft bei der nächsten Version der PowerShell auch das Active Directory in das Navigationsparadigma aufnehmen. Auch andere Hersteller können dieses Konzept nutzen, indem sie so genannte Provider ausliefern. Dabei handelt es sich um eine Art Treiber, der in das Navigationsparadigma integriert wird.

Doch wie wird nun auf Dateien und Ordner zugegriffen? Dazu wird etwa set-location zum Wechseln des Pfades verwendet.

set-location c:\windows

Alternativ dazu gibt es auch den von der herkömmlichen Eingabeaufforderung bekannten Befehl cd, der als Alias (Befehls-Kurzform) angelegt ist und im Hintergrund set-location ausführt. Wichtig ist dabei, zwischen cd und dem Pfad ein Leerzeichen zu setzen, damit der PowerShell-Interpreter Befehl und Parameter voneinander trennen kann.

get-childitem liefert wie sein Alias dir den Inhalt des aktuellen Ordners. Daneben gibt es get-, new-, set-, remove-, move-, copy-, rename- sowie clear-item, wobei jeweils über den Parameter itemtype angegeben werden muss, ob Dateien („File“) oder Ordner („Directory“) gemeint sind. Auf den Inhalt von Dateien wird über add-, clear-, get- und set-content zugegriffen.

Die Systemregistrierung und das Navigationsparadigma

Wie bereits erwähnt, wird auch die Systemregistrierung über das Navigationsparadigma mittels virtueller Laufwerke angesprochen. Der einfache Laufwerkswechsel, etwa über den Befehl „C:“, ist mit „HKCU:“ oder „HKLM:“ leider nicht möglich. Mit set-location funktioniert es jedoch durchaus:

set-location „HKCU:“

Der Prompt gibt das jeweilige (virtuelle) Laufwerk und den aktiven Pfad an. Zwischen den Schlüsseln kann hier nun auch mit cd gewechselt werden. Auch ein „dir“ funktioniert.

Der Zugriff auf Schlüssel wird neben set-location und get-childitem mittels copy-, new- und remove-item durchgeführt. Werte dagegen werden mit get-, set-, new-, rename- und remove-itemproperty verwaltet. Folgendes Beispiel liest beispielsweise die Startseite des Internet Explorers des aktuellen Benutzers aus:

get-itemproperty -path „HKCU:\Software\Microsoft\Internet Explorer\Main“ -name „Start Page“

Und mit set-itemproperty kann die Startseite gesetzt werden:

set-itemproperty -path „HKCU:\Software\Microsoft\Internet Explorer\Main“ -name „Start Page“ -value „www.IP-Insider.de“

Der nächste Teil der PowerShell-Artikelserie beschreibt, wie die Klassen aus dem .NET-Framework direkt aus der PowerShell heraus aufgerufen werden können. Der Einsatz einer .NET-Programmiersprache wie C# oder Visual Basic.NET ist dabei nicht erforderlich.

Artikelfiles und Artikellinks

(ID:2003350)