Windows 7
24.10.2011
Kommandozeile
1. Teil: „Powershell 2.0 für Windows 7“

Powershell 2.0 für Windows 7

Autor:
Windows 7 hat eine neue Kommandozeile – die Powershell 2.0. com! erklärt die Grundlagen und stellt 12 Befehle vor, mit denen Sie Prozesse überwachen, Dateien organisieren und die Registry optimieren.
Der klassischen Eingabeaufforderung, deren Ursprünge bis in DOS-Zeiten zurückreichen, hat Microsoft in Windows 7 eine neue Kommandozeile zur Seite gestellt – die Powershell 2.0.
  • Die Kommandozeile von Windows 7 heißt Powershell 2.0. Sie lässt sich bei XP und Vista kostenlos nachinstallieren. Über 230 Befehle (Cmdlets) automatisieren fast alle Verwaltungsaufgaben und Analysen am PC.

Der folgende Artikel erklärt, was die Powershell von der klassischen Eingabeaufforderung unterscheidet, wer sie nutzen kann und wie Sie die neuen Funktionen effizient einsetzen. Mit dabei: die zwölf besten Powershell-Befehle – zum sofortigen Ausprobieren.
2. Teil: „Was ist Powershell 2.0“

Was ist Powershell 2.0

Dieser Abschnitt erklärt, was die Powershell 2.0 ist und wie Nutzer von Windows XP und Vista die Powershell 2.0 kostenlos nachrüsten.

Was ist die Powershell?

  • Powershell 2.0: Wem die 230 neuen Befehle nicht genügen, der kann sich eigene Skripts programmieren. Das Beispiel ändert die Titel leiste des Internet Explorers.
Die Powershell 2.0 ersetzt die alte Eingabeaufforderung, die in allen bisherigen Windows-Versionen zur Verfügung steht. Die Powershell 2.0 basiert auf dem .NET-Framework. Während die alte Eingabeaufforderung nur einzelne oder verknüpfte Befehle ausführt, lassen sich mit der Powershell Scripting Language auch komplexe Skripts schreiben. Dafür sind allerdings Visual-Basic-Script-Kenntnisse Voraussetzung.
Die Powershell 2.0 ist bei Windows 7 standardmäßig installiert. Anwender von XP und Vista haben jedoch die Möglichkeit, die Powershell 2.0 nachzurüsten. Die alte Kommandozeile kann weiterhin genutzt werden.

Powershell für XP

Damit sich die kostenlose Powershell 2.0 unter Windows XP installieren lässt, müssen zwei Voraussetzungen erfüllt sein: Das Windows XP Service Pack 3 und das .NET Framework 2.0 SP1 müssen auf dem PC installiert sein. So prüfen Sie diese beiden Voraussetzungen:
Windows XP Service Pack 3: Rufen Sie die „Systemeigenschaften“ mit der Tastenkombination [Windows Pause] auf. In der Rubrik „System“ zeigt Ihnen Windows, welches Service-Pack auf Ihrem PC installiert ist.
.NET Framework 2.0 SP1: Rufen Sie die Systemsteuerung auf und öffnen Sie das Element „Software“ mit einen Doppelklick. Suchen Sie nach dem Eintrag „.NET Framework 2.0 SP1“. Falls Sie nicht fündig werden, laden Sie die Setup-Datei herunter und installieren sie.

Powershell für Vista

Die Installationsroutine der Powershell setzt unter Vista mindestens das SP1 voraus. So prüfen Sie, ob es installiert ist:
Rufen Sie mit der Tastenkombination [Windows Pause] das Fenster „Basisinformationen über den Computer anzeigen“ auf. In der Rubrik „Windows-Edition“ zeigt Vista an, welches Service-Pack auf Ihrem Rechner installiert ist.
3. Teil: „So bedienen Sie die Powershell

So bedienen Sie die Powershell

Powershell-Skripts – sie heißen Cmdlets – können viel mehr als die Batch-Programme der herkömmlichen Kommandozeilenumgebung. Lesen Sie, wie Sie einfache Befehle mit Cmdlets nutzen.

Was ist ein Cmdlet?

Die Befehle in der Powershell heißen Cmdlets – sprich: Commandlets. Das sind kleine Funktionseinheiten, die beispielsweise Dateien und Ordner kopieren oder Dateien und Ordner erzeugen. Cmdlets folgen dem Benennungsschema Verb-Substantiv. So heißt etwa das Cmdlet für den Hilfe-Aufruf get-help und das Cmdlet für den Verzeichniswechsel set-location. Die Groß- und Kleinschreibung spielt beim Aufruf keine Rolle. In der Powershell 2.0 sind bereits über 230 Cmdlets enthalten.

