PowerShell 5: Windows-Automation für Einsteiger und Profis
Von Tobias Weltner
()
Über dieses E-Book
Einsteiger finden sofort Zugang zur PowerShell. Autodidaktisch erworbene Vorkenntnisse werden komplettiert und vertieft. Profis entdecken unzählige wertvolle Hinweise, Praxistipps und "Best Practices" für professionelles und sicheres Skripten.
Aus dem Inhalt:
■ Schnelleinstieg: PowerShell-Grundlagen und rasche Erfolge mit interaktiven Kommandos
■ PowerShell-Skripte, Sicherheitseinstellungen und digitale Signaturen
■ Durchdachter Einsatz der objektorientierten Pipeline
■ Textoperationen, Parsing und Reguläre Ausdrücke
■ Mit Objekten und Typen direkt auf das .NET Framework zugreifen
■ Wiederkehrende Aufgaben als eigene Befehle in Modulen verfügbar machen
■ Mit PowerShellGet Module und Skripte zentral verwalten
■ Prozessübergreifendes Debugging, Fehlerbehandlung und Logging
■ Abgesicherte Fernzugriffe und Sicherheitsstrategien (JEA)
■ Hintergrundjobs, Multithreading und Performancesteigerung
■ Workflows und Desired State Configuration (DSC)
■ Benutzeroberflächen mit WPF gestalten
■ Professionelles Test-Driven Development (TDD) mit Pester
Mehr von Tobias Weltner lesen
Windows PowerShell: Grundlagen und Scripting-Praxis für den Einstieg Bewertung: 0 von 5 Sternen0 BewertungenPowerShell 7 und Windows PowerShell: Das komplette Praxiswissen für Administratoren und IT-Profis. Für Windows, Linux, macOS & Cloud Bewertung: 0 von 5 Sternen0 Bewertungen
Ähnlich wie PowerShell 5
Ähnliche E-Books
PowerShell – kurz & gut: Für PowerShell 7 und Windows PowerShell 5 Bewertung: 0 von 5 Sternen0 BewertungenMicrosoft Windows Server 2019 – Das Handbuch: Von der Planung und Migration bis zur Konfiguration und Verwaltung Bewertung: 0 von 5 Sternen0 BewertungenPowerShell für die Windows-Administration: Ein kompakter und praxisnaher Überblick Bewertung: 0 von 5 Sternen0 BewertungenHandbuch Infrastructure as Code: Prinzipien, Praktiken und Patterns für eine cloudbasierte IT-Infrastruktur Bewertung: 0 von 5 Sternen0 BewertungenArchitekturpatterns mit Python: Test-Driven Development, Domain-Driven Design und Event-Driven Microservices praktisch umgesetzt Bewertung: 0 von 5 Sternen0 BewertungenVue.js kurz & gut Bewertung: 0 von 5 Sternen0 BewertungenMicrosoft Exchange Server 2016 – Das Handbuch: Von der Einrichtung bis zum reibungslosen Betrieb Bewertung: 0 von 5 Sternen0 BewertungenMicrosoft Windows Server 2016 – Das Handbuch: Von der Planung und Migration bis zur Konfiguration und Verwaltung Bewertung: 0 von 5 Sternen0 BewertungenWindows 10: Original Microsoft Prüfungstraining MD-100 Bewertung: 0 von 5 Sternen0 BewertungenMicrosoft Exchange Server 2019 – Das Handbuch: Von der Einrichtung bis zum reibungslosen Betrieb Bewertung: 0 von 5 Sternen0 BewertungenDatenbankentwicklung lernen mit SQL Server 2017: Der praxisorientierte Grundkurs Bewertung: 0 von 5 Sternen0 BewertungenWebseiten-Layout mit CSS: Der perfekte Einstieg in Cascading Style Sheets Bewertung: 0 von 5 Sternen0 BewertungenWindows-Befehle für Server 2016 und Windows 10 – kurz & gut: Inklusive PowerShell-Alternativen Bewertung: 0 von 5 Sternen0 BewertungenAngular: Das Praxisbuch zu Grundlagen und Best Practices Bewertung: 0 von 5 Sternen0 BewertungenMicrosoft SharePoint – Das Praxisbuch für Anwender: Zusammenarbeit im Team mit SharePoint Online und SharePoint Server 2019 Bewertung: 0 von 5 Sternen0 BewertungenPraxiswissen Joomla! 4: Das Kompendium Bewertung: 0 von 5 Sternen0 BewertungenMicrosoft Office 2019 – Das Handbuch: Für alle Editionen inklusive Office 365 Bewertung: 0 von 5 Sternen0 BewertungenEinführung in SQL: Daten erzeugen, bearbeiten und abfragen Bewertung: 0 von 5 Sternen0 BewertungenC# 10 – kurz & gut Bewertung: 0 von 5 Sternen0 BewertungenPowerShell: Grundlagen und Fortgeschrittene Techniken: Die IT-Sammlung Bewertung: 0 von 5 Sternen0 BewertungenModerne Datenzugriffslösungen mit Entity Framework 6 Bewertung: 0 von 5 Sternen0 BewertungenProduktiv auf der Linux-Kommandozeile: Sicher und souverän mit Linux arbeiten Bewertung: 0 von 5 Sternen0 BewertungenKeine Angst vor Microsoft Access!: Datenbanken verstehen, entwerfen und entwickeln - Für Access 2007 bis 2019 Bewertung: 0 von 5 Sternen0 BewertungenRoutineaufgaben mit Python automatisieren: Praktische Programmierlösungen für Einsteiger Bewertung: 0 von 5 Sternen0 BewertungenWindows 11 für Profis: Insider-Wissen – praxisnah & kompetent Bewertung: 0 von 5 Sternen0 BewertungenSpring Boot: Cloud-native Anwendungen mit Java und Kotlin erstellen Bewertung: 0 von 5 Sternen0 BewertungenMachine Learning – Die Referenz: Mit strukturierten Daten in Python arbeiten Bewertung: 0 von 5 Sternen0 BewertungenPraxiswissen TYPO3 CMS 10 LTS: Der praxisnahe TYPO3-Einstieg, Komplette Beispielanwendung zum Download, Mit Tipps aus dem Support Bewertung: 0 von 5 Sternen0 BewertungenTroubleshooting und Monitoring von Exchange und Office 365 Bewertung: 0 von 5 Sternen0 BewertungenWebentwicklung mit dem Play Framework Bewertung: 0 von 5 Sternen0 Bewertungen
Programmieren für Sie
JavaScript kurz & gut Bewertung: 3 von 5 Sternen3/5Python kurz & gut: Für Python 3.x und 2.7 Bewertung: 3 von 5 Sternen3/5Algorithmen: Grundlagen und Implementierung Bewertung: 0 von 5 Sternen0 BewertungenDas große Python3 Workbook: Mit vielen Beispielen und Übungen - Programmieren leicht gemacht! Bewertung: 4 von 5 Sternen4/5Richtig einsteigen: Excel VBA-Programmierung: Für Microsoft Excel 2007 bis 2016 Bewertung: 0 von 5 Sternen0 BewertungenHacken mit Python und Kali-Linux: Entwicklung eigener Hackingtools mit Python unter Kali-Linux Bewertung: 0 von 5 Sternen0 BewertungenLinux Befehlsreferenz: Schnelleinstieg in die Arbeit mit der Konsole, regulären Ausdrücken und Shellscripting Bewertung: 0 von 5 Sternen0 BewertungenPython | Schritt für Schritt Programmieren lernen: Der ultimative Anfänger Guide für einen einfachen & schnellen Einstieg Bewertung: 0 von 5 Sternen0 BewertungenEigene Spiele programmieren – Python lernen: Der spielerische Weg zur Programmiersprache Bewertung: 0 von 5 Sternen0 BewertungenPowerShell: Anwendung und effektive Nutzung Bewertung: 5 von 5 Sternen5/5Weniger schlecht programmieren Bewertung: 4 von 5 Sternen4/5Programmieren für Einsteiger: Teil 1 Bewertung: 0 von 5 Sternen0 BewertungenProgrammieren von Kopf bis Fuß Bewertung: 4 von 5 Sternen4/5C++: Kurzportträt einer zeitlosen Sprache Bewertung: 0 von 5 Sternen0 BewertungenProgrammieren lernen mit Python 3: Schnelleinstieg für Beginner Bewertung: 0 von 5 Sternen0 BewertungenMicrocontroller für das IoT Bewertung: 0 von 5 Sternen0 BewertungenC von Kopf bis Fuß Bewertung: 3 von 5 Sternen3/5.NET-Praxis: Tipps und Tricks zu .NET und Visual Studio Bewertung: 0 von 5 Sternen0 BewertungenSQL von Kopf bis Fuß Bewertung: 4 von 5 Sternen4/5Das Franzis Starterpaket Arduino Mega 2560: Das Handbuch für den Schnelleinstieg Bewertung: 0 von 5 Sternen0 BewertungenDie ultimative QNAP NAS Bibel - Das Praxisbuch - mit vielen Insider Tipps und Tricks - komplett in Farbe Bewertung: 0 von 5 Sternen0 BewertungenAndroid-Entwicklung für Einsteiger - 20.000 Zeilen unter dem Meer: 2. erweiterte Auflage Bewertung: 0 von 5 Sternen0 BewertungenSQL – kurz & gut Bewertung: 0 von 5 Sternen0 BewertungenRaspberry Pi: Mach's einfach: Die kompakteste Gebrauchsanweisung mit 222 Anleitungen. Geeignet für Raspberry Pi 3 Modell B / B+ Bewertung: 0 von 5 Sternen0 BewertungenHTML5-Programmierung von Kopf bis Fuß: Webanwendungen mit HTML5 und JavaScript Bewertung: 0 von 5 Sternen0 BewertungenLinux Grundlagen - Ein Einstieg in das Linux-Betriebssystem Bewertung: 0 von 5 Sternen0 BewertungenRoutineaufgaben mit Python automatisieren: Praktische Programmierlösungen für Einsteiger Bewertung: 0 von 5 Sternen0 BewertungenPraktisches Programmieren in C: Grundlagen und Tipps Bewertung: 0 von 5 Sternen0 BewertungenPython-Tricks: Praktische Tipps für Fortgeschrittene Bewertung: 3 von 5 Sternen3/5Das Excel SOS-Handbuch: Wie sie Excel (2010-2019 & 365) schnell & einfach meistern. Die All-in-One Anleitung für ihren privaten & beruflichen Excel-Erfolg! Bewertung: 0 von 5 Sternen0 Bewertungen
Rezensionen für PowerShell 5
0 Bewertungen0 Rezensionen
Buchvorschau
PowerShell 5 - Tobias Weltner
Einführung
Wer braucht eigentlich PowerShell?
Jeder, der eine Aufgabe zweimal tut, sollte über Automation nachdenken. In der IT müssen viele Aufgaben nicht nur zweimal, sondern hundert- oder tausendfach erledigt werden. Und jeder kennt die wenig geliebten und immer wiederkehrenden Aufgaben: Monatliche Reports müssen erstellt oder Logbuchdaten durchforstet werden.
Was immer es ist und ganz gleich, ob beruflich oder privat motiviert: PowerShell ist die Sprache, mit der Sie solche Aufgaben beschreiben und danach so oft Sie mögen – und wann Sie mögen – von PowerShell ausführen lassen können. Das ist nicht nur bequemer, es kann auch im Not- oder Krisenfall wichtig sein. Wer dann die entsprechenden Notfallskripte zur Hand hat, lässt die in ruhigen Zeiten erarbeiteten Aufgaben blitzschnell abarbeiten.
Während Sie kleinere Aufgaben auf Ihrem eigenen Computer mit PowerShell automatisieren, ist diese Automationssprache auch für flächendeckende und unternehmensweite Automation hervorragend geeignet. Es gibt hier kaum Grenzen, und die PowerShell-Automation kann ganze Unternehmensstrukturen abbilden.
Über das sogenannte »PowerShell Remoting« (Kapitel 23) kommunizieren PowerShells über das Netzwerk miteinander, und dank PowerShell 6 steht PowerShell auch in heterogenen Landschaften zu Beispiel auf Linux und MacOS zur Verfügung.
Was die Frage aufwirft: Warum handelt dieses Buch eigentlich von PowerShell 5, wenn es offenbar auch ein PowerShell 6 gibt?
»Windows PowerShell« 5 vs. »PowerShell« 6
Seit der ersten »Windows PowerShell«-Version in 2006 ist inzwischen »Windows PowerShell« 5 auf allen Windows-Systemen ab Windows 7 und Server 2008R2 der empfohlene Standard. Sie müssen allenfalls noch Ihre »Windows PowerShell«-Version auf die aktuellste Version bringen, wobei Ihnen Kapitel 1 zur Seite steht. »Windows PowerShell« ist nun »fertiggestellt« und wird sich auch nicht mehr wesentlich ändern. Stattdessen arbeitet Microsoft jetzt an »PowerShell« 6 weiter.
Huh? Ist es also doch nicht fertig? Die Wahrheit ist: »PowerShell« 6 ist nicht der Nachfolger von »Windows PowerShell« 5. Lassen Sie uns also kurz ein wenig Klarheit in die PowerShell-Versionen bringen, damit Sie wissen, welche PowerShell für Sie richtig ist.
»Windows PowerShell« …
Die fest in Windows integrierte PowerShell nennt Microsoft »Windows PowerShell«. Sie wird auch künftig in Windows integriert sein und basiert auf dem vollständigen .NET Framework, also den vollständigen Programmierschnittstellen des Windows-Betriebssystems. »Windows PowerShell« kann deshalb alle Aspekte und Funktionen von Windows verwalten und automatisieren.
Diese »Windows PowerShell« gilt nun in Version 5 als ausgereift und fertiggestellt. Sie haben auf Jahre Planungssicherheit.
… und »PowerShell«
»PowerShell« 6 ist eine Neuentwicklung, die auf einem eingeschränkten und portablen .NET Framework basiert (dem sogenannten .NET Core). Es ist auch auf Linux und MacOS lauffähig und steht ausschließlich als optionaler Download von https://github.com/PowerShell/PowerShell zur Verfügung.
Der Vorzug von PowerShell 6 ist nicht etwa ein noch größerer Funktionsumfang. Wegen des eingeschränkten .NET Framework ist eher das Gegenteil der Fall. Der Vorzug von PowerShell 6 ist seine universelle Einsetzbarkeit. Es ist nicht mehr auf Windows beschränkt.
Zwar ist es technisch möglich, aber derzeit nicht besonders sinnvoll, auf Windows-Systemen die »PowerShell« 6 einzusetzen. Greifen Sie besser zur eingebauten »Windows PowerShell«. Sie kann deutlich mehr. Nur wenn Sie Nicht-Windows-Systeme in Ihre Automationspläne integrieren möchten, verwenden Sie dort »PowerShell« 6.
Über das »PowerShell Remoting« aus Kapitel 23 können »Windows PowerShell« und »Power- Shell« 6 quer über das Netzwerk miteinander kommunizieren.
Warum PowerShell lernen?
PowerShell-Analphabetismus konnte man als Windows-Administrator in den ersten Jahren noch gut kaschieren, doch inzwischen lässt sich dieses Defizit kaum noch verbergen. Zu allgegenwärtig ist PowerShell im Betriebssystem und in vielen Softwareprodukten, und wer es nicht beherrscht, kann häufig schlicht einen Teil seines Jobs nicht mehr erledigen.
Umgekehrt wird ein angenehmerer Schuh daraus: Wer sich bislang erfolgreich vor PowerShell »gedrückt« hat, kann sich mit einigen Wochen des Lernens (natürlich verbunden mit den üblichen Frustrationen, die zu jedem Erlernen dazugehören) das gesamte Funktionsspektrum der aktuellsten Windows-PowerShell-Version 5 zu eigen machen. Seit es PowerShell 6 auf Linux und MacOS gibt, können Sie Ihr PowerShell-Wissen sogar ohne großen Aufwand auch auf andere Betriebssysteme übertragen, und wer PowerShell beherrscht, wird für sein Unterneh men ein immer wertvollerer Mitarbeiter.
Moderne Lernkurve
Wer vor der PowerShell-Konsole sitzt, sieht vor allem Befehle – die Cmdlets. Sie funktionieren etwa so wie Befehle in anderen Konsolen (Shells). Allerdings unterstützt PowerShell so viele davon und ist auf so gleichartige Weise erweiterbar, dass man mit ganz geringen (und vor allen Dingen vollkommen einheitlichen und konsistenten) Grundkenntnissen fast alles damit administrieren kann. Weil alle Cmdlets auf denselben Grundregeln basieren, kann man das Wissen auch leicht auf andere Aufgabenbereiche und Cmdlets anwenden.
Die ersten Schritte mit Cmdlets sind einfach und benötigen kaum PowerShell-Kenntnisse. Auch der Umgang mit der PowerShell-Pipeline ist zunächst recht einfach. Dann aber steht man vor einer Steilwand, die autodidaktisch oft nur schwer zu meistern ist. Hier werden viele wichtige Grundlagen gelegt. Man beschäftigt sich mit Operatoren, Objekten und der wahren Natur von PowerShell. Diese Steilwand meistern Sie mit diesem Buch.
Sobald die Grundlagen einmal gelegt sind, flacht die Lernkurve stark ab, und alles wird gut: Ob Sie mit Microsoft Exchange ein Postfach anlegen, mit SharePoint eine Site veröffentlichen oder einfach nur Protokolldateien parsen oder Server verwalten wollen – Ihr PowerShell-Wissen befähigt Sie dazu, über den Tellerrand zu blicken und Ihre PowerShell-Erfahrung auch in ganz anderen IT-Bereichen einzusetzen. Entscheidend ist nun nur noch Ihr Fachwissen im jeweiligen Bereich.
Abbildung E.1: Die PowerShell-Lernkurve ist nicht linear, sondern baut auf gemeinsamen Standards auf.
Sie müssen zwar schon selbst wissen, »warum« Sie ein Exchange-Postfach anlegen oder eine SharePoint-Site umbenennen wollen – »wie« das geschieht, ist aber dank der gemeinsamen PowerShell-Standards nun keine Frage mehr. Get-ADUser, Get-Mailbox, Get-SPSite und Get-VM beschaffen Ihnen mit denselben PowerShell-Grundkenntnissen Active-Directory-Benutzerkonten, Exchange-Server-Mailboxen, SharePoint-Sites oder VMware virtuelle Maschinen. Kennen Sie erst einmal ein Cmdlet, dann kennen Sie alle.
Computer – ich/ich – Computer: PowerShell als Fremdsprache
Entfernt man sich ein wenig von PowerShell und betrachtet die Technik mit mehr Abstand, verschwimmen die einzelnen Befehle zu etwas Neuem: einer Sprache. Tatsächlich benimmt sich PowerShell in vielen Aspekten genau wie eine Fremdsprache, wie Spanisch oder Italienisch etwa, nur dass Sie sich diesmal nicht mit dem Eisverkäufer unterhalten, sondern mit Ihrem Computer. Auch der Lernprozess, den Sie mit diesem Buch vor sich haben, verläuft ganz ähnlich.
Zuerst steht Vokabelpauken auf dem Plan, und schon nach wenigen Minuten werden Sie mit den ersten Vokabeln bereits einfache Aufgaben lösen können. Dieser erste Lernschritt bildet den Teil »Interaktive Befehlskonsole« dieses Buchs (Kapitel 2–7). Hier lernen Sie den Umstieg von der klassischen cmd.exe-Befehlskonsole zur PowerShell, und für viele Administratoren reicht das Wissen aus diesem Teil bereits.
Dass PowerShell indes nicht eine klassische Textkonsole ist, sondern in Wirklichkeit eine hochmoderne objektorientierte Shell, entdecken Sie im Teil »Objektorientierte Shell« (Kapitel 8–11).
PowerShell als Ersatz für VBScript und Batch
Nachdem Sie die Sprache beherrschen, wird bei Ihnen mit einiger Wahrscheinlichkeit der Wunsch aufkommen, PowerShell nicht nur interaktiv zu verwenden, sondern auch als vollwertige Programmier- und Skriptsprache, um damit einfache und auch komplexe Automationsaufgaben zu lösen. Dies erwartet Sie im Teil »Automationssprache« (Kapitel 12–21): Hier geht es zum einen darum, wiederkehrende Aufgaben mit PowerShell-Lösungen ein für alle Mal zu lösen.
Zum anderen geht es aber vor allem darum, wie Sie in PowerShell selbst automatisieren, also dafür sorgen, dass Sie nicht ständig ein Rad neu erfinden müssen. Sie erfahren, wie sich Ihre Automationslösungen in neue eigene PowerShell-Befehle kapseln lassen und wie Sie diese neuen Befehle für sich selbst und Ihre Kollegen bereitstellen können. Mit jeder neuen Lösung, die Sie entwickeln, wächst so Ihr Lösungsspektrum.
Grenzenloses PowerShell
PowerShell wird zwar auf lokalen Computern ausgeführt, kennt aber kaum Grenzen. Es steht inzwischen nicht nur auf Windows-Betriebssystemen zur Verfügung, sondern auch auf Linux und MacOS. Alle PowerShells können über das Netzwerk miteinander sprechen, sich abstimmen und so die Grundlage für übergreifende und unternehmensweite Automationslösungen sein. Lesen Sie dazu mehr im Teil »Remoting und Parallelverarbeitung« (Kapitel 22–25).
Neben der »räumlichen« Unabhängigkeit enthält PowerShell auch Wege, um die Sicherheitskontexte und Identitäten zu wechseln, in denen Befehle ausgeführt werden. Auch diese Technik beruht im Kern auf dem Remoting und bildet die Grundlage für JEA (Just Enough Admin), mit der eine rollenbasierte Administration möglich wird, zum Beispiel für Self-Servicing-Portale.
Strategische Plattform und Orchestrierung
Wer seine Infrastruktur »via Code« definieren und ausrollen möchte, findet in PowerShell auch hierzu machtvolle Lösungen.
Hierbei trennt PowerShell das »Was« vom »Wo«. Das »Was« könnte die Definition eines Webservers oder Active Directory sein. Das »Wo« entspräche den Konfigurationsdaten, also den jeweiligen Server- und Webnamen. Das »Wann« kann wiederum beliebig gewählt werden, denn sobald Infrastruktur als Code definiert ist, kann man die dahinterliegenden Automationsskripte jederzeit und beliebig häufig einsetzen. Mehr dazu zeigt Ihnen »DevOps und Enterprise« (Kapitel 26/27).
Anwendungsentwicklung
Zwar war PowerShell ursprünglich als Automationssprache gedacht, die unbeaufsichtigt Aufgaben durchführt. Inzwischen wird PowerShell allerdings häufig auch zur Anwendungsentwicklung eingesetzt: Administratoren schreiben sich maßgeschneiderte Tools selbst oder stellen Tools dem Helpdesk zur Verfügung.
Wie man solche Oberflächen in PowerShell gestaltet, ist ebenso Thema des Teils »Spezielle Techniken« (Kapitel 28–34) wie innovative neue Wege, um Skripte zuverlässig zu entwickeln und weiterzupflegen. Mit dem Test-Driven Development (TDD), das ebenfalls aus der modernen Softwareentwicklung stammt, lassen sich PowerShell-Skripte äußerst zuverlässig und mit eingebauter Qualitätskontrolle herstellen.
Persönliche Entwicklung
PowerShell kann eine Karriereentscheidung sein. Wann immer Sie eine Aufgabe lösen, stehen dahinter unsichtbare Motivationen. Die offensichtlichste ist natürlich, die Aufgabe gut zu erledigen, denn dafür werden Sie (wahrscheinlich) bezahlt. Ebenso wichtig ist aber, was die Lösung dieser Aufgabe sonst noch für Sie bedeutet und wie sie in Ihre Lebensbilanz einfließt. Wer sich Tag für Tag durch Dialogfelder klickt, kann zwar enorm erfolgreich Aufgaben lösen, entwickelt seine Fähigkeiten aber nicht weiter, und wenn das Dialogfeld eines Tages nicht mehr da ist, gilt das vielleicht auch für den eigenen Arbeitsplatz.
Es mag Sie anfangs etwas mehr Zeit kosten, die Lösung damit zu automatisieren, aber bedenken Sie: Jede Extraminute, die Sie hier investieren, investieren Sie eigentlich in Ihre persönliche Fortbildung. Auch ein Arbeitgeber sollte dies als Chance verstehen und Freiräume dafür gestatten. Denn mit jeder erfolgreich gemeisterten PowerShell-Lösung wächst Ihre Sprachfertigkeit. Wer PowerShell am Ende fließend spricht, ist bestens aufgestellt für moderne IT-Landschaften.
Gerade wenn Sie vorher noch nie geskriptet haben, sehen Sie PowerShell als Chance: Wer den Zug zu VBScript-Zeiten vor zehn Jahren vielleicht verpasst hat, kann heute auf einen neuen Zug aufspringen.
Wie Sie dieses Buch nutzen
Dieses Buch setzt keinerlei Grundkenntnisse voraus, zumindest wenn Sie von vorn zu lesen beginnen. Wer unter Zeitdruck steht, kann auch quer einsteigen, und wer noch weniger Zeit hat, findet am Anfang jedes Kapitels eine Zusammenfassung, in der die jeweils wichtigsten Inhalte für Krisenzeiten zusammengefasst sind.
Die PowerShell-Beispiele im Buch sind jeweils in einer anderen Schriftart formatiert. Damit Sie leichter erkennen, welche Eingaben von Ihnen erwartet werden, wird bei allen Eingaben die PowerShell-Eingabeaufforderung PS> (einschließlich der Leerstelle hinter dem >) vorangestellt. Diese Eingabeaufforderung kann bei Ihnen auch anders aussehen und sollte in den Beispielen natürlich nicht mit eingegeben werden.
Viele PowerShell-Codebeispiele sind sehr kurz und können mit geringem Aufwand schnell eingetippt werden. Umfangreichere Beispiele sind mit einer Listing-Unterschrift gekennzeichnet. Unter dem dort genannten Dateinamen finden Sie die Codebeispiele auch in den Begleitmaterialien, die Sie hier herunterladen können: http://downloads.oreilly.de/9783960090090.
Sollte es zu diesem Buch Errata geben, finden Sie sie ebenfalls hier: http://downloads.oreilly.de/9783960090090 .
Achtung
Bitte verwenden Sie die Begleitmaterialien immer im Kontext des entsprechenden Buchkapitels. Viele der Beispiele funktionieren nur, wenn Sie die entsprechenden Vorarbeiten im Kapitel beachtet haben, oder können auch unerwartete Resultate liefern, wenn man die Beispiele aus dem Zusammenhang des Kapitels reißt.
Noch mehr Unterstützung
Inzwischen gibt es in fast jedem Land eine starke PowerShell-Community. Auch in Ihrer Nähe finden sich »PowerShell User Groups«, in denen man kostenlos viel dazulernen und persönliche Kontakte aufbauen kann. Jährlich finden zudem internationale PowerShell-Konferenzen wie die »PowerShell Conference Europe« (http://www.psconf.eu) statt.
Falls bei der Arbeit mit diesem Buch Fragen auftauchen oder Sie Anregungen haben, besuchen Sie mich: http://www.powertheshell.com. Oder senden Sie mir eine Nachricht an meine Mailadresse tobias.weltner@email.de.
Bevor ich Ihnen jetzt viel Spaß mit PowerShell wünsche, geht noch ein großes Dankeschön an meine Lektorin Ariane Hesse und die Korrektorin Sibylle Feldmann, die dieses Buch mit allergrößtem Sachverstand und mit Sorgfalt begleitet haben.
Herzlichst Ihr
Dr. Tobias Weltner
Kapitel 1
PowerShell kennenlernen
In diesem Kapitel:
Die PowerShell-Konsole einrichten
PowerShell ISE einsetzen
Erste Schritte mit PowerShell
Skriptausführung erlauben
Tippfehler vermeiden und Eingaben erleichtern
PowerShell-Hilfe aus dem Internet nachladen
Klassische Konsole oder moderner ISE-Editor?
Testen Sie Ihr Wissen!
Ausführlich werden in diesem Kapitel die folgenden Aspekte erläutert:
• PowerShell-Host: PowerShell ist Bestandteil von Windows und kein einzelnes Programm. Programme, die den Zugriff auf PowerShell ermöglichen, werden »Host« (»Gastgeber«) genannt. PowerShell liefert zwei Hosts mit: die PowerShell-Konsole (PowerShell.exe) und den komfortableren ISE-Editor (PowerShell_ise.exe).
• Groß- und Kleinschreibung: Die Groß- und Kleinschreibung wird bei Befehlen und Parameternamen nicht unterschieden.
• Farbcodierung während der Eingabe: Ab PowerShell 5 färbt nicht nur der ISE-Editor, sondern nun auch die PowerShell-Konsole Eingaben ein. Die Farben unterscheiden zwischen Befehlen, Parametern und Argumenten. So kann man Eingaben mit einem kurzen Blick auf die Farben auf Richtigkeit überprüfen. Enthält die Eingabe Syntaxfehler, also formale Fehler wie fehlende Anführungszeichen, kennzeichnet ISE diesen Teil mit einer roten Wellenlinie. Die Konsole zeigt eine rote spitze Klammer am Ende des Eingabeprompts an.
• Ausgabebefehle und Umwandlungsabkürzungen: PowerShell gibt Resultate sofort aus. Ein spezieller Ausgabebefehl wie echo ist nicht nötig. Auch unterstützt PowerShell einfache Rechenaufgaben, bei denen die in der IT üblichen Größenordnungen wie KB oder GB direkt (ohne Leerzeichen) an eine Zahl angefügt werden können. Mit dem Präfix 0x werden hexadezimale Zahlen markiert, und .. liefert einen Zahlenbereich, zum Beispiel 1..49.
• Autovervollständigung: Mit und gelangen Sie zurück zu Befehlsfolgen, die Sie schon einmal eingegeben haben. Möchten Sie einen Befehl nachträglich ändern oder erweitern, verwenden Sie die Pfeiltasten, um, anstatt den gesamten Befehl neu einzugeben, zu dem jeweiligen Befehl zurückzukehren und ihn zu ändern. Mit aktivieren Sie die eingebaute Autovervollständigung. Diese kann Befehlsnamen, Pfadnamen und andere Eingaben für Sie vervollständigen. Drücken Sie die Taste mehrmals, zeigt PowerShell bei jedem Druck einen anderen Vorschlag. In ISE steht außerdem das IntelliSense-Menü zur Verfügung, das über Eingabevorschläge nicht sofort einfügt, sondern zuerst in einem Kontextmenü anbietet.
• Zeilen löschen und Befehlsabbruch: Wollen Sie die gesamte aktuelle Zeile löschen, drücken Sie . Möchten Sie im Mehrzeilenmodus die aktuelle Zeile zwar nicht ausführen, aber auch nicht verlieren, drücken Sie .
• Skriptausführung: Anfangs kann PowerShell nur interaktive Befehle ausführen, aber keine Skripte. Mit Set-ExecutionPolicy sollte die Skriptausführung so bald wie möglich aktiviert werden, weil viele interaktive Befehle aus Skriptdateien geladen werden und andernfalls nicht funktionieren.
• Hilfe zu PowerShell-Befehlen: PowerShell-Befehle sind gut dokumentiert, aber die Dokumentation muss zunächst mit Update-Help aus dem Internet heruntergeladen werden.
• Unterschiedliche PowerShell-Versionen: Es gibt aktuell fünf PowerShell-Versionen, die alle aufeinander aufbauen. Die aktuelle PowerShell-Version erfährt man zum Beispiel über den Befehl $host.Version.
Häufig wird PowerShell gleichgesetzt mit der typisch blauen Textkonsole, die kryptische Befehlseingaben von Ihnen erwartet. Dieses Bild wäre aber falsch. PowerShell ist keine Textkonsole.
PowerShell ist eine Automationssprache und vollkommen unabhängig von bestimmten Programmen. Sie ist als Teil des »Windows Management Framework« (WMF) fest in das Betriebssystem Windows integriert. Die PowerShell-Konsole (PowerShell.exe) ist also lediglich ein Programm, mit dem man Kontakt zur PowerShell aufnehmen kann. Andere Programme können das auch, und so ist die PowerShell-Konsole längst nicht das einzige Programm, in dem Ihnen die Sprache »PowerShell« begegnet.
Bettet ein Programm – so wie die PowerShell-Konsole – die PowerShell-Sprache ein, wird es »PowerShell-Host« oder einfach nur »Host« genannt. Dieses englische Wort steht für »Gastgeber«, und so sind PowerShell-Programme Gastgeber für die PowerShell, bieten also die Bühne und Ihnen die Möglichkeit, Befehle an PowerShell zu senden und Ergebnisse zu empfangen. Ein weiterer solcher Host ist ebenfalls Bestandteil von Windows: der modernere »ISE«-Editor (»Integrated Script Environment«, PowerShell_ise.exe).
Profitipp
Alle Informationen zum verwendeten Host kann man in der PowerShell über die Variable $host abrufen:
PS> $Host
Name : Windows PowerShell ISE Host
Version : 5.0.10240.16384
InstanceId : 5dd5c034-c729-46f0-8381-7dac0532e28e
UI : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture : de-DE
CurrentUICulture : de-DE
PrivateData : Microsoft.PowerShell.Host.ISE.ISEOptions
DebuggerEnabled : True
IsRunspacePushed : False
Runspace : System.Management.Automation.Runspaces.LocalRunspace
Besonders spannend ist darin die Eigenschaft PrivateData. Sie verwaltet die hostspezifischen Einstellungen. In der PowerShell-Konsole stehen die folgenden Einstellungen zur Verfügung:
PS> $host.PrivateData
ErrorForegroundColor : Red
ErrorBackgroundColor : White
WarningForegroundColor : Yellow
WarningBackgroundColor : Black
DebugForegroundColor : Yellow
DebugBackgroundColor : Black
VerboseForegroundColor : Yellow
VerboseBackgroundColor : Black
ProgressForegroundColor : Yellow
ProgressBackgroundColor : DarkCyan
Rufen Sie die gleiche Eigenschaft im ISE-Editor ab, stehen sehr viel mehr Einstellungsmöglichkeiten zur Verfügung:
PS> $host.PrivateData
Window : Microsoft.Windows.PowerShell.Gui.Internal.MainWindow
SelectedScriptPaneState : Top
ShowDefaultSnippets : True
ShowToolBar : True
ShowOutlining : True
ShowLineNumbers : True
TokenColors : {[Attribute, #FF00BFFF], [Command, #FF0000FF],
[CommandArgument, #FF8A2BE2], [CommandParameter,
#FF000080]...}
ConsoleTokenColors : {[Attribute, #FFB0C4DE], [Command, #FFE0FFFF],
[CommandArgument, #FFEE82EE], [CommandParameter,
#FFFFE4B5]...}
XmlTokenColors : {[Comment, #FF006400], [CommentDelimiter, #FF008000],
[ElementName, #FF8B0000], [MarkupExtension,
#FFFF8C00]...}
DefaultOptions : Microsoft.PowerShell.Host.ISE.ISEOptions
FontSize : 11
Zoom : 115
FontName : Lucida Console
ErrorForegroundColor : #FFE50000
ErrorBackgroundColor : #00FFFFFF
WarningForegroundColor : #FFB26200
WarningBackgroundColor : #00FFFFFF
VerboseForegroundColor : #FF007F7F
VerboseBackgroundColor : #00FFFFFF
DebugForegroundColor : #FF00FFFF
DebugBackgroundColor : #00FFFFFF
ConsolePaneBackgroundColor : #FF012456
ConsolePaneTextBackgroundColor : #FF012456
ConsolePaneForegroundColor : #FFF5F5F5
ScriptPaneBackgroundColor : #FFFFFFFF
ScriptPaneForegroundColor : #FF000000
ShowWarningForDuplicateFiles : True
ShowWarningBeforeSavingOnRun : False
UseLocalHelp : True
AutoSaveMinuteInterval : 2
MruCount : 10
ShowIntellisenseInConsolePane : True
ShowIntellisenseInScriptPane : True
UseEnterToSelectInConsolePaneIntellisense : True
UseEnterToSelectInScriptPaneIntellisense : True
IntellisenseTimeoutInSeconds : 3
Alle diese Eigenschaften können verändert werden und regeln also die Grundkonfiguration des jeweiligen Hosts. Möchten Sie zum Beispiel Fehlermeldungen künftig lieber auf weißem Hintergrund sehen, genügt diese Einstellung:
PS> $host.PrivateData.ErrorBackgroundColor = 'White'
Softwarehersteller können mit wenigen Zeilen Code PowerShell ebenfalls in ihre Anwendungen einbetten, also eigene Hosts erstellen. Weil alle diese Programme im Hintergrund auf dieselbe PowerShell-Engine zugreifen, gibt es trotz unterschiedlicher Hosts keine verschiedenen PowerShell-Dialekte. PowerShell-Code funktioniert überall gleich.
Die PowerShell-Konsole einrichten
Die PowerShell-Konsole PowerShell.exe wird mitunter liebevoll auch »DOS-Fenster mit anderem Prompt« genannt, was auf eine wichtige Gemeinsamkeit hinweist: Beide, das klassische Kommandozeileninterface cmd.exe und die PowerShell-Konsole PowerShell.exe, nutzen das gleiche primitive Konsolenfenstersystem. Sie sehen deshalb ähnlich aus, auch wenn sich ihr Innenleben vollkommen unterscheidet.
Das primitive Konsolenfenstersystem ist robust, benötigt wenig Speicher, bietet indes auch nur das Allernötigste und kennt kaum Komfort. Genutzt wird es, um einfache und kurze Power-Shell-Befehle abzusetzen oder bereits vorbereitete PowerShell-Skripte auszuführen.
Mehr Unterstützung, insbesondere bei der Entwicklung von komplexeren PowerShell-Skripten und Kommandofolgen, liefert die ISE, ein alternativer PowerShell-Host. ISE steht für »Integrated Script Environment«, in der man wie in der Konsole interaktive Befehle eingeben, aber auch komplexere Skripte entwickeln kann.
PowerShell-Konsole starten
Um die PowerShell-Konsole erstmals zu starten, öffnen Sie mit das Ausführen-Fenster und geben darin ein: PowerShell .
Nutzen Sie Windows 8 und höher, erreichen Sie die PowerShell auch über den Startbildschirm. Ist dieser sichtbar, geben Sie einfach PowerShell ein (auch wenn kein Suchfeld zu sehen ist, können Sie sofort lostippen, das Feld wird dann automatisch eingeblendet). Noch während Sie den Befehlsnamen eingeben, sucht Windows nach Anwendungen und zeigt die Kachel Windows PowerShell. Klicken Sie darauf, um die Konsole zu starten (Abbildung 1.1).
Abbildung 1.1: PowerShell vom Startbildschirm in Windows 8 aus starten.
In Windows 10 erreichen Sie PowerShell wahlweise auch wieder über das Startmenü (Abbildung 1.2).
Abbildung 1.2: PowerShell über das Startmenü in Windows 10 öffnen.
Wenige Sekunden später präsentiert sich die hochmoderne objektorientierte PowerShell-Konsole. Besonders eindrucksvoll ist das Erlebnis anfangs indes nicht, denn es erscheint nur ein hässliches schwarzes oder blaues Konsolenfenster. Darin begrüßt Sie die Eingabeaufforderung, die mit »PS« beginnt und dahinter den Pfadnamen des aktuellen Ordners anzeigt. Außerdem blinkt eine Einfügemarke und ermuntert Sie mit dem Charme der 1980er-Jahre dazu, erste Befehle einzugeben (Abbildung 1.3).
Abbildung 1.3: Die PowerShell-Konsole führt interaktive PowerShell-Befehle aus und benötigt wenig Speicher.
PowerShell-Version kontrollieren
Kontrollieren Sie zuerst, welche PowerShell-Version Sie verwenden. Es gibt fünf Versionen, die aufeinander aufbauen. Dieses Buch handelt von der aktuellsten PowerShell-Version, also 5.0, was Sie inspirieren sollte, Ihre PowerShell-Version ebenfalls auf Versionsstand 5.0 zu aktualisieren, falls Sie eine ältere Version vorfinden. Andernfalls können Sie einige in diesem Buch beschriebene Funktionalitäten nicht nutzen.
Ein besonders einfacher Weg, die Version Ihrer PowerShell zu prüfen, ist ein Blick auf das Copyright, das beim Start der Konsole erscheint:
Tabelle 1.1: PowerShell-Versionen identifizieren.
So finden Sie die aktuell verwendete PowerShell-Version per Befehl heraus:
PS> $PSVersionTable
Name Value
---- -----
PSVersion 5.0.10240.16384
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.42000
BuildVersion 10.0.10240.16384
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
PSRemotingProtocolVersion 2.3
Hinter PSVersion findet sich die Version Ihrer PowerShell. Die übrigen Angaben betreffen verwandte Subsysteme, die die PowerShell ebenfalls benötigt. Steht hinter PSVersion nicht »5.0«, verwenden Sie eine veraltete Version. Das kostenfreie Update für PowerShell 5.0 ist ein Windows-Updatepaket (mit der Erweiterung .msu), das im Internet kostenfrei bereitsteht und per Doppelklick installiert wird. Bevor Sie PowerShell auf einem Produktionsserver aktualisieren, informieren Sie sich vorsichtshalber über die sonstige Software, die darauf läuft. Es gibt Software, die eng mit PowerShell verzahnt ist und vielleicht eine ganz bestimmte PowerShell-Version erfordert.
Symbol an Taskleiste heften
Als Nächstes sollten Sie die PowerShell-Konsole besser erreichbar machen. Dazu klicken Sie das PowerShell-Symbol in der Taskleiste mit der rechten Maustaste an und wählen im Kontextmenü Dieses Programm an Taskleiste anheften (Abbildung 1.4). Ziehen Sie das Symbol danach in der Taskleiste mit der Maus an den äußersten linken Rand, sodass es das erste Symbol in der Taskleiste ist. Schließen Sie die PowerShell-Konsole und öffnen Sie sie danach erneut mit einem Klick auf das angepinnte Symbol in der Taskleiste.
Abbildung 1.4: PowerShell-Symbol an die Taskleiste anheften.
Sie können PowerShell nun auch über die Tastenkombination öffnen oder in den Vordergrund holen, sofern das PowerShell-Symbol das erste in Ihrer Taskleiste ist. Andernfalls verwenden Sie eine andere Zahl, die der Position des Symbols in der Taskleiste entsprechen muss. Spätestens jetzt sollte sich ein blaues und nicht schwarzes Konsolenfenster öffnen. Windows speichert Einstellungen wie die blaue Hintergrundfarbe oder die Bildschirmpuffergröße der Konsole in Verknüpfungen.
Bessere Schrift für die Konsole
Da PowerShell textorientiert ist und es auf jedes Zeichen ankommt, sollte die Schrift in der Konsole klar, deutlich und ermüdungsfrei zu lesen sein. Ist die Schrift zu winzig, justieren Sie nach.
Dazu klicken Sie auf das Konsolensymbol ganz links in der Titelleiste des geöffneten Konsolenfensters. Im Kontextmenü wählen Sie Eigenschaften (Abbildung 1.5) und können nun Farben, Schriftart und -größe sowie die Einstellungen des Konsolenpuffers (Fensterpuffergröße) festlegen (Abbildung 1.6).
Abbildung 1.5: Einstellungen des Konsolenfensters ändern.
Die Schriftart wählen Sie auf der Registerkarte Schriftart. Empfohlen werden TrueType-Schriftarten, die nahtlos skalierbar sind und auch auf Displays mit hoher Auflösung scharf angezeigt werden.
Abbildung 1.6: Die Konsoleneigenschaften bieten in Windows 10 zahlreiche neue Funktionalitäten.
Allerdings bietet das Schriftartenauswahlfeld anfangs nur wenige TrueType-Schriftarten an, denn die Konsole verfügt über einen zeichenbasierten Puffer, und so dürfen nur Schriftarten verwendet werden, bei denen alle Zeichen genau gleich breit sind. Deshalb regelt ein Eintrag in der Windows-Registrierungsdatenbank, welche Schriftarten in der Konsole zulässig sind.
Möchten Sie weitere TrueType-Schriftarten in der Konsole verwenden und sind sicher, dass diese Schriftarten gleiche Zeichenbreiten verwenden, lassen sich diese Schriften in der Registrierungsdatenbank unter diesem Schlüssel hinzufügen: HKLM\SOFTWARE\Microsoft \Windows NT\CurrentVersion\Console\TrueTypeFont (Abbildung 1.7).
Abbildung 1.7: Weitere Schriftarten für die Konsole verwendbar machen.
Sie werden bald erfahren, wie PowerShell selbst Änderungen an der Registrierungsdatenbank vornehmen kann. Einstweilen hilft aber auch die gute alte REG-Datei. Dazu öffnen Sie den standardmäßigen Windows-Texteditor Notepad (der laut Fenstertitel eigentlich schlicht Editor heißt) zum Beispiel durch Eingabe von notepad in der PowerShell-Konsole. Geben Sie dann den folgenden Text ein:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont]
0
=Consolas
00
=Courier New
000
=Lucida Console
0000
=Lucida Sans Typewriter
00000
=OCR A Extended
Listing 1.1: Die REG-Datei schaltet weitere Konsolenschriftarten frei.
Speichern Sie die Datei unter dem Namen konsolenschriften.reg. Achten Sie darauf, dass sie anschließend tatsächlich die Erweiterung ».reg« trägt und nicht etwa ».reg.txt«. Das Symbol der Datei muss einen Registrierungseditor darstellen, kein Textdokument. Damit Notepad die Erweiterung ».txt« nicht einfach an Ihren Dateinamen anhängt, wählen Sie im Speichern unter-Dialog im Ausklappfeld Dateityp aus: Alle Dateien. Doppelklicken Sie anschließend auf die Datei, um die Definitionen in die Registrierungsdatenbank einzutragen. Hierzu benötigen Sie Administratorrechte.
Die Änderungen wirken sich erst aus, wenn Sie die PowerShell-Konsole neu öffnen. Danach stehen Ihnen im Schriftartenauswahlfenster alle Schriftarten zur Verfügung, die Sie in die Registrierungsdatenbank eingetragen haben (Abbildung 1.8).
Abbildung 1.8: Futuristische neue Schriftarten für die PowerShell-Konsole nutzbar machen.
Neue Konsolenfunktionen bei Windows 10 aktivieren
Das Konsolenfenstersystem wurde von Microsoft viele Jahre nicht weiterentwickelt, und so herrschten darin Zustände, die man von modernen Windows-Anwendungen nicht mehr gewohnt ist. Markierungen sind beispielsweise nur auf Blockebene möglich, nicht zeilenweise. Das Einfügen und Kopieren von Text geschieht nicht mithilfe der üblichen Tastenkombinationen und , stattdessen kopiert ein Rechtsklick markierten Text und fügt ihn auch wieder ein, und viele weitere Regeln erinnern eher an die 80er-Jahre als an aktuelle Standards.
In Windows 10 wurde das Konsolenfenstersystem endlich modernisiert. Nur eingeschaltet werden muss dieser Luxus möglicherweise noch. Dazu gehen Sie vor wie oben beschrieben und klicken auf das Anwendungssymbol in der Titelleiste der PowerShell-Konsole. Im Kontextmenü wählen Sie Eigenschaften. Klicken Sie dann auf die Registerkarte Optionen. Im unteren Teil muss die Option Legacykonsole verwenden abgeschaltet sein, damit die neuen, moderneren Funktionen aktiviert sind (Abbildung 1.6). Fehlt die Option ganz, verwenden Sie möglicherweise nicht Windows 10, sondern ein älteres Windows.
Eine vollständige Übersicht der vielen neuen Konsolenfeatures und Tastenkombinationen sehen Sie, wenn Sie im unteren Teil auf den Link ... neuen Konsolenfeatures klicken – jedenfalls dann, wenn Sie über eine Internetverbindung verfügen, denn der Link führt Sie zu einer Microsoft-Webseite.
Neu in der modernen Konsole ist auch ein Schieberegler, im Dialogfeld Deckkraft genannt, im unteren Bereich der Registerkarte Farben. Mit ihm kann die Konsolentransparenz gesteuert werden: Die Konsole wird auf Wunsch teilweise durchsichtig, was zumindest dann nützlich ist, wenn man die Konsole geöffnet in Bereitschaft lassen möchte, ohne den Blick auf andere Dinge ganz zu versperren (Abbildung 1.9).
Ebenfalls neu ist auf der Registerkarte Layout die Option Textausgabe bei Größenänderung umbrechen. Wird das Konsolenfenster verkleinert, gehen so keine Ausgaben mehr verloren, sondern werden in die nächste Zeile gesetzt.
Abbildung 1.9: In Windows 10 kann die Deckkraft des Konsolenhintergrunds verändert werden.
Sprungliste: Administratorrechte und ISE
Haben Sie die PowerShell-Konsole wie oben beschrieben an die Taskleiste angeheftet und danach mindestens einmal gestartet, öffnet ein Rechtsklick auf das angeheftete Konsolensymbol nun die PowerShell-Sprungliste: ein Menü mit den wichtigsten PowerShell-Startbefehlen (Abbildung 1.10).
Abbildung 1.10: Sprungliste von PowerShell öffnen.
Über die enthaltenen Befehle können Sie PowerShell bei Bedarf mit vollen Administratorrechten starten (was Sie im Normalfall zum eigenen Schutz eher vermeiden und nur einsetzen sollten, wenn diese Rechte tatsächlich gebraucht werden). Auch die ISE, der integrierte Skripteditor, kann über die Sprungliste wahlweise normal oder mit Administratorrechten geöffnet werden.
Tabelle 1.2: Befehle in der PowerShell-Sprungliste.
32-Bit- und 64-Bit-Versionen
Auf 64-Bit-Versionen von Windows gibt es sowohl die PowerShell-Konsole als auch den ISE-Editor in doppelter Ausführung. Neben der 64-Bit-Version stehen zusätzlich 32-Bit-Versionen bereit. Sie sind daran zu erkennen, dass an den Namen ein »(x86)« angefügt ist.
Die 32-Bit-Versionen der PowerShell-Hosts sind nur für Ausnahmefälle gedacht, in denen ein Skript ausdrücklich im 32-Bit-Subsystem ausgeführt werden muss. Nötig ist das nur selten, zum Beispiel dann, wenn PowerShell auf Komponenten zugreifen soll, die es nur als 32-Bit-Versionen gibt. Im normalen Alltag setzen Sie immer die regulären 64-Bit-Versionen ein und achten darauf, dass hinter dem Programmnamen eben nicht der Zusatz »(x86)« steht.
PowerShell ISE einsetzen
Zwar dient die PowerShell ISE (PowerShell_ise.exe) in erster Linie als Skripteditor, mit dem man PowerShell-Skripte entwickeln und testen kann, doch wird sie auch als vollständiger Ersatz für die PowerShell-Konsole zur täglichen Arbeit eingesetzt. Starten Sie die ISE entweder über die soeben beschriebene Sprungliste mit dem Kontextmenübefehl Windows PowerShell ISE oder direkt aus einer geöffneten klassischen PowerShell-Konsole heraus:
PS> ise
Wenn Sie die ISE über den Konsolenbefehl ise starten, erhält sie die gleichen Rechte wie die Konsole.
Hinweis
Sollte die ISE gänzlich fehlen, verwenden Sie möglicherweise einen Windows Server 2008/2008R2 und eine alte PowerShell-Version. Früher war die ISE auf Servern eine optionale Komponente und das Feature nicht automatisch aktiviert. Sollte die ISE auf einem Server also fehlen, aktivieren Sie das entsprechende Windows-Feature einfach. Das geht mit PowerShell sehr viel schneller als über die grafische Oberfläche. Einzig Administratorrechte sind für solche Aufgaben erforderlich.
Starten Sie daher eine PowerShell-Konsole entweder über die Sprungliste mit Als Administrator ausführen oder halten Sie gedrückt, bevor Sie das PowerShell-Symbol in der Taskleiste anklicken. Danach geben Sie diesen Befehl ein:
PS> Add-WindowsFeature -Name PowerShell-ISE
Der Befehl Add-WindowsFeature steht nur auf Servern zur Verfügung. Er stammt aus der Befehlserweiterung ServerManager, die auf Windows-Clients fehlt.
Nachdem PowerShell ISE erfolgreich nachgerüstet ist, erscheinen die Einträge für den ISE-Editor in der Sprungliste erst, wenn alle geöffneten PowerShell-Fenster geschlossen werden und Sie die PowerShell-Konsole danach erneut öffnen.
Abbildung 1.11: PowerShell ISE als Konsolenersatz.
Weil PowerShell ISE nicht nur ein moderner Ersatz für die interaktive Konsole ist, sondern auch als Skripteditor dient, sieht das Fenster möglicherweise bei Ihnen etwas anders aus als in Abbildung 1.11. Mit der Pfeilschaltfläche in der oberen rechten Ecke blenden Sie den Skriptbereich ein und aus. Im Augenblick sollten Sie den Skriptbereich im versteckten Zustand belassen. Über kann der Skriptbereich gänzlich mauslos sichtbar und wieder unsichtbar gemacht werden.
Hilfreich sind auch die Schaltflächen in der Symbolleiste, mit denen Sie den interaktiven Konsolenteil wahlweise unten oder an der Seite anzeigen oder bei Bedarf eben auch ganz ausblenden, um maximalen Platz zur Eingabe von Skripten zu haben (Abbildung 1.12).
Abbildung 1.12: Über die Werkzeugleiste kann die interaktive PowerShell-Konsole ein- und ausgeblendet werden.
Mit dem Schieberegler am unteren rechten Fensterrand variieren Sie nahtlos die Schriftgröße. Ohne Maus verwenden Sie dazu und .
Möchten Sie auch die Schriftart ändern, rufen Sie Tools/Optionen auf. Im Dialogfeld aktivieren Sie das Kontrollkästchen Nur Festbreitenschriftart, denn PowerShell ISE kommt zwar im Unterschied zur Konsole auch mit Proportionalschriftarten zurecht, aber weil hier die Schriftzeichen unterschiedlich breit sind (einem m wird zum Beispiel mehr Platz eingeräumt als einem i), führt dies zu Problemen bei der Ausgabe, wenn Tabellenspalten verrutschen und nicht mehr bündig erscheinen (Abbildung 1.13).
Im Listenfeld Schriftfamilie sehen Sie jetzt alle Schriftarten mit fester Zeichenbreite. Die Schriftart, die Sie auswählen, gilt sowohl für den interaktiven Konsolenbereich als auch den Skripteditor. Nicht alle Schriftarten, die die Liste anbietet, sind wirklich gut zu gebrauchen. Eine besonders gut lesbare Schriftart heißt »Consolas«. Die »Lucida Console« ist die Standardschriftart.
Abbildung 1.13: Andere Schriftart für ISE auswählen.
Notfalls stellt die Schaltfläche Standard wiederherstellen in der linken unteren Ecke des Dialogfelds die Ausgangseinstellungen wieder her.
Hinweis
Für den ISE-Editor existieren kommerzielle Erweiterungen, mit denen zahlreiche zusätzliche Funktionen nachgerüstet werden können. So wird aus dem einfachen ISE-Editor eine professionelle Entwicklungsumgebung. Die bekannteste Erweiterung heißt »ISESteroids« und kann als Testversion von http://www.powertheshell.com heruntergeladen werden. Am einfachsten gelingt dies über den folgenden Befehl, der den Download und die Installation kombiniert:
PS> Install-Module ISESteroids -Scope CurrentUser
Das Cmdlet Install-Module ist Teil von PowerShell 5.0 und kann für ältere PowerShell-Versionen unter dem Namen »PowerShellGet« beziehungsweise »PackageManagement« kostenfrei heruntergeladen und installiert werden. Bei Drucklegung dieses Buchs stand für ältere PowerShell-Versionen bereits eine Preview-Version zur Verfügung (http://blogs.msdn.com/b/PowerShell/archive/2015/10/09/package-management-preview-for-PowerShell-4-amp-3-is-now-available.aspx).
Nach Download und Installation wird die ISESteroids-Erweiterung mit dem folgenden Befehl bei Bedarf geladen:
PS> Start-Steroids
Die Konsole der ISE unterstützt einige besondere Tastenkombinationen (Tabelle 1.3).
Tabelle 1.3: Wichtige Tastenkombinationen der Konsole im ISE-Editor.
Tipp
PowerShell ISE erhält in der Taskleiste ihr eigenes Symbol. Um ISE künftig direkt per Klick zu starten, klicken Sie mit der rechten Maustaste auf das Symbol von ISE in der Taskleiste und wählen Dieses Programm an Taskleiste anheften. Danach schieben Sie es nach links neben das Symbol der PowerShell-Konsole und können nun per Klick entscheiden, ob Sie die klassische Konsole oder lieber ISE öffnen möchten.
Denken Sie aber daran, dass nur das Symbol der PowerShell-Konsole per Rechtsklick die Sprungliste öffnet. Das Symbol der ISE verfügt über keine Sprungliste.
Erste Schritte mit PowerShell
Die Ausführung von Befehlen funktioniert in der klassischen PowerShell-Konsole und in ISE gleich: Sie geben einen Befehl ein, schicken ihn mit einem entschlossenen Druck auf ab und warten dann gespannt, was als Nächstes geschieht. Wie Sie herausfinden, welche Befehle Ihnen zur Verfügung stehen, werden Sie gleich erfahren.
Wichtige Vorsichtsmaßnahmen
Damit das, was dann als Nächstes geschieht, keine unschöne Überraschung wird, sind ein paar vorausschauende Vorsichtsmaßnahmen ratsam. Mit nur zwei simplen Regeln entschärfen Sie das Potenzial karrierelimitierender Fehleingaben erheblich:
Keine Administratorrechte: Starten Sie PowerShell ohne spezielle Administratorrechte! So sind alle Einstellungen gesperrt, die das System ernstlich in Bedrängnis brächten. Ist die Windows-Benutzerkontensteuerung aktiv, passiert das automatisch (sofern Sie nicht über die Sprungliste auf vollen Administratorrechten bestehen). Ob PowerShell mit vollen Administratorrechten arbeitet, zeigt die Titelleiste des Fensters, in der dann das Wort Administrator: erscheint. Auf Servern ist die Windows-Benutzerkontensteuerung indes meist ausgeschaltet, sodass PowerShell hier stets mit vollen Rechten startet und Sie für erste Tests und die Einarbeitung in PowerShell besser ein eingeschränktes Benutzerkonto einrichten und verwenden sollten.
Simulationsmodus: Schalten Sie einen versteckten Simulationsmodus für noch mehr Schutz (und Einschränkungen) ein. Er bewirkt, dass PowerShell Änderungen am Computer nur simuliert, aber nicht ausführt. Dieser Schutz erstreckt sich auf die eingebauten PowerShell-Befehle, nicht aber auf klassische Konsolenbefehle wie beispielsweise shutdown.exe. So wird der Simulationsmodus eingeschaltet:
PS> $WhatIfPreference = $true
Er gilt nur für die PowerShell-Instanz, in der der Befehl eingegeben wurde, und auch nur, bis diese Instanz wieder geschlossen wird.
Befehle eingeben
Im Fenster sehen Sie die Eingabeaufforderung. Sie beginnt mit PS, und dahinter steht der Pfad-name des Ordners, in dem Sie sich gerade befinden. Eine blinkende Einfügemarke wartet auf Ihre ersten Eingaben. Sie werden gleich erfahren, welche Befehle PowerShell versteht, probieren Sie die Eingabe aber schon einmal aus. Geben Sie zum Beispiel ein:
PS> hallo
Sobald Sie drücken, wird Ihre Eingabe an PowerShell geschickt und verarbeitet. Das Ergebnis folgt postwendend und ist in diesem Fall eine nüchterne rote Fehlermeldung:
hallo : Die Benennung hallo
wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei
oder eines ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der
Pfad korrekt ist (sofern enthalten), und wiederholen Sie den Vorgang.
In Zeile:1 Zeichen:1
+ hallo
+ ~~~~~
+ CategoryInfo : ObjectNotFound: (hallo:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Fehlermeldungen sind zwar üblicherweise eher unerfreulich, doch sollten Sie sich schon einmal daran gewöhnen, sie nicht routinemäßig zu ignorieren. Oft verraten sie bei PowerShell tatsächlich den Grund des Problems, und auch in diesem Beispiel ist das, was die Fehlermeldung zu sagen hat, recht treffend: Die Benennung »hallo«, also das, was Sie als Befehl an PowerShell geschickt haben, war kein ausführbarer Befehl. Ausführbare Befehle sind gemäß Fehlermeldung Cmdlets, Funktionen, Skriptdateien oder ausführbare Programme.
Den kryptischen Teil nach dem Klartext dürfen Sie freundlich ignorieren. Er verrät erfahrenen PowerShell-Skriptentwicklern bei Bedarf noch mehr über die Natur des Fehlers und wo genau er aufgetreten ist. Spannend wird dieser Teil erst, wenn Sie umfangreichere PowerShell-Skripte starten.
Profitipp
Falls es Sie stört, dass PowerShell in epischer Breite den Pfadnamen des aktuellen Ordners im Prompt anzeigt, geben Sie einmal diesen Befehl ein:
PS> cd \
Damit wechseln Sie in den Stammordner des aktuellen Laufwerks, also vermutlich nach C:\, und der Prompttext wird jetzt wesentlich kürzer und vergeudet keinen wertvollen Platz mehr in der Konsole. Später werden Sie bessere Wege kennenlernen, um den Prompt angenehmer zu formatieren, aber einstweilen hilft dieser Kniff schon mal weiter.
Ergebnisse empfangen
Geben Sie einen gültigen Befehl ein, wirft PowerShell fröhlich die erwarteten Ergebnisse aus. Möchten Sie zum Beispiel sehen, welche Dateien und Ordner sich in Ihrem aktuellen Ordner befinden, geben Sie ein: dir .
Sie erhalten eine mehr oder weniger lange Textliste, und es drängt sich das Gefühl auf, dass der Ordnerinhalt in einem normalen Explorer-Fenster mit seinen bunten Symbolen viel einfacher zu erfassen ist. Grundsätzlich kommuniziert PowerShell mit Ihnen auf Textbasis. Dass Power-Shell mehr kann als ein Explorer-Fenster, zeigt der nächste Befehl, der sämtliche laufenden Prozesse auflistet:
PS> Get-Process
Die Stärke von PowerShell ist also nicht unbedingt die Darstellung der Informationen, sondern vielmehr ihre ungeheure Flexibilität. Fast alle Belange und Informationen Ihres Computers lassen sich von hier aus steuern und anzeigen – wenn auch »nur« als Textdarstellung und mithilfe von Textbefehlen.
Hier die wichtigsten weiteren Grundregeln:
• Groß- und Kleinschreibung: Diese spielt bei Befehlen keine Rolle. PowerShell ist also nicht case sensitive. Bei Argumenten, also Informationen, die Sie einem Befehl zusätzlich mit auf den Weg geben, kann die Groß- und Kleinschreibung im Einzelfall dagegen sehr wohl entscheidend sein, zum Beispiel bei Kennwortabfragen.
• Abbrechen und löschen: Möchten Sie einen Befehl vorzeitig abbrechen, drücken Sie . Um die aktuelle Eingabe zu löschen, drücken Sie . Möchten Sie den Inhalt des Konsolenfensters löschen, verwenden Sie den Befehl cls.
Informationen speichern oder umleiten
Alle Befehle der PowerShell liefern »körperlose«, nackte Informationen. Wie diese letzten Endes dargestellt oder verwendet werden, steht auf einem anderen Blatt. Im einfachsten Fall unternehmen Sie nichts weiter mit den Informationen. Sie oxidieren dann automatisch zu Text, den die Konsole anzeigt.
Alternativ könnten Sie die Informationen aber auch in Variablen speichern, die bei PowerShell immer mit einem $ gekennzeichnet werden und wie Aufbewahrungsbehälter funktionieren:
PS> $info = ipconfig.exe
Die Informationen des Befehls liegen jetzt in der Variablen und werden nicht sichtbar ausgegeben. Erst wenn Sie die Variable ausgeben, tauchen die Informationen wieder auf:
PS> $info
Windows-IP-Konfiguration
Drahtlos-LAN-Adapter Wi-Fi:
Verbindungsspezifisches DNS-Suffix: Speedport_W_921V_1_39_000
IPv6-Adresse. . . . . . . . . . . : 2003:40:e765:5043:7ca6:5208:b378:5c84
Temporäre IPv6-Adresse. . . . . . : 2003:40:e765:5043:6485:6291:7855:a81
Verbindungslokale IPv6-Adresse . : fe80::7ca6:5208:b378:5c84%11
IPv4-Adresse . . . . . . . . . . : 192.168.2.119
Subnetzmaske . . . . . . . . . . : 255.255.255.0
Standardgateway . . . . . . . . . : fe80::1%11
192.168.2.1
Ethernet-Adapter Bluetooth Network Connection:
Medienstatus. . . . . . . . . . . : Medium getrennt
Verbindungsspezifisches DNS-Suffix:
(...)
Mit Operatoren lassen sich die Informationen in Variablen dann zum Beispiel bearbeiten. Der nächste Befehl fischt aus der Variablen nur die Zeilen heraus, die den Begriff »IPv4« enthalten:
PS> $info -like '*IPv4*'
IPv4-Adresse . . . . . . . . . . : 192.168.2.119
Oder die Informationen werden zu einem anderen Befehl weitergeleitet. Out-GridView stellt sie zum Beispiel in einem separaten Fenster dar:
PS> ipconfig.exe | Out-GridView
Richtig gut funktioniert das, wenn Befehle nicht reinen Text zurückliefern, sondern sogenannte »Objekte«. Objekte strukturieren Informationen in einzelnen Spalten, den sogenannten »Eigenschaften« oder »Properties«. Der nächste Befehl liefert beispielsweise alle Dienste und verrät interessante Details zu jedem Dienst:
PS> Get-Service
Status Name DisplayName
------ ---- -----------
Running AdobeARMservice Adobe Acrobat Update Service
Stopped AJRouter AllJoyn-Routerdienst
Stopped ALG Gatewaydienst auf Anwendungsebene
Stopped ANTS Memory Pro... ANTS Memory Profiler 8 Service
Stopped ANTS Performanc... ANTS Performance Profiler 9 Service
Stopped AppIDSvc Anwendungsidentität
Running Appinfo Anwendungsinformationen
Running Apple Mobile De... Apple Mobile Device Service
(...)
Werden solche Informationen weitergeleitet, zum Beispiel an Out-GridView, werden die Einzelinformationen in separaten Spalten angezeigt und lassen sich im GridView beispielsweise per Klick auf die Spaltenüberschrift sortieren (Abbildung 1.14):
PS> Get-Service | Out-GridView
Abbildung 1.14: Befehlsergebnisse in einem Extrafenster anzeigen, dem »GridView«.
Hier erhalten Sie quasi bereits einen Vorgeschmack auf den »objektorientierten« Charakter der PowerShell, der in den folgenden Kapiteln immer wieder aufgegriffen wird. Mit Select-Object lassen sich so beispielsweise die Informationen bestimmen, an denen Sie interessiert sind:
PS> Get-Service | Select-Object -Property Status, DisplayName
Status DisplayName
------ -----------
Running Adobe Acrobat Update Service
Stopped AllJoyn-Routerdienst
Stopped Gatewaydienst auf Anwendungsebene
Stopped ANTS Memory Profiler 8 Service
Stopped ANTS Performance Profiler 9 Service
Stopped Anwendungsidentität
Running Anwendungsinformationen
(...)
Dasselbe Cmdlet macht auch deutlich, dass viele Befehle in Wahrheit sehr viel detailliertere Informationen liefern, als von der PowerShell-Konsole zunächst angezeigt werden. Fordern Sie mit dem Jokerzeichen * sämtliche Informationen an, prasseln sehr viel mehr Informationen auf Sie ein als ohne diesen Zusatz:
PS> Get-Service | Select-Object -Property *
Name : AdobeARMservice
RequiredServices : {}
CanPauseAndContinue : False
CanShutdown : False
CanStop : True
DisplayName : Adobe Acrobat Update Service
DependentServices : {}
MachineName : .
ServiceName : AdobeARMservice
ServicesDependedOn : {}
ServiceHandle :
Status : Running
ServiceType : Win32OwnProcess
Site :
Container :
Name : AJRouter
RequiredServices : {}
CanPauseAndContinue : False
CanShutdown : False
CanStop : False
DisplayName : AllJoyn-Routerdienst
DependentServices : {}
MachineName : .
ServiceName : AJRouter
ServicesDependedOn : {}
ServiceHandle :
Status : Stopped
ServiceType : Win32ShareProcess
Site :
Container :
Name : ALG
RequiredServices : {}
CanPauseAndContinue : False
CanShutdown : False
CanStop : False
DisplayName : Gatewaydienst auf Anwendungsebene
DependentServices : {}
MachineName : .
ServiceName : ALG
ServicesDependedOn : {}
ServiceHandle :
Status : Stopped
ServiceType : Win32OwnProcess
Site :
Container :
(...)
PowerShell schaltet die Darstellung dabei automatisch vom Tabellen- in den Listenmodus, weil nun zu viele Informationen anzuzeigen sind, als in eine einzige Textzeile passen würden.
IntelliSense-Unterstützung im ISE-Editor
Es ist durchaus beeindruckend, was die PowerShell leisten kann, auch wenn die Beispiele im vorangegangenen Abschnitt wohl mehr Fragen als Antworten aufgeworfen haben.
Störend ist zum Beispiel, dass die PowerShell nur dann etwas für Sie tut, wenn Sie die richtigen Befehle kennen. Es gibt keine praktischen Schaltflächen und Menüs in der textorientierten Befehlswelt der Automationssprachen.
Viel mehr Hilfestellung als in der Konsole erhalten Sie, wenn Sie zum ISE-Editor greifen. Dieser blendet IntelliSense-artige Auswahlmenüs ein, sobald Sie ein Schlüsselzeichen wie den Bindestrich (-) eingeben, und hilft Ihnen schon einmal etwas, auf intuitive Weise Befehle zu finden (Abbildung 1.15).
Abbildung 1.15: Moderne IntelliSense-Vervollständigung im ISE-Editor.
Das IntelliSense-Menü kann auch manuell jederzeit über geöffnet werden.
Tipp
Ob ISE IntelliSense-Menüs anzeigen soll, bestimmen Sie über Tools/Optionen auf der Registerkarte Allgemeine Einstellungen im Bereich IntelliSense.
Autovervollständigung in der PowerShell-Konsole
In der PowerShell-Konsole steht – immerhin – eine Autovervollständigung zur Verfügung. Ein Druck auf genügt, um die aktuelle Eingabe zu vervollständigen. Drücken Sie die Taste mehrmals, um weitere Vorschläge zu erhalten. blättert einen Vorschlag zurück, falls Sie zu schnell waren.
Tipp
Bei der Autovervollständigung über gilt die »Dreier-Regel«: Geben Sie mindestens drei Zeichen ein, bevor Sie drücken. Bei PowerShell-Befehlen geben Sie mindestens den ersten Namensteil, den Bindestrich und dann drei Zeichen ein. Andernfalls gibt es zu viele infrage kommende Möglichkeiten, und muss viel zu oft gedrückt werden, bis das richtige Ergebnis vorgeschlagen wird.
Die Autovervollständigung dient nicht nur der Bequemlichkeit. Sie vermeidet auch Tippfehler und macht sie deutlich. Liefert zum Beispiel gar kein Resultat, liegt der Verdacht nahe, dass Sie sich bei Ihrer vorhandenen Eingabe bereits vertippt haben. Überprüfen Sie in diesem Fall, was Sie bisher eingegeben haben, und korrigieren Sie die Eingabe falls nötig. Danach versuchen Sie noch einmal.
Die Autovervollständigung über steht übrigens auch in ISE bereit und vervollständigt dann sofort, ohne dass sich ein Auswahlmenü einblendet.
Ab PowerShell 5 kann die Konsole sogar mit IntelliSense-artigen Auswahlmenüs aufwarten. Geben Sie den Beginn eines Befehls ein und drücken dann , zeigt die Konsole die noch infrage kommenden Befehle an, die Sie mit den Pfeiltasten auswählen und mit der übernehmen. Geben Sie zum Beispiel Folgendes ein und drücken Sie dann :
PS> Get-Pr
In PowerShell 5 erscheint nun das Auswahlmenü der noch infrage kommenden Befehle, aus denen Sie sich per Pfeiltasten einen aussuchen können (Abbildung 1.16).
Abbildung 1.16: PowerShell 5 bietet auch in der Konsole eine Befehlsauswahl an.
Ist die Eingabe nicht eindeutig genug, fragt PowerShell gegebenenfalls nach, ob Sie wirklich alle infrage kommenden Befehle sehen wollen. Wenn Sie die Frage mit beantworten, ergießt sich eine lange Liste möglicher Vervollständigungen – nicht so praktisch.
Zuständig dafür ist eine PowerShell-Erweiterung namens PSReadLine, die noch eine ganze Reihe weiterer Tricks auf Lager hat, wie Sie etwas später sehen. Möchten Sie diese Erweiterung in der PowerShell-Konsole nicht nutzen, geben Sie ein:
PS> Remove-Module PSReadLine
Farbcodierungen verstehen
Eine wichtige Hilfestellung ist die Farbcodierung der aktuellen Befehlszeile. Sie zeigt sich »bunt«, solange Sie etwas darin eingeben und Ihre Eingabe noch nicht mit an PowerShell geschickt haben. Die Farben dienen nicht bloß der Unterhaltung, Sie verdeutlichen, wie Power-Shell Ihre Eingaben interpretiert. Viele Eingabefehler lassen sich mithilfe der Farbcodierung besser verstehen und vermeiden.
Abbildung 1.17: Farbcodierungen zeigen, wie PowerShell Ihre Eingaben versteht.
Geben Sie in ISE beispielsweise ein:
PS> dir C:\Windows
Das IntelliSense-Menü unterstützt Sie bei der Eingabe des Pfadnamens, und die Befehlszeile selbst wird in mehreren Farben dargestellt. Der Befehl dir erscheint in Weiß. Der Pfadname dagegen wird in Pink angezeigt (Abbildung 1.17). Weiße Befehlswörter repräsentieren also stets Befehle, und pinke Elemente entsprechen Argumenten (Zusatzinformationen), die Sie einem Befehl anfügen.
Ab PowerShell 5.0 bringt auch die PowerShell-Konsole mit dem Modul PSReadLine die Farbcodierung für die aktuelle Eingabe mit (Abbildung 1.18):
Abbildung 1.18: Farbcodierung und Syntaxfehleranzeige ab PowerShell 5.0 auch in der Konsole.
Syntaxfehler, also grammatikalische Fehler wie fehlende Klammern oder aus Sicht von Power-Shell unsinnige Eingaben, werden in der ISE mit einer roten Wellenlinie unterschlängelt, und wenn Sie den Mauszeiger auf diese Linie bewegen und kurz warten, verrät ein Tooltippfenster, was mit der Eingabe noch nicht stimmt (Abbildung 1.19). In der Konsole zeigt eine rote spitze Klammer im Eingabeprompt Syntaxfehler an.
Abbildung 1.19: Syntaxfehler werden rot unterschlängelt, und PowerShell nennt die Fehlerursache.
Über Tools/Optionen lassen sich in der ISE die Farbzuweisungen im Zweig Skriptbereichtoken und Konsolentoken einsehen und auch ändern (Abbildung 1.13). Tabelle 1.4 zeigt, welche Tokentypen farblich unterschieden werden und wie die Standardfarben eingestellt sind:
Tabelle 1.4: Farbcodierung der Befehlselemente in ISE.
Rechnen mit PowerShell
PowerShell unterstützt alle Grundrechenarten, und ein Ausgabebefehl ist überflüssig, sodass Sie Ihre Rechenaufgaben direkt in die Konsole eingeben können:
PS> 100 * 58 / 5.9
983,050847457627
Wenn Sie genau hinschauen, werden Sie entdecken: Bei der Codeeingabe verwendet Power-Shell als Dezimaltrennzeichen ausschließlich den Punkt. Das ist wichtig, damit Code länderübergreifend ausgeführt werden kann. Bei der Textausgabe der Rechenergebnisse wird als Dezimaltrennzeichen dagegen das in den regionalen Einstellungen Ihres Landes vorgesehene Zeichen benutzt – in Deutschland also ein Komma.
Hinweis
Das Komma hat bei der Codeeingabe ebenfalls eine feste Bedeutung: Es bildet Listen (oder in Programmierdeutsch: Arrays beziehungsweise Felder):
PS> 1,2,3
1
2
3
PS> 1,2,3 * 3
1
2
3
1
2
3
1
2
3
Auch die Farbcodierung Ihrer Eingaben sollten Sie im Blick behalten. Operatoren wie das Pluszeichen (+), das Minuszeichen (-) oder das Komma erscheinen stets in Grau. Zahlen haben eine eigene Farbe, und auch Texte in Anführungszeichen werden mit separater Farbe markiert:
PS> 'Hallo' * 10
Runde Klammern funktionieren genau wie in der Mathematik und führen zuerst die Anweisungen in den Klammern aus:
PS> 3+5*10
53
PS> (3+5)*10
80
Profitipp
Runde Klammern sind bei PowerShell nicht auf Rechenoperationen beschränkt. Man kann sie überall dort einsetzen, wo es Missverständnisse bezüglich der Ausführungsreihenfolge geben könnte. Alles, was in runden Klammern steht, wird zuerst ausgeführt, und dann wird an dieser Stelle mit dem Ergebnis weitergearbeitet.
Vielleicht erinnern Sie sich an eines der ersten Beispiele in diesem Kapitel – darin wurde das Ergebnis von ipconfig.exe in einer Variablen gespeichert, und diese wurde dann mit dem Operator -like gefiltert, um nur Zeilen auszugeben, in denen »IPv4-Adresse« steht.
Mithilfe der runden Klammern kann man dies auch ohne Variablen in einem Ausdruck formulieren. Allerdings sind solche Ausdrücke nicht besonders leserlich:
PS C:\> (ipconfig.exe) -like '*IPv4*'
IPv4-Adresse . . . . . . . . . . : 192.168.2.119
Umwandlungen
Mit dem Präfix 0x lassen sich hexadezimale Notationen kennzeichnen und auf diese Weise automatisch in ihren Dezimalwert umwandeln:
PS> 0xff
255
Die in der IT üblichen Größenordnungen wie KB, MB, GB, TB und PB dürfen ebenfalls eingesetzt werden, wenn sie einer Zahl ohne Leerzeichen folgen:
PS> 1MB
1048576
PS> 8.9TB
9785653487206,4
PS> 0x8eKB
145408
Hat sich dennoch ein Leerzeichen zwischen Zahl und Einheit geschmuggelt, ändern sich sofort die Farben. In der Konsole erscheint der folgende Ausdruck in Weiß, repräsentiert also eine Zahl:
PS> 1MB
Mit Leerzeichen wird die Zahl 1 weiterhin in Weiß angezeigt, aber MB ist nun gelb, also in der Farbe für die Befehle. Für PowerShell sieht die Eingabe nun so aus, als würden Sie eine Zahl und dann einen Befehl eingeben wollen:
PS> 1 MB
Drücken Sie und schicken diese Eingabe zu PowerShell, kommt es jetzt zu einem Fehler:
PS C:\> 1 MB
In Zeile:1 Zeichen:3
+ 1 MB
+ ~~
Unerwartetes Token MB
in Ausdruck oder Anweisung
+ CategoryInfo : ParserError: (:)
RecordException
+ FullyQualifiedErrorId : UnexpectedToken
Der Fehler war sogar farblich vorhersehbar, denn die Konsole färbt das >-Zeichen der Eingabeaufforderung rot ein, solange die Eingabe Syntaxfehler enthält, also Verstöße gegen die Power-Shell-Grammatik.
Die Fehlermeldung beklagt sich völlig zu Recht darüber, dass das »Token« (der Sprachbestandteil also) namens MB an dieser Stelle keinen Sinn ergibt. Es ist schlichtweg sprachlich nicht zulässig, einer Zahl direkt einen Befehl folgen zu lassen, und so wäre die gleiche Fehlermeldung erschienen, wenn Sie die folgende etwas offensichtlicher inkorrekte Eingabe abschickten:
PS> 12 notepad
Zahlenreihen
Zahlenreihen werden über den Operator .. (bestehend aus zwei Punkten) erzeugt und können – jedenfalls von fortgeschrittenen Anwendern – über Typkonvertierungen auch in andere Datentypen verwandelt werden. Im folgenden Beispiel wird eine Zahlenfolge von 65 bis 90 generiert, was den ASCII-Codes der Buchstaben »A« bis »Z« entspricht. Durch die Umwandlung in ein Array vom Typ Char (einzelnes Zeichen) entsteht daraus eine Buchstabenliste:
PS> 65..90
PS> [Char[]](65..90)
Sogar mit Texten – die stets in einfachen Anführungszeichen stehen – kann »gerechnet« werden:
PS> 'Hallo' + 'Welt'
HalloWelt
PS> 'Hallo' * 10
HalloHalloHalloHalloHalloHalloHalloHalloHalloHallo
Unvollständige und mehrzeilige Eingaben
Mitunter kann die PowerShell-Konsole in einen Lähmungszustand fallen. Dieser tritt nur in der klassischen Konsole auf. Die moderne ISE ist dagegen immun.
Ist der Lähmungszustand eingetreten, führt die PowerShell-Konsole einfach keinen Befehl mehr aus. Dieser Zustand ist an einem klaren Symptom erkennbar: Die Eingabeaufforderung ändert sich und zeigt nun statt eines Pfadnamens an: >>. Ursache ist der primitive Mehrzeilenmodus der Konsole, der in diesem Fall aktiviert worden ist. PowerShell versteht Ihre Eingaben darin nicht mehr als einzelne Zeilen, sondern als Teil eines mehrzeiligen Texts – was die Frage aufwirft, wie (und warum) dieser Mehrzeilenmodus überhaupt aktiviert wurde und wie man wieder heil aus ihm herauskommt.
Aktiviert wird der Modus immer dann, wenn das, was Sie eingeben, noch nicht vollständig ist. Geben Sie beispielsweise einen Text in Anführungszeichen ein, ohne die abschließenden Anführungszeichen anzufügen, geht die PowerShell-Konsole davon aus, dass der Text in der nächsten Zeile fortgesetzt werden soll – und aktiviert von ganz allein den Mehrzeilenmodus.
"Hallo
>> Dies ist mein kleines Tagebuch.
>> Ich schreibe jetzt einen mehrseitigen Text
>> Das geht so lange, bis ich die Lust verliere."
>>
Hallo
Dies ist mein kleines Tagebuch.
Ich schreibe jetzt einen mehrseitigen Text
Das geht so lange, bis ich die Lust verliere.
Erst wenn Sie das Abschlusszeichen eingeben (und dann noch zweimal drücken), akzeptiert PowerShell die mehrzeilige Eingabe. Sinnvoll ist das Ganze im Alltag nur in wenigen Ausnahmefällen und führt viel häufiger zu Irritationen. Falls PowerShell also plötzlich nicht mehr auf Ihre Befehle zu reagieren scheint und der verräterische >>-Prompt erscheint, drücken Sie am besten und brechen ab. Drücken Sie danach auf , um die letzte Eingabe zurückzubekommen, und vervollständigen Sie Ihre Eingabe.
In ISE kann der Mehrzeilenmodus nicht auftreten, weil es ihn gar nicht gibt. Die ISE ist ja bereits ein vollwertiger Skripteditor, und Sie bräuchten lediglich den Skriptbereich mit dem Pfeilschaltflächesymbol aus Abbildung 1.11 einzublenden, um komfortabel mehrzeiligen Text und Code zu erfassen. Deshalb quittiert die Konsole in ISE fehlende Anführungszeichen und andere paarweise vorkommende Sonderzeichen mit einem aussagekräftigen Fehler:
PS> "Hallo
Die Zeichenfolge hat kein Abschlusszeichen: ".
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : TerminatorExpectedAtEndOfString
Profitipp
Tatsächlich enthält die Konsole von ISE einen (versteckten) Mehrzeilenmodus. Möchten Sie eine weitere Zeile erfassen, drücken Sie . Eine neue leere Zeile erscheint. Damit sind auch in ISE Eingaben wie diese möglich:
PS> "Hallo
dies ist ein mehrzeiliger Text
mit UMSCHALT+ENTER lassen sich weitere Zeilen hinzufügen
Auch hier muss der Text am Ende ordentlich mit einem Anführungszeichen abgeschlossen werden"
Hallo
dies ist ein mehrzeiliger Text
mit UMSCHALT+ENTER lassen sich weitere Zeilen hinzufügen
Auch hier muss der Text am Ende ordentlich mit einem Anführungszeichen abgeschlossen werden
Skriptausführung erlauben
Anfangs erlaubt die PowerShell ausschließlich die Ausführung interaktiver Befehle. Um auch PowerShell-Skripte ausführen zu können, müssen Sie dem einmalig zustimmen.
Dies sollten Sie schon jetzt tun, auch wenn Sie vielleicht noch gar keine eigenen PowerShell-Skripte schreiben möchten. PowerShell ist nämlich erweiterbar und lädt zusätzliche Befehle – sofern vorhanden – automatisch nach. Viele dieser Befehle werden von Skripten bereitgestellt, und solange die Skriptausführung verboten ist, funktionieren solche Befehle nicht. Mit SetExecutionPolicy wird die Skriptausführung erlaubt:
PS> Set-ExecutionPolicy –Scope CurrentUser –ExecutionPolicy RemoteSigned –Force
Diese Änderung gilt nur für Ihr eigenes Benutzerkonto und bleibt so lange wirksam, bis Sie die Einstellung erneut ändern. Besondere Administratorrechte sind dafür nicht erforderlich. Allerdings lohnt sich ein Blick auf die übrigen Ausführungsrichtlinien, die es sonst noch gibt:
PS> Get-ExecutionPolicy –List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser RemoteSigned
LocalMachine Undefined
PowerShell bestimmt die effektive Einstellung, indem es die fünf Richtlinien von oben nach unten prüft. Die erste Einstellung, die nicht Undefined lautet, wird wirksam. Sind alle Einstellungen auf Undefined gesetzt, wird die Skriptausführung verboten. Das ist der Ausgangszustand der PowerShell, und die aktuell effektive Einstellung liefert Get-ExecutionPolicy, wenn Sie den Parameter -List nicht angeben.
Besonderes Augenmerk verdienen die ersten beiden Richtlinien: MachinePolicy und UserPolicy werden zentral über Gruppenrichtlinien festgelegt. Sie können diese Einstellungen nicht manuell ändern. Da es die obersten beiden Einstellungen sind, haben sie Vorrang vor allen übrigen. Wenn an diesen obersten beiden Stellen also Vorgaben zu sehen sind, können Sie zwar darunter eigene Einstellungen treffen, doch werden diese niemals wirksam.
Grundsätzlich ist es eine schlechte Idee, die Ausführungsrichtlinie über zentrale Gruppenrichtlinien zwingend vorzuschreiben, denn die Ausführungsrichtlinie ist nicht dazu gedacht, Sie vor Angreifern zu schützen. Sie ist also auch kein Teil einer Unternehmenssicherheitsstrategie. Die Ausführungsrichtlinie ist ein persönlicher Sicherheitsgurt, der Sie selbst vor Ihren eigenen Fehlern schützt. Die Einstellung RemoteSigned besagt zum Beispiel, dass Skripte, die aus »feindlichem« Territorium stammen und nicht mit einer gültigen digitalen Signatur versehen sind, nicht ausgeführt werden können.
Unter »feindlichem Territorium« versteht man Skripte, die aus dem Internet heruntergeladen oder als E-Mail-Anhang empfangen wurden, und solche, die auf Netzlaufwerken lagern, die nicht zur eigenen Domäne (beziehungsweise zur Internetzone der vertrauenswürdigen Sites) zählen.
So schützt Sie RemoteSigned also davor, potenziell gefährliche Skripte aus unbekannten Quellen auszuführen, während Sie eigene Skripte von der lokalen Festplatte aus starten können.
Wählen Sie stattdessen die Einstellung Unrestricted, erhielten Sie bei Skripten aus zweifelhaften Quellen eine Warnung, könnten sich aber darüber hinwegsetzen und das Skript trotzdem ausführen.
Die Einstellung Bypass schließlich würde alle Skripte unabhängig von ihrer Herkunft sofort und ohne Rückfragen ausführen. Sie kann zum Beispiel für Unternehmensadministratoren sinnvoller sein als die zuvor genannten, weil man damit Skripte beliebiger Herkunft auch unbeaufsichtigt ausführen kann.
Tippfehler vermeiden und Eingaben erleichtern
PowerShell ist textbasiert, und jedes Zeichen eines Befehls ist gleich wichtig. Fehlt eines, funktioniert gar nichts. Deshalb sind Tippfehler in PowerShell so wie in jeder anderen textbasierten Skriptsprache die häufigste Ursache für Frustration. Dagegen hilft nur konsequente Tippfaulheit, denn wer weniger tippt, tippt auch weniger verkehrt – und schneller geht es außerdem. Lassen Sie daher PowerShell so viel wie möglich von der Tipparbeit übernehmen.
Autovervollständigung
Die Autovervollständigung kann begonnene Eingaben vervollständigen und ist auch eine wichtige Kontrollinstanz: Falls die Autovervollständigung keine Resultate liefert, liegt vielleicht bereits ein Tippfehler in dem Text vor, den Sie bis dahin eingegeben haben. Die Autovervollständigung hat kann etwa Pfadnamen vervollständigen wie beispielsweise hier:
PS> C:\p
Bei jedem Druck auf schlägt PowerShell jetzt einen neuen Ordner oder eine neue Datei vor, der beziehungsweise die mit C:\p beginnt. Je mehr Zeichen Sie selbst eingeben, desto weniger Auswahlmöglichkeiten werden angeboten, und in der Praxis sollten Sie wenigstens drei Zeichen eintippen, um nicht lästig viele Vorschläge zu erhalten.
Pfadnamen vervollständigen
Enthält ein Pfadname Leerzeichen, stellt die Autovervollständigung den Pfad automatisch in Anführungszeichen. Wollen Sie sich in einen Unterordner vortasten, genügt es, hinter dem abschließenden Anführungszeichen einen weiteren \ anzufügen und zu drücken – schon geht die Autovervollständigung weiter:
PS> & 'C:\Program Files\Common Files'\
Hat die Autovervollständigung einen Pfadnamen in Anführungszeichen gesetzt, fügt sie außerdem am Zeilenanfang ein & ein. Dieser spezielle sogenannte »Call«-Operator sorgt dafür, dass der Text in Anführungszeichen sich wie ein Befehl verhält, also genauso, als wäre ein Pfad ohne Anführungszeichen geschrieben worden.
Und warum? Weil Text in Anführungszeichen andernfalls eben nichts weiter ist als genau das: Text. Er würde ohne & einfach nur kommentarlos wieder ausgegeben. Sogar Platzhalterzeichen sind in Pfadnamen erlaubt. Geben Sie zum Beispiel C:\pr*m ein, schlägt PowerShell den Ordner C:\Program Files vor.
Grundsätzlich kann der Call-Operator auch dafür verwendet werden, beliebige Befehle auszuführen, die als Text vorliegen. Dies ist ein ungewöhnliches Beispiel:
PS> $a = 'not'
PS> $b = 'AD'
PS> $c = 'eP'
PS> & $a$c$b
Hier wird der Windows-Editor Notepad gestartet, denn die Variablen ergeben in richtiger Reihenfolge einfach nur diesen Text, den der Call-Operator dann genauso ausführt, als hätten Sie ihn direkt eingegeben:
PS> $a$c$b
notePAD
Dieses Beispiel verdeutlicht nebenbei eine andere PowerShell-Funktionalität: Variablen, die in normalen Anführungszeichen stehen, werden automatisch durch ihren Inhalt ersetzt. Achten Sie auf die Farben, wenn Sie das obige Beispiel eingeben: Die Variablen innerhalb des Texts erscheinen in einer anderen Farbe als die Anführungszeichen.
Verwenden Sie dagegen einzelne Anführungszeichen, wird der Text von PowerShell nicht verändert und erscheint immer genau so wie angegeben. Auch hier weisen die Farben den Weg: Die Variablen innerhalb der Anführungszeichen haben die gleiche Farbe wie die Anführungszeichen.
PS> '$a$c$b'
$a$c$b
Befehlszeilen erneut verwenden
Auch die Befehlshistorie spart Tipparbeit. Oft sitzt der erste eingegebene Befehl nicht auf Anhieb richtig, und Sie erhalten eine Fehlermeldung, oder der Befehl macht (noch) nicht das, was Sie sich eigentlich vorgestellt haben. Wenn Sie an Ihrem Befehl ein wenig feilen und ihn verbessern wollen, brauchen Sie ihn nicht komplett neu einzugeben.
Drücken Sie stattdessen , um den zuletzt eingegebenen Befehl zurückzuholen. Danach können Sie diesen Befehl verändern oder verbessern, bevor Sie ihn mit erneut an Power-Shell senden. Drücken Sie mehrmals, wenn Sie vorvorherige oder noch ältere Eingaben erneut verwenden wollen. Mit wandern Sie in der Liste wieder zurück.
Befehlsnamen autovervollständigen
Geben Sie den Anfang