PowerShell - kurz & gut (eBook)
224 Seiten
O'Reilly Verlag
978-3-96010-406-3 (ISBN)
Thorsten Butz ist langjähriger Microsoft Certified Trainer und Consultant. Er begann seine Karriere als Netzwerkspezialist und Unix-Enthusiast beim Provider Network. Seit Windows 2000 begleitet er intensiv Microsofts Server-Technologien, mit dem besonderen Augenmerk auf Interoperabilität und Automation.
Thorsten Butz ist langjähriger Microsoft Certified Trainer und Consultant. Er begann seine Karriere als Netzwerkspezialist und Unix-Enthusiast beim Provider Network. Seit Windows 2000 begleitet er intensiv Microsofts Server-Technologien, mit dem besonderen Augenmerk auf Interoperabilität und Automation.
KAPITEL 2
Hallo PowerShell!
Die PowerShell ist ein ursprünglich von Microsoft entwickeltes plattformübergreifendes Werkzeug zur Automation und Konfiguration der IT-Infrastruktur, bestehend aus einer Skriptsprache und einem Kommandozeileninterpreter, der Shell. PowerShell ist eine objektorientierte Skriptsprache, die die Klassen und Datentypen des .NET Framework mit einer benutzerfreundlichen Befehlssyntax zugänglich macht.
Die PowerShell steht sowohl im Quelltext als auch kompiliert für zahlreiche Betriebssysteme auf den Projektseiten zum Download bereit: https://github.com/PowerShell/PowerShell.
Seit Version 6 steht der Code unter der MIT-License. Details zur Installation und den betriebssystemspezifischen Unterschieden finden Sie in Kapitel 3, Installieren und Aktualisieren der PowerShell.
Get-Uptime
Get-FileHash -Path 'helloworld.ps1'
Test-Connection -TargetName 'www.oreilly.de' -TcpPort 80
PowerShell-Befehle sind idealerweise auch für Einsteiger gut les- und erinnerbar. Sogenannte Cmdlets, wie Get-Uptime im Beispiel oben, bestehen prinzipiell aus einem Verb (Get) und einem Nomen (Uptime) und sind exklusiv in der PowerShell ausführbar. Die Shell unterstützt den Anwender darüber hinaus mithilfe der Autovervollständigung beim (Wieder-)Finden der gewünschten Befehle, Parameter und Argumente.
Get-Uptime -since
Get-Process -Name 'pwsh'
Compress-Archive -Path '~/*' -DestinationPath 'backup.zip'
Einem Cmdlet folgen gegebenenfalls Parameter, gut erkennbar an dem vorangestellten Bindestrich, und Argumente. Im Beispiel oben verwenden wir die Tilde ~, die in der PowerShell (und vielen anderen Shells) das Heimatverzeichnis repräsentiert. In vielen Fällen unterstützt Sie die Shell mithilfe der Tabulatortaste nicht nur beim Vervollständigen des Cmdlet-Namens und dessen Parametern, auch Argumente können in einigen Fällen automatisch vervollständigt werden.
Hinweis Um Ihnen Werte anbieten zu können, die Sie mithilfe der Autovervollständigung als Argument übergeben, muss der PowerShell-Interpret gültige Werte bereits ermitteln, bevor Sie diese Werte eintippen. Im Beispiel Get-Process -Name 'pwsh' kann die PowerShell Ihnen 'pwsh' anbieten, da Sie im Hintergrund die Liste aktiver Prozesse bereits abgerufen hat. Das Gleiche wird mit Compress-Archive -Path '~/*' -DestinationPath 'backup.zip' nicht funktionieren – woher sollte das System wissen, wie Sie Ihre Zip-Datei nennen möchten? |
Cmdlets sind das Herzstück der PowerShell. Die Ausführung von Programmcode ist aber nicht auf Cmdlets beschränkt. Sie können ebenfalls die althergebrachten Kommandozeilenprogramme (englisch Native Commands) verwenden.
nslookup www.oreilly.de
ping www.oreilly.de
Ebenso sind einfache (Rechen-)Operationen unmittelbar ausführbar.
42 + 23
60 * 60
7 % 2
'Power' + 'Shell'
Betrachtet man die PowerShell ein wenig technischer, stößt man schnell auf das bereits eingangs erwähnte .NET Framework.
[System.Net.Dns]::GetHostByName('www.oreilly.de')
[System.Net.Sockets.TcpClient]::new('188.40.159.226',80)
Das .NET Framework ist Microsofts zentrale Sammlung von Klassenbibliotheken und Schnittstellen zur Entwicklung von Software in Hochsprachen wie C#. Mittels PowerShell erlangt der Anwender Zugriff auf diese Sammlung Zehntausender Programmbausteine, wodurch sich der Einsatzbereich der Shell explosionsartig erweitert. Mehr zu der speziellen Syntax in diesem Kontext erfahren Sie im Abschnitt »Rückgriff auf das .NET Framework« auf Seite 115.
Das LEGO®-Prinzip
Als Klassenbibliothek bezeichnet man eine Sammlung von Standard-implementierungen häufig benötigter Datenstrukturen und Algorithmen beispielsweise zum Dateizugriff, zur Netzwerkkommunikation, zum Zugriff auf Datenbanken oder zur Darstellung grafischer Benutzeroberflächen. Diese Softwarebausteine werden typischerweise vom Softwareentwickler zu einem größeren Ganzen zusammengefügt und mit eigener Programmlogik ergänzt. Schlicht ausgedrückt, kann man dies mit dem sehr erfolgreichen Spielprinzip eines dänischen Spielzeugherstellers vergleichen: Einzelne Bausteine lassen sich auf eine vorgegebene Weise zusammenstecken und erlauben so sehr einfach das Erschaffen komplexer Gegenstände aus Standardelementen.
Was ist ein Cmdlet?
Im Idealfall finden Sie in der PowerShell ein sogenanntes Cmdlet, das die von Ihnen gewünschte Aufgabe erfüllen kann. Angenommen, Sie suchten nach einer Aufzählung aller aktiven Prozesse.
Get-Process
Nehmen wir weiter an, dass Sie nun im Anschluss einen ganz bestimmten Prozess suchen und beenden wollen.
Get-Process -Name 'pwsh'
Stop-Process -Name 'pwsh'
Vergleichen wir diese Codebeispiele mit dem nachfolgenden Listing.
[System.Diagnostics.Process]::GetProcesses()
[System.Diagnostics.Process]::GetProcessesByName('pwsh').kill()
Ganz offenkundig handelt es sich um die gleiche Funktionalität: Zunächst fragen Sie nach aktiven Prozessen, im Anschluss beenden Sie einen spezifischen Prozess. Dies ist kein Zufall, es handelt sich im Inneren um denselben Code. Ein Cmdlet, hier Get-Process, ist oftmals nur eine benutzerfreundliche Hülle, ein Frontend für eine Softwareroutine, die unabhängig von der PowerShell implementiert wurde.
Der Begriff Cmdlet (gesprochen Commandlet) ist ein Kunstwort, es beschreibt ein Kommando, das einzig in der PowerShell ausführbar ist und der benutzerfreundlichen Verb-Nomen-Syntax folgt. Allgemein spricht man von einem Befehl (englisch Command), wenn die genaue Unterscheidung (Cmdlet, Applikation …) irrelevant ist oder man mehrere Befehle zu einer komplexen Anweisung zusammenführt, zum Beispiel mittels Pipelining. Ein Befehl kann im allgemeinen Sprachgebrauch praktisch alles sein, was den Computer dazu bringt, eine Aktion auszuführen.
Cmdlets im engeren Sinn werden in einer .NET-Sprache wie C# entwickelt und in *.dll-Dateien1 übersetzt. Sie werden auch binäre Cmdlets genannt. Zusammen mit einem beschreibenden Manifest, einer *.psd1-Datei und gegebenenfalls weiteren Ressourcen wie Hilfedateien werden diese als sogenannte Module bereitgestellt.
Get-Command -Name 'Get-Process' | Select-Object -property
CommandType, Name, Version, Source, DLL
Get-Command -CommandType 'Cmdlet'
Zu welchem Modul ein Cmdlet gehört, erkennen Sie in der Ausgabe von Get-Command (siehe Beispiel oben) an der Eigenschaft Source. So können Sie unter anderem nachvollziehen, welche Cmdlets ähnliche Aufgaben erfüllen.
Binären Cmdlets gleichgestellt sind sogenannte Advanced Functions, wie etwa Compress-Archive. Advanced Functions sind in der Sprache PowerShell implementiert, ihre Funktionsweise können Sie jederzeit im Quelltext nachvollziehen.
Get-Command -Name 'Compress-Archive'
Get-Command -Name 'Compress-Archive' |
Select-Object -ExpandProperty Definition
Get-Command -CommandType 'Function'
Begriffsverwirrung In Version 1 der PowerShell existierten ausschließlich binäre Cmdlets, sie wurden in einer .NET-Hochsprache programmiert und übersetzt/kompiliert. Mit Einführung der flexibleren Advanced Functions in PowerShell-Version 2 wurde das Kunstwort Cmdlet gleichsam zum Oberbegriff, was bis zum heutigen Tag mancherorts für Verwirrung sorgt. So erweckt die Ausgabe von Get-Command den Eindruck, nur binäre Cmdlets seien echte Cmdlets. Technisch ist dies weitgehend irrelevant. Aus Sicht des Anwenders sind jedoch das einprägsame Benennungskonzept, die Objektorientierung und das Pipelining die entscheidenden Vorteile gegenüber Applikationen wie ipconfig.exe (Windows) oder ip bzw. ifconfig (Linux, macOS). Und dies umfasst mehr als nur die binären Cmdlets, sodass ich in diesem Buch Cmdlet als Oberbegriff verwenden werde. |
Objektorientierung und Pipeline
Ich habe die Pipeline...
Erscheint lt. Verlag | 2.2.2021 |
---|---|
Reihe/Serie | O'Reilly`s kurz & gut | O'Reilly`s kurz & gut |
Verlagsort | Heidelberg |
Sprache | deutsch |
Themenwelt | Mathematik / Informatik ► Informatik ► Betriebssysteme / Server |
Schlagworte | Administration • CmdLets • Kommandozeile • Monad • PowerShell • PowerShell 7 • PowerShell Befehle • PowerShell Skripte • Scripting • Windows Administration • Windows PowerShell • Windows PowerShell 5 • Windows Server |
ISBN-10 | 3-96010-406-5 / 3960104065 |
ISBN-13 | 978-3-96010-406-3 / 9783960104063 |
Haben Sie eine Frage zum Produkt? |
Größe: 9,6 MB
DRM: Digitales Wasserzeichen
Dieses eBook enthält ein digitales Wasserzeichen und ist damit für Sie personalisiert. Bei einer missbräuchlichen Weitergabe des eBooks an Dritte ist eine Rückverfolgung an die Quelle möglich.
Dateiformat: EPUB (Electronic Publication)
EPUB ist ein offener Standard für eBooks und eignet sich besonders zur Darstellung von Belletristik und Sachbüchern. Der Fließtext wird dynamisch an die Display- und Schriftgröße angepasst. Auch für mobile Lesegeräte ist EPUB daher gut geeignet.
Systemvoraussetzungen:
PC/Mac: Mit einem PC oder Mac können Sie dieses eBook lesen. Sie benötigen dafür die kostenlose Software Adobe Digital Editions.
eReader: Dieses eBook kann mit (fast) allen eBook-Readern gelesen werden. Mit dem amazon-Kindle ist es aber nicht kompatibel.
Smartphone/Tablet: Egal ob Apple oder Android, dieses eBook können Sie lesen. Sie benötigen dafür eine kostenlose App.
Geräteliste und zusätzliche Hinweise
Buying eBooks from abroad
For tax law reasons we can sell eBooks just within Germany and Switzerland. Regrettably we cannot fulfill eBook-orders from other countries.
aus dem Bereich