Die ersten Befehle

  • get-command: Der Befehl listet alle rund 230 verfügbaren Cmdlets auf, die in der Powershell enthalten sind.
Die Powershell mit ihren Cmdlets ist vergleichsweise einfach zu bedienen, wie die folgenden drei Befehle zeigen.
Starten Sie zunächst die Powershell. Tippen Sie dazu unter Windows 7 in das Suchfeld windows power ein und bestätigen Sie mit der Eingabetaste. In XP und Vista rufen Sie nach der Installation „Start, Alle Programme, Zubehör, Windows PowerShell, Windows PowerShell“ auf. Die Powershell startet. Tippen Sie an der Eingabeaufforderung den Befehl get-command ein.
Die Powershell zeigt Ihnen nun alle verfügbaren Cmdlets an. Die Hilfe zu dem Befehl get-command rufen Sie mit get-help get-command auf. Anwendungsbeispiele mit ausführlichen Beschreibungen zu dem Cmdlet erhalten Sie mit get-help get-command–detailed.

Shortcuts für die Powershell 2.0

Tabelle:
Diese Übersicht zeigt die 18 nützlichsten Tastenkürzel für die Kommandozeile.

4. Teil: „Die 12 besten Cmdlets für die Powershell

Die 12 besten Cmdlets für die Powershell

Die Powershell ist mit rund 230 Cmdlets ausgestattet. Die Befehle ermöglichen es dem ambitionierten Anwender, schnell auf wichtige Windows-Funktionen zuzugreifen und detaillierte Infos zum PC und zu Windows zu erhalten. Auf diese Weise lässt sich Windows komfortabel analysieren, tunen, absichern und verwalten.
Der folgende Abschnitt stellt die zwölf besten Cmdlets vor und erklärt, wie Sie diese nutzen. Sie können mit den Cmdlets zum Beispiel Windows-Prozesse und die Registry überwachen oder die Hardware Ihres PCs analysieren.

1. get-wmiobject

  • BIOS-Version auslesen: Der Befehl get-wmiobject liest die BIOS-Version unter Windows aus. Sie brauchen den PC dazu nicht neu zu booten.
Die Verwaltungsbibliothek Windows Management Instrumentation (WMI) sammelt alle Daten zum PC und zu Windows. Die Powershell greift direkt auf diese Informationen zu. Auf der Kommandozeile rufen Sie Angaben zu Prozessor, Grafikchip, BIOS, Speicher und Betriebssystem mit dem Cmdlet get-wmiobject ab.
CPU und GPU analysieren: Klarheit über die eingebaute CPU bringt der Befehl get-wmiobject win32_processor. In der Ausgabe sind alle wichtigen Angaben zum Prozessor und dessen Funktionen aufgelistet.
Wollen Sie nur die Produktbezeichnung der CPU erfahren, verwenden Sie den Befehl (get-wmiobject win32_processor).name.
Gleiches gilt für die Grafikkarte. Das Kommando get-wmiobject win32_videocontroller gibt die Details zur Grafikkarte aus.
Speicherbelegung bestimmen: Auch die Speicherbestückung lässt sich per Kommando ermitteln. Der Befehl
Code-Beispiel
1
2
get-wmiobject win32_physical memory | format-table tag, banklabel, devicelocator, capacity
 
Code per E-Mail versenden

gibt die gewünschten Informationen im Tabellenformat aus.
Dieser Befehl birgt eine Besonderheit der Powershell: Hier werden zwei Befehle miteinander verknüpft. Mit dem ersten Teil get-wmiobject rufen Sie die Informationen zum Speicher ab und übergeben das Ergebnis an den zweiten Befehl format-table, der die gewünschten Infos filtert und in einer Tabelle darstellt. Getrennt werden beide Befehle durch das Pipe-Symbol „|“, das Sie mit dem Tastenkürzel [Alt Gr <] eingeben.
BIOS-Version auslesen: Für ein BIOS-Update muss man die aktuelle BIOS-Version kennen. Windows ist die Info nicht leicht zu entlocken. In der Powershell genügt der Befehl get-wmiobject win32_bios, und schon sehen Sie die Versionsnummer.

2. get-hotfix

Wenn Sie prüfen möchten, ob auf Ihrem Rechner ein bestimmtes Update vorhanden ist, kommen Sie mit der Powershell und dem Befehl get-hotfix wesentlich schneller ans Ziel, als wenn Sie sich durch die vielen Dialogfenster von Windows klicken.
Updates auflisten: Um beispielsweise nachzuprüfen, ob der Patch KB972270 installiert ist, tippen Sie get-hotfix –id kb972270 ein. Wenn er nicht vorhanden ist, gibt die Powershell eine Fehlermeldung aus.
Um alle installierten Security-Updates anzuzeigen, verwenden Sie das Kommando get-hotfix –description security*. In der Ausgabe sehen Sie dann alle Updates, in deren Beschreibung die Zeichenfolge „security“ vorkommt.
Update-Liste erstellen: Eine Liste aller auf dem Rechner installierten Updates lässt sich auch in ein HTML-Dokument exportieren. Geben Sie dazu folgenden Befehl ein:
Code-Beispiel
1
2
get-hotfix | select-object description, hotfixid | where-object {$_.description -ne ''} | convertto-html > hotfixliste.html
 
Code per E-Mail versenden

Im aktuellen Arbeitsverzeichnis befindet sich anschließend das entsprechende HTML-Dokument.

3. get-process

  • get-process:Wenn ein Prozess mehr als einmal vorhanden ist, dann sollten Sie prüfen, ob es sich dabei um einen Trojaner handelt.
Analysieren Sie mit der Powershell die Prozesse Ihres Windows.
Schädlinge finden: Trojaner tarnen sich mit dem Namen eines Systemprozesses. Man kann sie aber daran erkennen, dass sie nicht aus dem Systemverzeichnis gestartet wurden. Die folgende Befehlskette zeigt Prozesse an, die unter demselben Namen laufen und mehr als einmal gestartet wurden. Außerdem zeigt sie für jeden Prozess das Verzeichnis an, aus dem er gestartet wurde:
Code-Beispiel
1
2
get-process | group-object {$_ name} | where-object {$_.count -gt 1} | foreach-object {get-process $_.name} | format-list name, path
 
Code per E-Mail versenden

Der Aufruf enthält fünf Cmdlets. Der Befehl get-process ruft die aktiven Prozesse ab. Das Kommando group-object mit dem Argument $_.name gruppiert sie dem Namen nach. Prozesse, die mehr als einmal vorkommen, filtert where-object mit $_.count heraus. Der Befehl foreach-object ruft für jeden der ausgewählten Prozesse erneut das Kommando get-process auf. Das bringt die Liste der Doppelgänger ins Bild. Der Befehl format-list name, path formatiert die Liste.

4. get-childitem

  • get-childitem: Der Befehl durchsucht das Laufwerk „F:\“ nach Dateien, die größer sind als 4 GByte. Die Funde werden sortiert und absteigend am Bildschirm angezeigt. Ergebnis: Die größte Datei ist „dragon1.iso“ mit über 8 GByte. Danach kommen zwei Backup-Dateien mit 5 GByte und 4,8 GByte.
Die Powershell ist auch nützlich, wenn es darum geht, die Festplatte zu entrümpeln. Duplikate oder temporäre Dateien lassen sich ganz einfach mit dem Befehl get-childitem aufstöbern.
Speicherplatz freigeben: Temporäre Dateien beispielsweise zeigt der Befehl get-childitem.–recurse c:\*.tmp an. Um die temporären Dateien zu löschen, verwenden Sie das Kommando get-childitem -recurse c:\*.tmp | remove-item.
Speicherfresser finden: Spüren Sie mit folgendem Befehl große Dateien auf.
Code-Beispiel
1
2
get-childitem -recurse f:\ | where-object {$_.length gt 4gb} | sort-object.length -descending
 
Code per E-Mail versenden

Das Cmdlet get-childitem durchsucht mit dem Parameter -recurse alle Unterverzeichnisse des Laufwerks „F:“. Das Cmdlet where-object.{$_.length -gt 4gb} sucht nach allen Dateien, die größer als 4 GByte sind, und der Befehl sort-object gibt das Ergebnis sortiert aus.

5. copy-item

Das Cmdlet copy-item hilft beim Kopieren von Dateien und Verzeichnissen.
Datei kopieren: Um zum Beispiel die Datei „Test.txt“ aus dem Verzeichnis „C:\Texte“ in den Ordner „F:\Backup“ zu kopieren, verwenden Sie das Kommando copy-item c:\texte\test.txt f:\backup.
Verzeichnisse kopieren: Wenn Sie den Ordner „C:\Texte“ inklusive der Unterverzeichnisse in den Ordner „F:\Backup“ kopieren wollen, tippen Sie den Parameter copy-item c:\texte\ f:\backup -recurse.

6. move-item

Verschieben lassen sich Dateien mit dem Kommando move-item. Wie beim Befehl copy-item lautet der Grundbefehl move-item c:\texte\test.txt f:\backup, damit die Datei „Test.txt“ von „C:\Texte“ in das Verzeichnis „F:\Backup“ verschoben wird.
Bilder verschieben: Um alle Dateien eines bestimmten Typs – etwa alle JPG-Dateien – von Laufwerk „C:“ in den Ordner „F:\Bilder“ zu verschieben, verknüpfen Sie den Suchbefehl get-childitem mit dem Cmdlet move-item. Das Kommando lautet dann
Code-Beispiel
1
2
get-childitem -recurse c:\ -include *.jpg | move-item -dest f:\bilder
 
Code per E-Mail versenden

7. remove-item

Die Powershell bringt zum Löschen von Ordnern und Dateien das Cmdlet remove-item mit.
Datei löschen: Um beispielsweise die Datei „Test.txt“ im Ordner „C:\Texte“ zu löschen, verwenden Sie den Befehl remove-item c:\texte\test.txt.
Ordner löschen: Wer den Inhalt eines Verzeichnisses samt allen Unterverzeichnissen entfernen möchte, tippt remove-item c:\texte\* -recurse ein. Der Platzhalter * steht dabei für alles, was sich im Verzeichnis befindet. Der Parameter -recurse weist das Cmdlet an, auch die Unterverzeichnisse zu entfernen.

8. get-computerrestorepoint

  • get-computerrestorepoint: Das Cmdlet zeigt hier alle verfügbaren Wiederherstellungspunkte an. Die Parameter restore-computer und checkpoint-computer spielen Wiederherstellungspunkte zurück und erstellen neue.
Neben Dateioperationen lassen sich mit der Powershell auch Sicherheitsfunktionen wie die Systemwiederherstellung steuern. Dazu müssen Sie die Power-shell als Administrator ausführen.
Wiederherstellungspunkte auflisten: Lassen Sie sich mit dem Befehl get-computerrestorepoint die vorhandenen Wiederherstellungspunkte anzeigen. In der ausgegebenen Liste finden Sie unter „Description“ eine Kurzbeschreibung mit dem Anlass, aus dem ein Wiederherstellungspunkt erstellt wurde, und unter „SequenceNumber“ die eindeutige Bezeichnung des Wiederherstellungspunkts.
System wiederherstellen: Diese „SequenceNumber“ benötigen Sie für die Wiederherstellung. Tippen Sie dazu restore-computer X ein, wobei das „X“ für den Wiederherstellungspunkt steht, zu dem Sie zurückkehren wollen.
Wiederherstellungspunkt erstellen: Es lässt sich aber auch ein Wiederherstellungspunkt manuell anlegen. Verwenden Sie dazu den Befehl checkpoint-computer."Ihre Beschreibung".

9. set-acl

Mit der Powershell lassen sich auch die Zugriffsrechte von Dateien setzen. Für diese Aufgaben bringt die Powershell die Cmdlets get-acl und set-acl mit.
Zugriffsrechte setzen: Die Kombination der Befehle get-acl und set-acl kopiert die Zugriffsrechte von einer Datei auf die andere. Wenn Sie beispielsweise die Zugriffsrechte der Datei „Mein.txt“ auf die Datei „Text.txt“ anwenden wollen, kopieren Sie die Rechte mit dem Befehl:
Code-Beispiel
1
2
get-acl d:\mein.txt | set-acl -path d:\test.txt
 
Code per E-Mail versenden

10. get-counter

Wer mit der Leistung seines Rechners unzufrieden ist, führt mit der Powershell eine Leistungsanalyse durch. Das Cmdlet get-counter hilft dabei. Es greift in Echtzeit auf die Daten des Windows-Ressourcenmonitors zu und gibt sie direkt auf dem Bildschirm aus.
CPU überwachen: Um zum Beispiel die Prozessorzeit über einen Zeitraum von zehn Sekunden zu verfolgen, verwenden Sie folgenden Befehl:
Code-Beispiel
1
2
get-counter "\prozessor(*)\prozessorzeit.(%)" -maxsamples 10 
 
Code per E-Mail versenden

Damit lässt sich ermitteln, ob ein rechenintensives Programm Multicore-fähig ist. Es lassen sich aber auch andere Bestandteile des PCs überwachen. Eine vollständige Liste der möglichen Parameter liefert Ihnen das Kommando get-counter -listset *.

11. get-content

Das Cmdlet get-content dient in der Hauptsache dazu, den Inhalt einer Datei in der Eingabeaufforderung abzubilden. Das Cmdlet lässt sich aber noch für andere Zwecke nutzen.
Zeilen auslesen: Der Befehl (get-content d:\history_en.txt -totalcount.5)[-1] bewirkt, dass die fünfte Zeile der Datei „history_en.txt“ angezeigt wird.
Text exportieren: Wer die ersten 100 Zeilen einer umfangreichen Bestenliste in eine neue Datei übertragen will, hängt das Cmdlet set-content an. Der Befehl lautet
Code-Beispiel
1
2
get-content D:\Open-Source\Bestenliste.txt -totalcount.100 | set-content D:\top100.txt 
 
Code per E-Mail versenden

12. Get-itemproperty

Informationen etwa zur Registry zeigt das Cmdlet get-itemproperty an. Die Registry lässt sich in der Powershell wie ein Ordner mit Unterordnern ansprechen. Um etwa in den Zweig „HKEY_LOCAL_MACHINE“ zu wechseln, verwenden Sie den Befehl
Code-Beispiel
1
2
set-location hklm:\
 
Code per E-Mail versenden

Sie sehen, der Registry-Zweig wird mit den Anfangsbuchstaben der einzelnen Wörter des Zweiges abgekürzt. Gleiches gilt auch für den Zweig HKEY_CURRENT_USER. Hier lautet die Abkürzung hkcu:\.
Im folgenden Beispiel überprüfen Sie die Autostart-Einträge in der Registry Ihres Windows. Sie sehen dann auf einen Blick, welche Programme beim Start von Windows automatisch geladen werden.
Autostart untersuchen: Wer wissen möchte, welche Programme Windows beim Start automatisch lädt, wendet die folgenden zwei Befehle an.
Die beiden Kommandos zeigen die Autostart-Einträge in den Registry-Zweigen „HKEY_LOCAL_MACHINE sowie HKEY_CURRENT_USER:
Code-Beispiel
1
2
get-itemproperty hklm:\software\microsoft\windows\currentversion\run
 
Code per E-Mail versenden

und:
Code-Beispiel
1
2
get-itemproperty hkcu:\software\microsoft\windows\currentversion\run
 
Code per E-Mail versenden

5. Teil: „Eigene Skripts für die Powershell erstellen

Eigene Skripts für die Powershell erstellen

  • Eigene Powershell-Skripts erstellen: Mit Windows Powershell ISE erstellen Sie eigene Skripts für die Powershell. Das Beispiel zeigt ein Notepad-Killer-Skript.
Die Powershell lässt sich mit eigenen Skripts erweitern. Dafür ist in der Powershell die Entwicklungsumgebung Windows Powershell ISE integriert.

Skript erstellen

Sie wollen einen bestimmten Prozess – etwa Notepad – beenden und dafür ein Skript erstellen.
Starten Sie dazu Windows Powershell ISE. Unter Windows 7 klicken Sie auf „Start“ und tippen windows powershell ise ein. Bestätigen Sie mit der Eingabetaste. In XP und Vista rufen Sie „Start, Alle Programme, Zubehör, Windows PowerShell, Windows PowerShell ISE“ auf. Die Windows Powershell ISE startet. Tippen Sie im obersten Fenster den folgenden Befehl ein:
Code-Beispiel
1
2
get-process -name "notepad" | stop-process
 
Code per E-Mail versenden

Speichern Sie die Datei unter dem Namen kill_notepad.ps1 und schließen Sie Windows Powershell ISE.

Skript verwenden

Starten Sie jetzt die Powershell mit Administratorrechten. Prüfen Sie anschließend, ob eigene Skripts auf dem PC ausgeführt werden dürfen. Nutzen Sie dazu das Kommando get-executionpolicy. Wenn die Meldung „Restricted“ erscheint, dürfen eigene Skripts nicht ausgeführt werden. Heben Sie die Beschränkung mit set-executionpolicy unrestricted auf. Den folgenden Hinweis beantworten Sie mit j.
Testen Sie Ihr Skript: Starten Sie Notepad. Führen Sie dann das Skript in der Powershell mit
Code-Beispiel
1
2
& "d:\kill_notepad.ps1"
 
Code per E-Mail versenden

aus. Notepad wird augenblicklich geschlossen.

mehr zum Thema