„PowerShell“ – Versionsunterschied
[gesichtete Version] | [gesichtete Version] |
K →Deutsch |
Ath (Diskussion | Beiträge) Markierung: Rückgängigmachung |
||
(477 dazwischenliegende Versionen von mehr als 100 Benutzern, die nicht angezeigt werden) | |||
Zeile 1: | Zeile 1: | ||
{{Infobox Software |
{{Infobox Software |
||
| Logo = [[Datei:PowerShell Core 6.0 icon.png|100px|PowerShell 6.0 icon]] |
|||
| Name = Windows PowerShell |
|||
| Screenshot |
| Screenshot = [[Datei:Windowspowershell unter Windows 8.png|300px|Windows PowerShell]] |
||
| Beschreibung = Screenshot der powershell.exe 5.0 innerhalb <code>conhost.exe</code> unter [[Microsoft Windows 8|Windows 8.1]] |
|||
| Beschreibung = Screenshot von PowerShell 1.0 |
|||
| Hersteller |
| Hersteller = [[Microsoft]] |
||
| AktuelleVersion |
| AktuelleVersion = <!-- aus Wikidata --> |
||
| AktuelleVersionFreigabeDatum |
| AktuelleVersionFreigabeDatum = <!-- aus Wikidata --> |
||
| AktuelleVorabVersion = |
|||
| Betriebssystem = [[Windows XP]]<br>[[Windows Server 2003]]<br>[[Microsoft Windows Vista|Windows Vista]]<br>[[Microsoft Windows Server 2008|Windows Server 2008]] |
|||
| AktuelleVorabVersionFreigabeDatum = |
|||
| Kategorie = [[Betriebssystem-Shell]] |
|||
| Betriebssystem = [[Microsoft Windows]], ab Version 6 auch [[Linux]] und [[macOS]] |
|||
| Lizenz = [[Microsoft|MS]]-[[EULA]] |
|||
| Kategorie = [[Kommandozeileninterpreter]] |
|||
| Deutsch = ja |
|||
| Lizenz = Proprietär, [[MIT-Lizenz]]<ref name="PowerShellLicense">[https://github.com/PowerShell/PowerShell/blob/master/LICENSE.txt PowerShell Lizenz auf Github]</ref> |
|||
| Website = [http://www.microsoft.com/powershell Windows PowerShell] |
|||
| Deutsch = ja |
|||
| Website = [https://docs.microsoft.com/de-de/powershell/ PowerShell] |
|||
}} |
}} |
||
'''PowerShell''' (auch '''Windows PowerShell''' und '''PowerShell Core''') ist ein [[Plattformunabhängigkeit|plattformübergreifendes]] [[Framework]] von [[Microsoft]] zur Automatisierung, Konfiguration und Verwaltung von Systemen, das einen [[Kommandozeileninterpreter]] inklusive [[Skriptsprache]] bietet.<ref name="PowerShellReadme">[https://github.com/PowerShell/PowerShell/blob/master/README.md PowerShell Readme-Datei auf Github]</ref> |
|||
Die '''Windows PowerShell''', zeitweise auch bekannt unter den [[Codename]]n ''Monad'' und ''Microsoft Command Shell'' (MSH), ist eine von [[Microsoft]] entwickelte Alternative zum [[Microsoft Windows|Windows]]-Kommandozeilenprogramm [[cmd.exe]] und zum [[Windows Script Host]]. |
|||
''Windows PowerShell'' basiert auf der [[Common Language Runtime]] (CLR) des [[.NET Framework]]s und wird mit [[Microsoft Windows|Windows]] als Teil des [[Windows Management Framework]]s (WMF) unter einer [[Proprietäre Software|proprietären Lizenz]] ausgeliefert.<ref name="BlogsMsdnPowerShellOpenSource">[https://blogs.msdn.microsoft.com/powershell/2016/08/18/powershell-on-linux-and-open-source-2/ blogs.msdn.microsoft.com: PowerShell on Linux and Open Source]</ref><ref name="MsdnWMF5ReleaseNotes">[https://msdn.microsoft.com/powershell/wmf/5.0/releasenotes msdn.microsoft.com: Windows Management Framework (WMF) 5.0 RTM – Anmerkungen zu dieser Version – Übersicht]</ref> |
|||
Die auf dem [[.NET]]-Framework in der Version 2.0 basierende Windows PowerShell verbindet die aus [[Unix-Shell]]s bekannte Philosophie von [[Pipe (Informatik)|Pipes]] und Filtern mit dem [[Paradigma]] der [[Objektorientierte Programmierung|objektorientierten Programmierung]]. Der Benutzer kann wie bisher einfache Befehle an einer [[Kommandozeile]] ausführen und miteinander verknüpfen oder aber auch komplexe [[Skriptsprache|Skript-Programme]] mit der eigens dafür entwickelten ''PowerShell Scripting Language'' schreiben. |
|||
Seit 2016 gibt es Windows PowerShell auch als ''Core Edition'', welche wie [[PowerShell#PowerShell Core 6|PowerShell Core]] auf [[.NET Core]] basiert und als Teil von ''Windows Nano Server'' und [[Windows IoT]] ausgeliefert wird.<ref name="TechnetPowerShellNanoServer">[https://technet.microsoft.com/de-de/windows-server-docs/get-started/powershell-on-nano-server technet.microsoft.com: PowerShell unter Nano Server]</ref> |
|||
Seit [[PowerShell#PowerShell Core 6|Version 6]] basiert PowerShell auf der Core Common Language Runtime (CoreCLR) und ist als plattformübergreifendes [[Open Source|Open-Source]]-Projekt<ref name="GithubPowerShell">[https://github.com/PowerShell/PowerShell PowerShell auf Github]</ref> unter der [[MIT-Lizenz]]<ref name="PowerShellLicense" /> für [[Linux]], [[macOS]] und [[Windows]] verfügbar.<ref name="BlogsMsdnPowerShellOpenSource" /> |
|||
Nachdem die Veröffentlichung von Windows PowerShell ursprünglich als Bestandteil von [[Microsoft Windows Vista|Windows Vista]] geplant war, hat PowerShell einen eigenen, unabhängigen Release-Zeitplan angenommen und wird nun Teil von [[Microsoft Exchange Server|Microsoft Exchange Server 2007]] sein. Auch beim [[Microsoft System Center Virtual Machine Manager|System Center Virtual Machine Manager]] und beim [[Microsoft Operations Manager|System Center Operations Manager]] soll PowerShell zum Einsatz kommen. |
|||
[[Microsoft Windows Server 2008|Windows Server 2008]] wird die erste Version von Windows sein, bei der Windows PowerShell bereits im Lieferumfang des Betriebssystems enthalten ist.<ref>{{internetquelle|hrsg=Microsoft|url=http://www.microsoft.com/windowsserver2008/powershell.mspx|titel=Windows Server 2008: Windows PowerShell: Now Part of Windows Server 2008 Beta 3|datum=[[13. November]] [[2006]]|zugriff=2007-05-16}}</ref> |
|||
== Entstehungsgeschichte == |
|||
Die aktuelle Version 1.0 ist für die Betriebssysteme [[Microsoft Windows XP|Windows XP]] und [[Microsoft Windows Server 2003|Windows Server 2003]] sowie für [[Microsoft Windows Vista|Windows Vista]] zum kostenlosen Herunterladen verfügbar.<ref>{{internetquelle|hrsg=Microsoft|url=http://www.microsoft.com/downloads/details.aspx?displaylang=de&FamilyID=c6ef4735-c7de-46a2-997a-ea58fdfcba63|titel=Windows PowerShell 1.0 Download|zugriff=2007-09-26}}</ref> Version 2.0 befindet sich noch im Beta-Stadium<ref>{{internetquelle|hrsg=Microsoft|url=http://www.microsoft.com/downloads/details.aspx?FamilyID=60deac2b-975b-41e6-9fa0-c2fd6aa6bc89&displaylang=en|titel=Windows PowerShell 2.0 CTP Download|zugriff=2007-11-05}}</ref> und beinhaltet u.a. eine [[grafische Benutzeroberfläche]]. |
|||
=== Eingabeaufforderung === |
|||
Jede veröffentlichte Version von [[MS-DOS]] und [[Microsoft Windows|Windows]] enthielt eine Kommandozeile oder Eingabeaufforderung (siehe auch [[Kommandozeileninterpreter]]). Diese sind <code>[[COMMAND.COM]]</code> (in DOS bzw. DOS-basierten Betriebssystemen wie [[Windows 9x]]) und <code>[[cmd.exe]]</code> (in Betriebssystemen der [[Microsoft Windows NT|Windows-NT]]-Familie). Die Eingabeaufforderung bietet einige Standardbefehle und ermöglicht das Ausführen weiterer [[Konsolenanwendung]]en. Darüber hinaus gibt es eine [[Skriptsprache]], um Aufgaben zu automatisieren (siehe [[Stapelverarbeitungsdatei]]). |
|||
Da jedoch nicht alle Funktionalitäten der [[Grafische Benutzeroberfläche|grafischen Benutzeroberfläche]] über die Eingabeaufforderung erreichbar sind, können nicht alle Aufgaben automatisiert werden und auch die Skriptsprache ist aufgrund ihrer Einfachheit in der Funktionalität beschränkt. |
|||
Mit [[Microsoft Windows Server 2003|Windows Server 2003]] waren die meisten Funktionen auch per Eingabeaufforderung verfügbar, dennoch bleiben die Limitierung der Skriptsprache sowie Inkonsistenzen in der Bedienung unterschiedlicher Konsolenanwendungen. |
|||
Microsoft versuchte bereits 1998 einige dieser Limitierungen mit der Einführung von [[Windows Script Host]] (<code>cscript.exe</code>) und dessen Unterstützung von [[JScript]] und [[VBScript]] in [[Microsoft Windows 98|Windows 98]] zu überwinden. Mit Windows Script Host ist es möglich, alle [[Component Object Model|COM]]-Komponenten anzusprechen, was die Automatisierung von weiten Teilen des Betriebssystems ermöglicht. |
|||
== Details == |
|||
Darüber hinaus gibt es in unterschiedlichen Windows-Versionen weitere Kommandozeileninterpreter für spezielle Einsatzgebiete (z. B. [[netsh]] zur Netzwerkkonfiguration oder das [[Windows Management Instrumentation]] Command-line (WMIC)). |
|||
=== Monad Manifest === |
|||
Den Kern der PowerShell bilden kleine Funktionseinheiten, genannt ''Cmdlets'' (gesprochen ''command-lets''), die dem Benennungsschema ''Verb-Substantiv'' folgen, also beispielsweise <code>Get-Help</code> oder <code>Set-Location</code>, wobei Groß- und Kleinschreibung keine Rolle spielt. Da die Bezeichnungen einiger Cmdlets relativ lang sind, können kürzere [[Alias]]-Namen vergeben werden, von denen bereits einige standardmäßig vordefiniert sind, unter anderem als Hilfe für Umsteiger von [[Unix-Shell]]s oder der [[cmd.exe|DOS/NT-Kommandozeile]] (beispielsweise <code>ls</code>, <code>dir</code>, <code>cp</code>, …). |
|||
[[Jeffrey Snover]] – ein Verfechter von Kommandozeilen, der 1999 bei Microsoft anfing – unterstützte zunächst [[Microsoft Windows Services for UNIX]] (SFU), um [[Unix]]-Tools unter Windows nutzen zu können. Da Windows aber nicht wie Unix textorientiert, sondern API-orientiert arbeitet, konnte es letztlich nicht umfassend verwaltet werden (z. B. Setzen von [[Registrierungsdatenbank|Registry]]-Werten). Snover entwickelte außerdem die [[Windows Management Instrumentation]] Command-line (WMIC).<ref name="SnoverMonadManifestoRevisitedYouTube">[https://www.youtube.com/watch?v=j0EX5R2nnRI PowerShell.org auf YouTube: Snover Monad Manifesto Revisited]</ref> 2002 beschrieb er einen neuen Ansatz für die Automatisierung in Windows als ''Monad Manifest''. Darin beschreibt Snover '''Monad''' als mächtige, konsistente, erweiterbare und nützliche „Plattform der nächsten Generation“ auf Basis von .NET, mit der der Aufwand für Administratoren reduziert und das Leben von Nicht-Programmierern deutlich vereinfacht werden könne.<ref name="MonadManifesto">[http://www.jsnover.com/Docs/MonadManifesto.pdf jsnover.com: Monad Manifesto] (PDF; 371 kB)</ref> Dies sollte unter anderem durch folgende Punkte erreicht werden: |
|||
* Administratoren können Befehle schneller und einfacher programmieren, da Monad viele Standardaufgaben von Befehlen übernimmt und durch einen einheitlichen [[Parser]] Konsistenz bietet. |
|||
* Anstatt Text ([[unstrukturierte Daten]]) werden [[Objekt (Programmierung)|Objekte]] (strukturierte Daten) an die [[Pipe (Informatik)|Pipe]] übergeben, was die Weiterverarbeitung vereinfacht. |
|||
* Ausführung von Skripts auf einer Vielzahl von entfernten Computern |
|||
Die Idee von Monad wurde weiterentwickelt. 2003 bei der ''Professional Development Conference'' in Los Angeles wurde erstmals die Monad Shell (MSH) gezeigt. 2005 wurden [[Entwicklungsstadium (Software)#Beta-Version|Beta]]-Versionen veröffentlicht. |
|||
=== PowerShell entsteht und wird Teil von Windows === |
|||
Die Cmdlets sind als spezielle [[.NET]]-[[Klasse (objektorientierte Programmierung)|Klassen]] implementiert, welche als Eingabe bestimmte [[Parameter (Informatik)|Parameter]] (gekennzeichnet durch ein vorangestelltes „<code>-</code>“) und [[Objekt (Programmierung)|Objekte]] annehmen und als Ausgabe wiederum Objekte zurückliefern, die dann beispielsweise als Tabelle formatiert ausgegeben oder zur weiteren Verarbeitung an andere Cmdlets weitergeleitet werden können. Da die Ausgabe nicht als Textstrom erfolgt, sondern als strukturiertes Objekt, lassen sich bestimmte Eigenschaften leicht ohne aufwändige [[Parser|Textanalyse]] selektieren und manipulieren. Analysen über [[Regulärer Ausdruck|Reguläre Ausdrücke]] sind jedoch ebenfalls möglich. Zurückgelieferte Objekte können auch in [[Variable]]n gespeichert und an anderer Stelle wiederverwendet werden. |
|||
2006 verkündete Microsoft, dass Monad in PowerShell umbenannt werde. Gleichzeitig wurde verkündet, dass [[Microsoft Exchange Server|Exchange Server 2007]] per PowerShell administriert werde und auch die GUI auf PowerShell aufsetze.<ref name="PowerShellHasArrived">[https://blogs.msdn.microsoft.com/powershell/2006/04/25/windows-powershell-monad-has-arrived/ blogs.msdn.microsoft.com: Windows PowerShell (Monad) Has Arrived]</ref> Noch im gleichen Jahr wurde PowerShell 1.0 veröffentlicht und zum Download angeboten.<ref name="PowerShellReleased">[https://blogs.msdn.microsoft.com/powershell/2006/11/14/its-a-wrap-windows-powershell-1-0-released/ blogs.msdn.microsoft.com: It’s a Wrap! Windows PowerShell 1.0 Released!]</ref> |
|||
Durch die Unterstützung der Exchange- und Datacenter-Verantwortlichen bei Microsoft konnte die PowerShell im Konzern etabliert werden.<ref name="SnoverCulturalBattle">[https://www.youtube.com/watch?v=3Uvq38XOark YouTube: Jeffrey Snover 2015 auf dem ''DevOps Enterprise Summit'' über ''The Cultural Battle To Remove Windows from Windows Server'']</ref> 2007 wurde PowerShell Teil von Microsofts ''Common Engineering Criteria'' für 2009, einer Liste von Kriterien, der jedes Microsoft Server-Produkt entsprechen soll. Das bedeutete effektiv, dass ab 2009 jedes Server-Produkt von Microsoft PowerShell unterstützen sollte.<ref name="PowerShellCommonCriteria">[https://blogs.technet.microsoft.com/benp/2007/11/23/powershell-to-be-added-to-common-engineering-criteria/ blogs.msdn.microsoft.com: PowerShell To Be Added to Common Engineering Criteria]</ref> Dies war der endgültige Durchbruch für PowerShell als zentrale Verwaltungs- und Automatisierungseinheit in Windows. |
|||
Die Funktionalität der PowerShell lässt sich durch sogenannte ''Snap-Ins'' erweitern, welche auf einen Schlag ganze Sätze von Cmdlets importieren und dem Benutzer zur Verfügung stellen. Mittels <code>Get-Help</code> werden Hilfeseiten zu Cmdlets angezeigt, die dem Format von [[Unix]]-[[Manpage]]s ähnlich sind. Falls Cmdlets mit dem speziellen Parameter „<code>-whatif</code>“ aufgerufen werden, wird der Benutzer darüber informiert, was passiert wäre, eine Aktion findet jedoch nicht statt. |
|||
2008 wurde [[Microsoft Windows Server 2008|Windows Server 2008]] das erste Betriebssystem, das mit PowerShell ausgeliefert wird – jedoch noch als optionale Komponente. |
|||
Neben den Cmdlets lassen sich direkt von der Kommandozeile auch herkömmliche [[Computerprogramm|Programme]], selbstdefinierte [[Funktion (Programmierung)|Funktionen]], Skripte und [[Stapelverarbeitung|Batch-Dateien]] starten, ebenso Dokumente, die beim Aufrufen mit dem dazugehörigen [[Anwendungsprogramm]] geöffnet werden. |
|||
2009 wurde PowerShell 2.0 als fester Bestandteil von [[Microsoft Windows 7|Windows 7]] und [[Microsoft Windows Server 2008 R2|Windows Server 2008 R2]] veröffentlicht.<ref name="PowerShell20RTM">[https://blogs.msdn.microsoft.com/powershell/2009/07/23/windows-powershell-2-0-rtm/ blogs.msdn.microsoft.com: Windows PowerShell 2.0 RTM]</ref> Anfang 2010 stand PowerShell 2.0 auch für ältere Betriebssysteme als optionales Update per [[Microsoft Update|Windows Update]] bereit.<ref name="PowerShell20WindowsUpdate">[https://blogs.msdn.microsoft.com/powershell/2010/06/22/windows-powershell-2-0-on-windows-update/ blogs.msdn.microsoft.com: Windows PowerShell 2.0 on Windows Update]</ref> |
|||
Die PowerShell erlaubt Zugriff auf [[Windows Management Instrumentation|WMI]]-Klassen, [[Component Object Model|COM]]-Objekte sowie auf das gesamte [[.NET|.NET-Framework]]. |
|||
=== PowerShell wird Open Source und plattformübergreifend === |
|||
Über sogenannte ''Provider'' können hierarchische Strukturen wie die [[Windows-Registrierungsdatenbank]], der Variablen-[[Namensraum]] und andere als [[Virtuelles Laufwerk|virtuelle Laufwerke]] eingebunden und wie ein [[Dateisystem]] navigiert, referenziert und bearbeitet werden, zum Beispiel „<code>Env:</code>“, „<code>HKLM:</code>“, „<code>Variable:</code>“ oder „<code>Function:</code>“. Diese werden jedoch nicht im [[Explorer (Dateimanager)|Windows Explorer]] angezeigt. |
|||
2016 verkündete Microsoft, dass PowerShell unter der [[MIT-Lizenz]] [[Open Source]] und plattformübergreifend entwickelt wird.<ref name="PowerShellOpenSourced">[https://azure.microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/ azure.microsoft.com: PowerShell is open sourced and is available on Linux]</ref> Gleichzeitig wurde ein [[GitHub]] [[Repository]] erstellt und die [[Entwicklungsstadium (Software)#Alpha-Version|Alpha]]-Version von PowerShell Version 6.0 für Windows, Linux und macOS veröffentlicht. Der Hersteller begründete diesen Schritt in seiner [[Cloud Computing|Cloud]]-Strategie. In [[Microsoft Azure]] werden nicht nur Windows-, sondern auch eine Vielzahl von Linux-Systemen bereitgestellt. Microsoft bietet PowerShell als universelles Werkzeug für alle Administratoren an, ganz gleich welches Betriebssystem oder welche Anwendung administriert werden soll. |
|||
== Aufbau == |
|||
Für den interaktiven Betrieb bietet die PowerShell eine automatische [[Befehlszeilenergänzung]] per [[Tabulator|Tabulatortaste]] für Cmdlets, Parameter, Eigenschaften sowie Datei- und Verzeichnisnamen, die bei Bedarf vom Benutzer an seine eigenen Bedürfnisse angepasst werden kann. |
|||
PowerShell wurde speziell für die Systemverwaltung und -automatisierung entworfen.<ref>{{Internetquelle |url=http://technet.microsoft.com/en-us/library/bb978526.aspx |titel=Windows PowerShell |werk=[[Microsoft TechNet]] |hrsg=Microsoft |abruf=2016-09-03 |archiv-url=https://web.archive.org/web/20071221131912/http://technet.microsoft.com/en-us/library/bb978526.aspx |archiv-datum=2007-12-21 |offline=1}}</ref> |
|||
Sie verbindet die aus [[Unix-Shell]]s bekannte Philosophie von [[Pipes und Filter]]n mit dem [[Paradigma]] der [[Objektorientierte Programmierung|objektorientierten Programmierung]]. Der Benutzer kann wie bisher einfache Befehle an einer [[Kommandozeile]] ausführen und miteinander verknüpfen oder aber auch komplexe [[Skriptsprache|Skript-Programme]] mit der eigens dafür entwickelten ''PowerShell Scripting Language'' schreiben. |
|||
Anders als bei bisher existierenden [[Objektorientierte Programmierung|objektorientierten]] Skript-[[Interpreter]]n ([[BeanShell]], [[Smalltalk (Programmiersprache)|Smalltalk]], [[Python (Programmiersprache)|Python Shell]]) ist die [[Syntax]] der PowerShell-[[Skriptsprache]], welche sich unter anderem Anleihen bei [[Perl (Programmiersprache)|Perl]], [[Unix-Shell]]s, [[SQL]] und [[C-Sharp|C#]] nimmt, darauf ausgelegt auch für den täglichen interaktiven Gebrauch als [[Kommandozeileninterpreter|Shell]] für administrative Aufgaben wie etwa Dateiverwaltung geeignet zu sein. |
|||
Die PowerShell erlaubt Zugriff auf [[Windows Management Instrumentation|WMI]]-Klassen, [[Component Object Model|COM]]-Objekte sowie auf das gesamte [[.NET Framework]]. |
|||
== Cmdlets == |
|||
=== PowerShell Engine === |
|||
Die folgende Tabelle stellt eine Auswahl der insgesamt 129 mitgelieferten Cmdlets den vergleichbaren Befehlen anderer Kommandozeileninterpreter gegenüber. |
|||
Die ''PowerShell Engine'' (auch ''Shell'', ''PowerShell Class'' oder ''PowerShell Runtime'') ist der [[Kommandozeileninterpreter]], der die Eingaben verarbeitet und damit das Herz der PowerShell. Die Engine ist eine Sammlung von [[.NET Framework|.NET]]-[[Klasse (Objektorientierung)|Klassen]], die in einer [[Dynamic Link Library|DLL]] (<code>System.Management.Automation.dll</code>) gespeichert sind. |
|||
=== PowerShell Host === |
|||
{| class="wikitable" style="width: 100%; text-align: center; font-size: smaller;" |
|||
Der ''PowerShell Host'' ist die [[Benutzerschnittstelle]] zur PowerShell Engine. In Windows steht standardmäßig die ''Windows PowerShell'' (auch ''Konsole'') (<code>powershell.exe</code>, bereitgestellt durch <code>conhost.exe</code>) und ''Windows PowerShell ISE'' (''Integrated Scripting Environment'', kurz ''ISE'') (<code>powershell_ise.exe</code>) zur Verfügung. Die ''ISE'' ist ein modernes Eingabefenster mit unter anderem integriertem Skripteditor, [[Debugger]] und [[IntelliSense]]. Beide Hosts erlauben es auch, herkömmliche Kommandozeilenanwendungen auszuführen, wie beispielsweise <code>ipconfig.exe</code>. Jedoch erlaubt die ISE keine Interaktion, wie zum Beispiel bei <code>nslookup.exe</code>. Die ISE kann durch [[Plug-in|Add-ons]] erweitert werden; eine bekannte Erweiterung ist ''ISESteroids''. |
|||
Auch Verwaltungskonsolen, wie etwa die Exchange Management Console (EMC) seit [[Microsoft Exchange Server|Exchange Server 2007]], sind ein Host. Darüber hinaus gibt es auf dem Markt weitere Hosts, wie ''PowerShell Plus'' von Idera. |
|||
Zwar nutzen alle Hosts dieselbe Engine, doch da die Implementierung unterschiedlich sein kann, ist es auch möglich, dass sich die Hosts untereinander unterschiedlich verhalten. |
|||
=== PowerShell Scripting Language (PSL) === |
|||
Die ''PowerShell Scripting Language (PSL)'' ist die [[Skriptsprache|Sprache]] um Skripte für die PowerShell Engine zu entwickeln. Ab Version 2.0 kann die Skriptsprache auch verwendet werden, um eigene Cmdlets zu erstellen. |
|||
Die PowerShell-Sprache basiert auf dem [[Portable Operating System Interface|IEEE 1003.2 POSIX Shell Standard]] und die Syntax ist an der Programmiersprache [[C-Sharp|C#]] angelehnt.<ref>Bruce Payette, Richard Siddaway: ''Windows PowerShell in Action.'' 3. Ausgabe. Manning, Shelter Island 2018, ISBN 978-1-63343-029-7, [https://livebook.manning.com/book/windows-powershell-in-action-third-edition/chapter-1/191 S. 17–18].</ref> Mit Version 5 wurde die Skriptsprache um [[Klasse (Objektorientierung)|Klassen]] erweitert.<ref>Bruce Payette, Richard Siddaway: ''Windows PowerShell in Action.'' Shelter Island 2018, S. 762.</ref> |
|||
Anders als bei bisher existierenden [[Objektorientierte Programmierung|objektorientierten]] Skript-[[Interpreter]]n ([[BeanShell]], [[Smalltalk (Programmiersprache)|Smalltalk]], [[Python (Programmiersprache)|Python Shell]]) ist die [[Syntax]] der PowerShell-Skriptsprache, welche sich unter anderem Anleihen bei [[Perl (Programmiersprache)|Perl]], [[Unix-Shell]]s, [[SQL]] und [[C]] nimmt, darauf ausgelegt, auch für den täglichen interaktiven Gebrauch als [[Kommandozeileninterpreter|Shell]] für administrative Aufgaben wie etwa Dateiverwaltung geeignet zu sein. |
|||
=== Cmdlets === |
|||
''Cmdlets'' (gesprochen ''Commandlets'') werden die Befehle in einer PowerShell-Umgebung genannt. Der Begriff soll verdeutlichen, dass es sich um sehr kleine, spezielle Befehle handelt, etwa wie in ''Befehlchen''. Im Gegensatz zu herkömmlichen Befehlen sind Cmdlets keine [[Standalone]]-Anwendungen, das heißt, sie können nicht ohne die PowerShell ausgeführt werden. Cmdlets können [[.NET Framework|.NET]]-[[Klasse (Objektorientierung)|Klassen]] oder PowerShell-Skripte sein und mit wenigen Zeilen [[Programmcode]] geschrieben werden. Cmdlets [[Parser|parsen]] Eingaben in der Regel nicht selber, stellen Fehler nicht selbst dar und geben Ergebnisse unformatiert als Objekt wieder.<ref name="CmdletOverview">[https://msdn.microsoft.com/en-us/library/ms714395(v=vs.85).aspx msdn.microsoft.com: Cmdlet Overview]</ref> Die PowerShell-Engine bzw. Standard-Cmdlets nehmen Cmdlet-Entwicklern Arbeit von Standardaufgaben ab und vereinfachen und beschleunigen die Entwicklung. Gleichzeitig wird die Nutzbarkeit und Lesbarkeit von Skripten und Befehlen durch sehr strikte und ausführliche Namenskonventionen gewährleistet. |
|||
Die Anzahl der vorinstallierten Cmdlets steigt mit jeder Version. Sie liegt in der Version 5.1 der Legacy-PowerShell bei 489 Cmdlets und 766 mitgelieferten Funktionen und in der Core-Version 6.1 bei 287 Cmdlets und 145 mitgelieferten Funktionen im Kernpaket und 1900 Cmdlets mit zusätzlichen Modulen.<ref>{{Internetquelle |url=https://docs.microsoft.com/de-de/powershell/scripting/whats-new/what-s-new-in-windows-powershell-50 |titel=Neuerungen in Windows PowerShell 5.0 |abruf=2019-01-30}}</ref><ref name=":0" /> |
|||
Cmdlets folgen dem Namensschema ''Verb-Substantiv'', also beispielsweise <code>Get-Help</code> oder <code>Set-Location</code>. Cmdlets sind durch das vorangestellte Verb ''aufgabenorientiert'', sollen genau eine spezifische Aufgabe erfüllen und nur einen Objekttyp ausgeben, wie zum Beispiel <code>Get-Process</code>, das alle laufenden Prozesse auflistet und als Objekt vom Typ <code>System.Diagnostics.Process</code> ausgibt. Das Beenden von Prozessen ist eine eigene Aufgabe und ist daher ein eigenes Cmdlet (<code>''Stop''-Process</code>). Das Auflisten von [[Windows-Systemdienst|Diensten]] gibt andere Eigenschaften als bei Prozessen aus und hat daher ein anderes Substantiv (<code>Get-''Service''</code>). Die resultierenden Objekte können über die Pipe (<code>|</code>) von anderen Cmdlets weiterverarbeitet werden. So ist es möglich, übergebene Objekte zu filtern (z. B. <code>Select-Object -Property Name,Status</code>, <code>Where-Object -Property Status -EQ -Value Stopped</code>), zu konvertieren (z. B. <code>Converto-Json</code>) oder auszugeben (z. B. <code>Out-File</code>, <code>Out-GridView</code>) (siehe auch [[#Objekte und die Pipe|Objekte und die Pipe]]). |
|||
Microsoft hat eine Liste mit erlaubten Verben veröffentlicht. Die Einhaltung der Verben wird nicht technisch erzwungen. Sie wird jedoch empfohlen, um die Bedienung zu vereinheitlichen.<ref>{{Internetquelle |url=http://msdn.microsoft.com/en-us/library/windows/desktop/ms714428(v=vs.85).aspx |titel=Approved Verbs for Windows PowerShell Commands |werk=Windows Dev Center |hrsg=Microsoft |abruf=2013-08-03 |sprache=en}}</ref> Die Liste der freigegebenen Verben kann mit <syntaxhighlight lang="powershell" inline>Get-Verb</syntaxhighlight> abgerufen werden. |
|||
Für Cmdlets können [[Alias (Unix)|Aliase]] hinterlegt werden, etwa um Kompatibilität zu alten Skripten herzustellen, das Umsteigen von anderen Systemen zu erleichtern oder einfach Befehle mit weniger Buchstaben ausführen zu können. Einige dieser Aliase werden bereits durch Module vordefiniert. So wird beispielsweise das Cmdlet <code>Set-Location</code> verwendet, um das aktuelle Verzeichnis des Hosts zu definieren, es sind jedoch auch die Aliase <code>sl</code>, <code>cd</code> und <code>chdir</code> verwendbar. |
|||
Die folgende Tabelle stellt eine Auswahl von Standard-Cmdlets mit Aliasen und vergleichbaren Befehlen anderer Kommandozeileninterpreter gegenüber. |
|||
{| class="wikitable sortable" |
|||
|- |
|- |
||
! |
!PowerShell<br />Cmdlet |
||
! |
!PowerShell<br />Version |
||
!PowerShell<br />Alias |
|||
![[cmd.exe]] bzw. [[command.com]]<br/>(MS-DOS, Windows, OS/2, etc.) |
|||
![[ |
![[cmd.exe]]<br /> |
||
![[Unix-Shell]] |
|||
!Beschreibung |
!Beschreibung |
||
|- |
|||
|Get-Help |
|||
|1.0<ref name="Yoshizawa" /> |
|||
|help, man |
|||
|help |
|||
|[[Manpage|man]] |
|||
|Hilfe zu Befehlen |
|||
|- |
|||
|Get-Command |
|||
|1.0<ref name="Yoshizawa" /> |
|||
|gcm |
|||
| |
|||
| |
|||
|Listet alle im derzeitigen Kontext verfügbaren Befehle und Aliase auf. |
|||
|- |
|||
|Get-Alias |
|||
|1.0<ref name="Yoshizawa" /> |
|||
|gal |
|||
| |
|||
|alias |
|||
|Listet Aliase für Befehle auf. |
|||
|- |
|- |
||
|Get-Location |
|Get-Location |
||
|1.0<ref name="Yoshizawa" /> |
|||
|gl, pwd |
|gl, pwd |
||
|cd |
|cd |
||
|[[ |
|[[Pwd (Unix)|pwd]] |
||
|Ausgabe des aktuellen Verzeichnisses |
|Ausgabe des aktuellen Verzeichnisses |
||
|- |
|- |
||
|Set-Location |
|Set-Location |
||
|1.0<ref name="Yoshizawa" /> |
|||
|sl, cd, chdir |
|sl, cd, chdir |
||
|cd, chdir |
|cd, chdir |
||
Zeile 65: | Zeile 130: | ||
|- |
|- |
||
|Clear-Host |
|Clear-Host |
||
|3.0<ref>{{Internetquelle |url=https://technet.microsoft.com/en-us/library/hh849695%28v=wps.620%29.aspx |titel=Windows PowerShell Core Cmdlets |titelerg=Windows PowerShell 3.0 |werk=Microsoft Developer Network |hrsg=Microsoft |abruf=2016-09-03}}</ref> |
|||
|cls, clear |
|cls, clear |
||
|cls |
|cls |
||
|clear |
|clear |
||
|Löschen |
|Löschen der Ausgabe |
||
|- |
|- |
||
|Copy-Item |
|Copy-Item |
||
|1.0<ref name="Yoshizawa" /> |
|||
|cpi, copy, cp |
|cpi, copy, cp |
||
|copy |
|copy |
||
|[[ |
|[[Cp (Unix)|cp]] |
||
|Kopieren einer oder mehrerer Dateien / eines ganzen Verzeichnisbaums |
|Kopieren einer oder mehrerer Dateien / eines ganzen Verzeichnisbaums |
||
|- |
|||
|Get-Help |
|||
|help, man |
|||
|help |
|||
|[[Manpage|man]] |
|||
|Hilfe zu Befehlen |
|||
|- |
|- |
||
|Remove-Item |
|Remove-Item |
||
|1.0<ref name="Yoshizawa" /> |
|||
|ri, del, rmdir, rd, rm |
|||
|ri, del, erase, rmdir, rd, rm |
|||
|del, rmdir, rd |
|del, rmdir, rd |
||
|[[Rm (Unix)|rm]], rmdir |
|[[Rm (Unix)|rm]], rmdir |
||
Zeile 89: | Zeile 151: | ||
|- |
|- |
||
|Rename-Item |
|Rename-Item |
||
|1.0<ref name="Yoshizawa" /> |
|||
|rni, ren |
|rni, ren |
||
|ren |
|ren |
||
|[[ |
|[[Mv (Unix)|mv]] |
||
|Umbenennen einer Datei / eines Verzeichnisses |
|Umbenennen einer Datei / eines Verzeichnisses |
||
|- |
|- |
||
|Move-Item |
|Move-Item |
||
|1.0<ref name="Yoshizawa" /> |
|||
|mi, move, mv |
|mi, move, mv |
||
|move |
|move |
||
Zeile 101: | Zeile 165: | ||
|- |
|- |
||
|Get-ChildItem |
|Get-ChildItem |
||
|1.0<ref name="Yoshizawa" /> |
|||
|gci, dir, ls |
|gci, dir, ls |
||
|dir |
|dir |
||
|[[ |
|[[Ls (Unix)|ls]] |
||
|Liste aller Dateien / Verzeichnisse im (aktuellen) Verzeichnis |
|Liste aller Dateien / Verzeichnisse im (aktuellen) Verzeichnis |
||
|- |
|- |
||
|Write- |
|Write-Host |
||
|1.0<ref name="Yoshizawa" /> |
|||
|echo, write |
|echo, write |
||
|[[Echo (Informatik)|echo]] |
|[[Echo (Informatik)|echo]] |
||
|echo |
|echo |
||
|Ausgabe von Zeichenketten, Variablen etc. |
|Ausgabe von Zeichenketten, Variablen etc. in der Konsole |
||
|- |
|- |
||
|Pop-Location |
|Pop-Location |
||
|1.0<ref name="Yoshizawa" /> |
|||
|popd |
|popd |
||
|popd |
|popd |
||
|popd |
|popd |
||
|In Verzeichnis wechseln, |
|In Verzeichnis wechseln, das zuletzt auf dem Stack abgelegt wurde |
||
|- |
|- |
||
|Push-Location |
|Push-Location |
||
|1.0<ref name="Yoshizawa" /> |
|||
|pushd |
|pushd |
||
|pushd |
|pushd |
||
Zeile 125: | Zeile 193: | ||
|- |
|- |
||
|Set-Variable |
|Set-Variable |
||
|1.0<ref name="Yoshizawa" /> |
|||
|sv, set |
|sv, set |
||
|set |
|set |
||
|set |
|set |
||
|Wert einer Variable setzen / Variable anlegen |
|Wert einer Variable setzen / Variable anlegen |
||
|- |
|||
|Start-Process |
|||
|2.0<ref name="Stanek">{{Internetquelle |url=https://technet.microsoft.com/en-us/magazine/ff714569 |titel=Overview of Cmdlets Available in Windows PowerShell |werk=Microsoft TechNet |hrsg=Microsoft |abruf=2016-09-03}}</ref> |
|||
|saps |
|||
|start |
|||
| |
|||
|Startet ein Programm im eigenen Fenster |
|||
|- |
|- |
||
|Get-Content |
|Get-Content |
||
|1.0<ref name="Yoshizawa">{{Internetquelle |autor=Tomoaki Yoshizawa |url=https://social.technet.microsoft.com/wiki/contents/articles/13769.powershell-1-0-cmdlets.aspx |titel=PowerShell 1.0 Cmdlets |werk=Microsoft TechNet |abruf=2016-09-03}}</ref> |
|||
|gc, type, cat |
|gc, type, cat |
||
|type |
|type |
||
|cat |
|cat |
||
|Ausgabe einer Datei |
|Ausgabe einer Datei |
||
|- |
|||
|Select-String |
|||
|1.0<ref name="Yoshizawa" /> |
|||
|sls |
|||
|find, findstr |
|||
|[[grep]] |
|||
|Suche und Filterung definierter Zeichenketten |
|||
|- |
|- |
||
|Get-Process |
|Get-Process |
||
|1.0<ref name="Yoshizawa" /> |
|||
|gps, ps |
|gps, ps |
||
|tlist,<ref name="NT4" /><ref name="tlist" /> tasklist<ref name="tasklist" /> |
|||
|tasklist |
|||
|[[Ps (Unix)|ps]] |
|[[Ps (Unix)|ps]] |
||
|Liste aller momentan laufenden Prozesse |
|Liste aller momentan laufenden Prozesse |
||
|- |
|- |
||
|Stop-Process |
|Stop-Process |
||
|1.0<ref name="Yoshizawa" /> |
|||
|spps, kill |
|spps, kill |
||
|kill,<ref name="NT4" /><ref name="kill" /> taskkill<ref name="taskkill" /> |
|||
|taskkill |
|||
|[[ |
|[[Kill (Unix)|kill]] |
||
|Beenden eines laufenden Prozesses |
|Beenden eines laufenden Prozesses |
||
|- |
|||
|Stop-Computer |
|||
|2.0<ref name="Stanek" /> |
|||
| |
|||
|shutdown |
|||
|shutdown, poweroff |
|||
|Herunterfahren des Rechners |
|||
|- |
|||
|Restart-Computer |
|||
|2.0<ref name="Stanek" /> |
|||
| |
|||
|shutdown -r |
|||
|reboot, shutdown -r |
|||
|Neustart des Rechners |
|||
|- |
|- |
||
|Tee-Object |
|Tee-Object |
||
|1.0<ref name="Yoshizawa" /> |
|||
|tee |
|tee |
||
| |
|||
|''nicht vorhanden'' |
|||
|[[ |
|[[Tee (Unix)|tee]] |
||
|[[Standard-Datenströme#Standardeingabe (stdin)|Standardeingabe]] in eine Datei oder Variable umleiten und entlang der [[Pipe (Informatik)|Pipeline]] weiterreichen ([[Standard-Datenströme#Standardausgabe (stdout)|Standardausgabe]]) |
|[[Standard-Datenströme#Standardeingabe (stdin)|Standardeingabe]] in eine Datei oder Variable umleiten und entlang der [[Pipe (Informatik)|Pipeline]] weiterreichen ([[Standard-Datenströme#Standardausgabe (stdout)|Standardausgabe]]) |
||
|- |
|||
|Get-NetIPAddress |
|||
|3.0<ref>{{Internetquelle |url=https://technet.microsoft.com/de-de/library/hh826123%28v=wps.620%29.aspx |titel=Net TCP/IP Cmdlets in Windows PowerShell |titelerg=Windows Server 2012 and Windows 8 |werk=Microsoft Developer Network |hrsg=Microsoft |abruf=2016-09-03}}</ref> |
|||
|gip |
|||
|ipconfig |
|||
|ifconfig |
|||
|Listet die Netzwerkschnittstellen mit Konfigurationsinformationen auf |
|||
|- |
|||
|Get-Acl |
|||
|1.0<ref name="Yoshizawa" /> |
|||
| |
|||
| |
|||
|acl |
|||
|Listet die Zugriffsberechtigungen eines Ordners oder Dokuments auf. |
|||
|- |
|||
|Get-Member |
|||
|1.0<ref name="Yoshizawa" /> |
|||
|gm |
|||
| |
|||
| |
|||
|Listet die Mitglieder (Member-Variablen) eines Objektes auf. |
|||
|- |
|||
|Get-PSSnapin |
|||
|1.0<ref name="Yoshizawa" /> |
|||
|gsnp |
|||
| |
|||
| |
|||
|Listet die aktiven PowerShell-Erweiterungen auf. |
|||
|- |
|||
|Export-Console |
|||
|1.0<ref name="Yoshizawa" /> |
|||
| |
|||
| |
|||
|export |
|||
|Exportiert die aktive Konfiguration der Konsole in eine Datei.<br />Eine neue PowerShell-Instanz kann diese Konfiguration über den Parameter <code>-psconsolefile <String></code> beim Start laden. |
|||
|} |
|} |
||
Parameter werden nach dem Cmdlet mit <code>-Parametername [Wert]</code> angegeben. Ein Parameter kann unterschiedliche Eigenschaften besitzen, so kann er beispielsweise einen Standardwert haben, erforderlich oder positionsbezogen sein oder Werte aus der [[Pipe (Informatik)|Pipe]] akzeptieren. Welche Parameter für ein Cmdlet verfügbar sind und welche Eigenschaften sie besitzen, kann mit <code>Get-Help</code> geprüft werden (z. B. <code>Get-Help -Name Get-NetIPAddress -Parameter *</code>). |
|||
Zusätzlich zu Cmdlet-spezifischen Parametern gibt es auch sogenannte ''Common Parameter'', also allgemein verfügbare Parameter. Dazu zählt <code>-Verbose</code> zur Ausgabe von Detailinformationen, <code>-ErrorAction</code>, um festzulegen, wie bei einem Fehler verfahren werden soll oder <code>-WhatIf</code>, um sich ausgeben zu lassen, was passieren ''würde'', wenn man den Befehl ausführt, ohne dass tatsächlich Änderungen gemacht werden. |
|||
Module sind die bevorzugte Art, um Cmdlets zu veröffentlichen und in PowerShell zu laden. Module bestehen aus dem Cmdlet-Programmcode (als PowerShell-Skript oder [[.NET Framework|.NET]]-Klasse) und einem ''Manifest'', das den Inhalt des Moduls beschreibt.<ref name="UnderstandingPowerShellModule">[https://msdn.microsoft.com/en-us/library/dd878324(v=vs.85).aspx msdn.microsoft.com: Understanding a Windows PowerShell Module]</ref> In PowerShell 1.0 war es ausschließlich über '''PSSnapins''' (Snap-ins) möglich, Cmdlets zu laden. Dies wurde jedoch durch die Funktion der Module ersetzt.<ref name="AboutPSSnapins">[https://msdn.microsoft.com/en-us/powershell/reference/5.0/microsoft.powershell.core/about/about_pssnapins msdn.microsoft.com PowerShell Referenz: about_PSSnapins]</ref> |
|||
=== PowerShell Provider === |
|||
''PowerShell Provider'' (auch ''PSProvider'') bieten den Zugriff auf Daten und Komponenten (Namensräume), die sonst nicht einfach über den Host abrufbar wären, und präsentieren die Daten in einem konsistenten Format als ''Laufwerke''. Das bekannteste Beispiel dafür ist das [[Dateisystem]], welches eine Partition als Laufwerk ''C'' darstellt. Es sind jedoch auch weitere Provider möglich, wie etwa Variablen, die [[Registrierungsdatenbank|Registry]], [[Active Directory]] und der Zertifikatsspeicher. In allen Laufwerken (zum Beispiel <code>C:</code>, <code>D:</code>, <code>Env:</code>, <code>HKLM:</code> oder <code>Cert:</code>) kann gleichermaßen navigiert oder Elemente verarbeitet werden (<code>Set-Location</code>, <code>Get-ChildItem</code>, <code>Remove-Item</code>, …). |
|||
==== Liste von Providern ==== |
|||
Folgende Liste zeigt einige der Standardprovider in PowerShell. |
|||
{| class="wikitable sortable" |
|||
|- |
|||
! Name !! Typ !! Aufgabe |
|||
|- |
|||
| Alias || Container || Bindet ein [[logisches Laufwerk]] mit dem Namen „Alias:“ ein. Über dieses Laufwerk lassen sich als Schlüssel-Wert Paare definierte Alias (etwa mit <syntaxhighlight lang="powershell" inline>Get-ChildItem Alias:</syntaxhighlight>) abrufen. |
|||
|- |
|||
| Environment || Container || Bindet ein logisches Laufwerk mit dem Namen „env:“ ein. Über dieses Laufwerk lassen sich die [[Umgebungsvariable]]n abfragen. |
|||
|- |
|||
| FileSystem || Navigation || Über den FileSystem Provider wird der Zugriff auf das Dateisystem ermöglicht. Über den FileSystem-Provider können Laufwerke, Wechseldatenträger, Netzlaufwerke, u. ä., sowie die darauf befindlichen Dateien und Ordner zugegriffen werden. Laufwerke werden dabei jedoch nicht als logisches Laufwerk in PowerShell integriert, sondern als Referenz im Function-Provider hinterlegt. |
|||
|- |
|||
| Function || Container || Verwaltet Funktionen, welche mit <syntaxhighlight lang="powershell" inline>New-Item</syntaxhighlight> erstellt oder in einem PowerShell-Skript deklariert wurden. |
|||
|- |
|||
| Registry || Navigation || Ermöglicht unter Windows den Zugriff auf die [[Registrierungsdatenbank]]. Standardmäßig werden die Laufwerke „HKLM:“ (für <code>HKEY_LOCAL_MACHINE</code>) und „HKLU:“ (für <code>HKEY_LOCAL_USER</code>) erstellt. Weitere Laufwerke lassen sich bei Bedarf mit <syntaxhighlight lang="powershell" inline>New-PSDrive</syntaxhighlight> (z. B. <syntaxhighlight lang="powershell" inline>New-PSDrive -name HKU -psprovider Registry -root HKEY_USERS</syntaxhighlight>) anlegen. |
|||
|- |
|||
| Variable || Container || Verwaltet die im PowerShell-Host erstellten Variablen und deren Werte und bindet diese als logisches Laufwerk „Variable:“ ein. |
|||
|- |
|||
| Certificate || Navigation || Verwaltet die Sicherheitszertifikate des Systems und bindet sich als logisches Laufwerk „Cert:“ ein. Der Certificate-Provider wird von <syntaxhighlight lang="powershell" inline>Get-PSProvider</syntaxhighlight> nicht aufgelistet. |
|||
|} |
|||
== Versionen == |
|||
=== Windows PowerShell 1.0 === |
|||
Die erste Version von PowerShell erscheint 2006 als ein Grundgerüst mit den wichtigsten Funktionen der PowerShell. Insbesondere der Kommandozeileninterpreter ist sehr mächtig, so gibt es bereits die objektbasierte Pipe, eine eigene Skriptsprache und ein Sicherheitsmodell. PowerShell kann sogenannte Namensräume wie das Dateisystem, den Zertifikatsspeicher oder die Registry ansprechen. Cmdlets können ausschließlich in .NET geschrieben werden, Skripte können auf entfernten Computern nur per [[Windows Management Instrumentation|WMI]] ausgeführt werden, die verfügbare Konsole ist sehr einfach gehalten. |
|||
=== Windows PowerShell 2.0 === |
|||
2009 wird mit PowerShell 2.0 die Erstellung von neuen Cmdlets drastisch vereinfacht. Cmdlets können erstmals auch als Skripte geschrieben werden. Auch die Hilfe, basierend auf Kommentaren in Cmdlets, wird eingeführt. Cmdlets können als Module zusammengefasst werden. Außerdem wird die ''PowerShell ISE'' eingeführt, eine leistungsfähige Konsole mit eingebautem Skripteditor. Zur Verwaltung von entfernten Computern wird ''PowerShell Remoting'' eingeführt. Zusätzlich kann PowerShell nun Jobs erstellen, die im Hintergrund abgearbeitet werden. |
|||
=== Windows PowerShell 3.0 === |
|||
2012 wird die PowerShell in der Version 3.0 ausgereifter und benutzerfreundlicher. ''Workflows'' auf Basis der [[Windows Workflow Foundation]] werden eingeführt, womit es mit geringen Mitteln möglich ist, Aufgaben parallel erledigen zu lassen. Erstmals wird [[Common Information Model|CIM]] und [[JavaScript Object Notation|JSON]] unterstützt. Im System verfügbare Module werden automatisch geladen und stehen dem Administrator somit sofort zur Verfügung. |
|||
=== Windows PowerShell 4.0 === |
|||
Mit PowerShell 4.0 wird 2013 Desired State Configuration (DSC) eingeführt, eine [[Deklarative Programmierung|deklarative]] Sprache zur Konfiguration von Systemen. |
|||
=== Windows PowerShell 5.0 === |
|||
2015 wird in PowerShell 5.0 die Desired State Configuration (DSC) deutlich erweitert und verbessert. Außerdem werden [[Klasse (Objektorientierung)|Klassen]], welche es erlauben Skripte formaler entwickeln zu lassen, und ''Oneget'', eine [[Paketverwaltung]] für PowerShell, eingeführt. In der ''PowerShell ISE'' können Skripte nun auch in Sitzungen auf entfernten Computern geändert werden. |
|||
=== Windows PowerShell 5.1 === |
|||
PowerShell 5.1, die aktuelle und voraussichtlich letzte Windows PowerShell Version, erscheint 2016. Sie wird im Rahmen von Windows unterstützt, jedoch nicht mehr aktiv weiterentwickelt. PowerShell 5.1 bleibt auch auf [[Windows Server 2019]] die vorinstallierte PowerShell-Version.<ref>{{Internetquelle |url=https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_windows_powershell_5.1 |titel=about_Windows_PowerShell_5.1 |abruf=2019-01-30 |sprache=en-US}}</ref> |
|||
Mit PowerShell 5.1 ist die erste Core Version der PowerShell verfügbar und diese läuft nur auf Windows Nano Server 2016.<ref>{{Internetquelle |url=https://docs.microsoft.com/de-de/windows-server/get-started/powershell-on-nano-server |titel=PowerShell unter Nano Server |abruf=2019-01-30}}</ref> |
|||
=== PowerShell Core 6 === |
|||
PowerShell 6.0 ist die erste plattformübergreifende, quelloffene Version der PowerShell und läuft auf Windows, macOS und Linux. Die Entwicklung wird 2016 angekündigt, bevor 2018 das erste [[Entwicklungsstadium (Software)#Release|GA]]-Release erscheint. Sie basiert auf .NET Core 2.0 und hat einen stark eingeschränkten Funktionsumfang gegenüber der PowerShell-Version 5.1.<ref>{{Internetquelle |url=https://docs.microsoft.com/de-de/powershell/scripting/whats-new/what-s-new-in-powershell-core-60 |titel=Neuigkeiten in PowerShell Core 6.0 |abruf=2019-01-30}}</ref> |
|||
PowerShell 6.1 basiert auf .NET Core 2.1<ref>{{Internetquelle |url=https://docs.microsoft.com/de-de/dotnet/core/about |titel=Weitere Informationen zu .NET Core |werk= |hrsg= |datum= |sprache=de-DE |abruf=2019-01-30}}</ref> und erweitert mit der Unterstützung vieler existierende Module den Funktionsumfang beträchtlich. Auf Windows werden nun 432 Cmdlets und mitgelieferte Funktionen unterstützt (PowerShell 5.1: 1264 Cmdlets und Funktionen), sowie weitere 1468 Cmdlets über externe Module.<ref name=":0">{{Internetquelle |url=https://docs.microsoft.com/de-de/powershell/scripting/whats-new/what-s-new-in-powershell-core-61 |titel=Neuigkeiten in PowerShell Core 6.1 |abruf=2019-01-30}}</ref> |
|||
Der Kommandozeilenname von PowerShell 6 wurde von powershell.exe in pwsh.exe umbenannt, dies erlaubt eine leichtere Unterscheidung beim Aufruf der Powershell, wenn sowohl PowerShell Core, als auch die klassische Powershell installiert sind.<ref>https://docs.microsoft.com/de-de/powershell/scripting/whats-new/what-s-new-in-powershell-core-60?view=powershell-7#renamed-powershellexe-to-pwshexe</ref> |
|||
=== PowerShell 7 === |
|||
Mit PowerShell 7<ref>{{Internetquelle |url=https://devblogs.microsoft.com/powershell/announcing-powershell-7-0/ |titel=Announcing PowerShell 7.0 |datum=2020-03-04 |abruf=2020-03-30 |sprache=en-US}}</ref> wird 2020 sowohl das Präfix ''Windows'' wie auch das Suffix ''Core'' entfernt und kennzeichnet damit, dass es der Nachfolger der Windows PowerShell 5.1, wie von PowerShell Core 6 ist. Insbesondere die Kompatibilität zu in Windows mitgelieferten PowerShell-Modulen wurde verbessert. PowerShell 7 basiert auf [[.NET 5]], worauf auch der Supportlebenszyklus angepasst wurde.<ref>{{Internetquelle |url=https://aka.ms/pslifecycle |titel=Supportlebenszyklus von PowerShell |datum=2020-11-11 |abruf=2021-01-16}}</ref> |
|||
== Objekte und die Pipe == |
|||
Andere Kommandozeileninterpreter wie [[Cmd.exe]], [[Bash (Shell)|Bash]] oder [[Digital Command Language|DCL]] sind textbasiert, wohingegen PowerShell mit Objekten arbeitet. Objekte können Eigenschaften (''Properties''), Methoden (''Methods'') und Ereignisse (''Events'') enthalten. |
|||
<code>Get-Member</code> zeigt den Typ sowie die Eigenschaften und Methoden von Objekten. |
|||
Für die Systemverwaltung/Administration bedeutet dies, dass Ergebnisse von Befehlen nicht mehr als Text (unstrukturierte Daten), sondern Objekte (strukturierte Daten) vorliegen. Dies wirkt sich auch auf die [[Pipe (Informatik)|Pipe]] aus. |
|||
Die Pipe (<code>|</code>) in textbasierten Kommandozeileninterpretern verbindet die Standardausgabe <code>stdout</code> mit der Standardeingabe <code>stdin</code> des darauffolgenden Befehls. In PowerShell werden Daten in der Pipe abgelegt und die Pipe muss die Daten an das darauffolgende Cmdlet binden. Ob und wie Eingaben von einer Pipe erlaubt sind, entscheidet jedes Cmdlet für jeden Parameter selbst. Das heißt, die Pipe muss prüfen, ob der Folgebefehl das Binden an einen Parameter erlaubt. Dabei wird zwischen zwei Arten von Bindungen unterschieden: <code>ByValue</code> oder <code>ByPropertyName</code>. Bei <code>ByValue</code> muss der Objekttyp in der Pipe mit dem geforderten Objekttyp übereinstimmen. Bei <code>ByPropertyName</code> muss der Name einer Eigenschaft des Objekts mit dem Namen des Parameters des Folgebefehls übereinstimmen. <code>ByValue</code> wird <code>ByPropertyName</code> gegenüber bevorzugt. |
|||
Arbeitet man mit herkömmlichen Konsolenanwendungen in einem PowerShell Host wird der Standardoutput <code>stdout</code> in ein Objekt des Typs <code>String</code> umgewandelt. |
|||
Dieses Modell ist anfangs komplex, jedoch ergeben sich dadurch in der Praxis auch Vorteile beim Filtern und Verarbeiten von Informationen, wie folgende Beispiele verdeutlichen sollen. |
|||
Beispiel 1: Es sollen alle gestoppten Dienste eines entfernten Computers gestartet werden, mit einer Ausgabe, welche Dienste gestartet wurden. |
|||
<syntaxhighlight lang="powershell"> |
|||
# Listet alle Dienste auf einem entfernten Computer auf |
|||
# Filtert die zurückgegebene Dienste nach denen, die gestoppt sind |
|||
# Startet all diese Dienste und gibt die verarbeiteten Objekte an die Pipeline weiter (-PassThru) |
|||
# Gibt die Eigenschaften MachineName, DisplayName und Status der gestarteten Dienste aus |
|||
Get-Service -ComputerName Server01 | Where-Object -Property Status -EQ -Value Stopped | Start-Service -PassThru | Select-Object -Property MachineName, DisplayName, Status |
|||
</syntaxhighlight> |
|||
Beispiel 2: Auf dem lokalen Computer sollen die 10 Prozesse von Microsoft mit der höchsten Arbeitsspeichernutzung (in [[Megabyte]]) in absteigender Reihenfolge in einer [[CSV (Dateiformat)|CSV]]-Datei abgespeichert werden. |
|||
<syntaxhighlight lang="powershell"> |
|||
# Listet alle gestarteten Prozesse auf dem lokalen Computer auf |
|||
# Filtert nach Prozessen der Firma Microsoft |
|||
# Sortiert nach Arbeitsspeichernutzung (WorkingSet64) absteigend (-Descending) |
|||
# Filtert auf die Eigenschaften ProcessName und MemoryUsageMB, wobei MemoryUsageMB ein ''Custom Property'' ist, das zur Laufzeit die bestehende Eigenschaft WorkingSet64 in MB und auf ganze Zahlen gerundet darstellt |
|||
# Filtert auf die ersten 10 Objekte |
|||
# Das Objekt wird in ein CSV-Format umgewandelt |
|||
# und in einer Datei gespeichert |
|||
Get-Process | Where-Object -Property Company -EQ -Value 'Microsoft Corporation' | Sort-Object -Property WorkingSet64 -Descending | Select-Object ProcessName,@{Name='MemoryUsageMB';Expression={[math]::round($PSItem.WorkingSet64/1MB,0)}} | Select-Object -First 10 | ConvertTo-Csv | Out-File -FilePath $env:TEMP\TopProcesses.csv |
|||
</syntaxhighlight> |
|||
PowerShell arbeitet bei Objekten mit einer [[Dynamische Typisierung|dynamischen Typisierung]]. Dabei kommt ein erweitertes Typsystem ([[Englische Sprache|englisch]]: ''{{lang|en|extended type system}}'', ''ETS'') zum Einsatz, bei dem .NET-Objekte in der [[Klasse (Objektorientierung)|Klasse]] <syntaxhighlight lang="csharp" inline>PSObject</syntaxhighlight> gekapselt werden. <syntaxhighlight lang="csharp" inline>PSObject</syntaxhighlight> stellt hierbei die Basisklasse für PowerShell-Objekte dar. <syntaxhighlight lang="csharp" inline>PSObject</syntaxhighlight> entspricht damit einer [[Monade (Informatik)|Monade]]. |
|||
{| |
|||
|valign="top"| In C#: |
|||
<syntaxhighlight lang="csharp"> |
|||
using System; |
|||
using System.Management.Automation; |
|||
namespace PowerShell |
|||
{ |
|||
public class PSObjectExample |
|||
{ |
|||
public void Main() |
|||
{ |
|||
var time = DateTime.UtcNow; |
|||
var powerTime = new PSObject(time); |
|||
} |
|||
} |
|||
} |
|||
</syntaxhighlight> |
|||
|valign="top"| In PowerShell: |
|||
<syntaxhighlight lang="powershell"> |
|||
# Aufruf einer statischen Methode mit [ClassName]::Method |
|||
# Variable $time ist explizit typisiert |
|||
[System.DateTime]$time = [System.DateTime]::UtcNow |
|||
# explizites Typecasting nach PSObject |
|||
# Variable $powerTime ist implizit typisiert |
|||
$powerTime = [System.Management.Automation.PSObject]$time |
|||
# Aufruf eines Konstruktors |
|||
$powerTime = New-Object System.Management.Automation.PSObject($time) |
|||
</syntaxhighlight> |
|||
|} |
|||
PowerShell bietet implizite Typkonvertierung. Dabei kommen Typkonverter zum Einsatz, von denen einige vorgegeben sind: |
|||
{| class="wikitable sortable" |
|||
|- |
|||
! Typ !! Konvertiert nach || Methode |
|||
|- |
|||
| null || String || gibt <syntaxhighlight lang="csharp" inline>String.Empty</syntaxhighlight> zurück |
|||
|- |
|||
| null || Char || gibt <syntaxhighlight lang="csharp" inline>'\0'</syntaxhighlight> zurück |
|||
|- |
|||
| null || Numeric || gibt <syntaxhighlight lang="csharp" inline>0</syntaxhighlight> zurück |
|||
|- |
|||
| null || Boolean || gibt <syntaxhighlight lang="csharp" inline>false</syntaxhighlight> zurück |
|||
|- |
|||
| null || Nullable<T> || gibt <syntaxhighlight lang="csharp" inline>null</syntaxhighlight> zurück |
|||
|- |
|||
| null || Objektreferenz || gibt <syntaxhighlight lang="csharp" inline>null</syntaxhighlight> zurück |
|||
|- |
|||
| Klasse || Basisklasse || Boxing der Klasse auf die Basisklasse |
|||
|- |
|||
| object || void || gibt <syntaxhighlight lang="csharp" inline>AutomationNull.Value</syntaxhighlight> zurück |
|||
|- |
|||
| object || String || gibt <syntaxhighlight lang="csharp" inline>value.ToString()</syntaxhighlight> zurück |
|||
|- |
|||
| object || Boolean || gibt das Ergebnis von <syntaxhighlight lang="csharp" inline>LanguagePrimitives.IsTrue(value)</syntaxhighlight> zurück |
|||
|- |
|||
| object || PSObject || gibt <syntaxhighlight lang="csharp" inline>PSObject.AsPSObject(value)</syntaxhighlight> zurück |
|||
|- |
|||
| object || XMLDocument || ruft die <syntaxhighlight lang="csharp" inline>value.ToString()</syntaxhighlight>-Methode auf und übergibt das Ergebnis dem XMLDocument Konstruktor |
|||
|- |
|||
| object || Nullable<T> || das Objekt wird mit <syntaxhighlight lang="csharp" inline>(T)value</syntaxhighlight> konvertiert und als Nullable-[[Monade (Informatik)|Monade]] zurückgegeben |
|||
|- |
|||
| Array || Array || Konvertierung der einzelnen Array-Elemente |
|||
|- |
|||
| IDictionary || Hashtable || gibt <syntaxhighlight lang="csharp" inline>new Hashtable(value)</syntaxhighlight> zurück |
|||
|- |
|||
| String || Char[] || gibt <syntaxhighlight lang="csharp" inline>value.ToCharArray()</syntaxhighlight> zurück |
|||
|- |
|||
| String || RegEx || gibt <syntaxhighlight lang="csharp" inline>new RegEx(value)</syntaxhighlight> zurück |
|||
|- |
|||
| String || Type || Deserialisierung über <syntaxhighlight lang="csharp" inline>RunSpaceConfiguration.Assemblies</syntaxhighlight> |
|||
|- |
|||
| String || Numeric || <syntaxhighlight lang="csharp" inline>0</syntaxhighlight> für <syntaxhighlight lang="csharp" inline>String.Empty</syntaxhighlight>. Versucht den Wert mit <syntaxhighlight lang="csharp" inline>Culture.InvariantCulture</syntaxhighlight> zu parsen. |
|||
|- |
|||
| Integer || System.Enum || Liefert den Enum-Wert zurück, der dem Integer zugewiesen ist. <syntaxhighlight lang="csharp" inline>throw new PSInvalidCastException()</syntaxhighlight> falls das nicht möglich ist. |
|||
|} |
|||
== Skripte == |
|||
PowerShell-Skripte können in einer Skript-Datei zusammengefasst werden. Skript-Dateien enthalten Funktionen mit zugehöriger Beschreibung in einem Kommentarblock sowie Variablen und Befehle. Skript-Dateien haben die Endung <code>.ps1</code> und werden mit dem Befehl <code>.</code>, gefolgt vom vollständigen Namen der Datei geladen und verarbeitet. |
|||
; Beispiel |
|||
<syntaxhighlight lang="powershell"> |
|||
<# |
|||
.SYNOPSIS |
|||
Hello World Application. |
|||
.DESCRIPTION |
|||
This script is a more complex Hello World function that intends to show some of the syntax of PowerShell. |
|||
To use it, write ". ./Write-Hello.ps1" (dot, space, filename) into your PowerShell first, so that the script gets loaded. |
|||
.NOTES |
|||
File Name: Write-Hello.ps1 |
|||
.EXAMPLE |
|||
Write-Hello |
|||
Hello World! |
|||
.EXAMPLE |
|||
Write-Hello "World" |
|||
Hello World! |
|||
.EXAMPLE |
|||
greet "World" |
|||
Hello World! |
|||
.EXAMPLE |
|||
Write-Hello -Name "World" |
|||
Hello World! |
|||
.EXAMPLE |
|||
"World" | Write-Hello |
|||
Hello World! |
|||
.EXAMPLE |
|||
@("Jack", "Jill") | Write-Hello |
|||
Hello Jack! |
|||
Hello Jill! |
|||
.ALIAS |
|||
greet |
|||
.LINK |
|||
http://de.wikipedia.org/wiki/PowerShell |
|||
.INPUTTYPE |
|||
Takes a name of type [string]. |
|||
.RETURNVALUE |
|||
Output a greeting of type [string]. |
|||
.PARAMETER Name |
|||
A list of names of the persons to greet. Greets the world by default. |
|||
#> |
|||
function Write-Hello |
|||
{ |
|||
[CmdletBinding()] |
|||
param( |
|||
# get name parameter from the pipeline or as a parameter |
|||
[Parameter(Mandatory = $False, Position = 0, ValueFromPipeline = $True, HelpMessage = "The name to greet.")] |
|||
[string]$Name = "World" |
|||
) |
|||
begin { |
|||
# load assemblies from Global Assembly Cache (deprecated method) |
|||
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Exception") |
|||
# cancel the execution if an error occurs |
|||
$ErrorActionPreference = "Stop" |
|||
} |
|||
# process once for every input that was given |
|||
process { |
|||
try { |
|||
if($Name -eq "Error") { |
|||
throw New-Object System.Exception("The name must not be 'Error'.") |
|||
} |
|||
} |
|||
catch [System.Exception] { |
|||
Write-Error $_ |
|||
} |
|||
# process the request |
|||
[string]$Greeting = [string]::Format("Hello {0}!", $Name) |
|||
# outputs a string object to the PowerShell pipeline |
|||
# note: using write-host calls .ToString() method on the returned object |
|||
Write-Output $Greeting |
|||
} |
|||
end { |
|||
} |
|||
} |
|||
# setting an alias |
|||
Set-Alias greet Write-Hello |
|||
</syntaxhighlight> |
|||
== Beispiele == |
== Beispiele == |
||
Gib die Zeichenfolge [[Hallo-Welt-Programm|"Hallo Welt!"]] auf der [[Kommandozeile|Konsole]] aus: |
|||
<syntaxhighlight lang="powershell"> |
|||
Write-Host "Hallo Welt!" |
|||
</syntaxhighlight> |
|||
<code>Write-Host</code> erzwingt dabei die Ausgabe auf der Konsole. Die Ausgabe wird nicht an die Pipeline weitergegeben und kann nicht weiterverarbeitet werden. <code>Write-Output</code> würde die Ausgabe sowohl an die Konsole, als auch die Pipeline weitergeben. |
|||
Hole alle [[Prozess (Informatik)|Prozesse]], deren Namen mit dem Buchstaben „p“ beginnen: |
|||
<syntaxhighlight lang="powershell"> |
|||
PS> get-process p* | stop-process |
|||
Get-Process p* |
|||
</syntaxhighlight> |
|||
* Suche alle Prozesse, die mehr als 10 MB Hauptspeicher verwenden, und beende sie: |
|||
PS> get-process | where { $_.WS -gt 10MB } | stop-process |
|||
Hole alle Prozesse, die mehr als 10 MB Hauptspeicher verwenden: |
|||
* Berechne die Gesamtanzahl der Bytes aller Dateien in einem Verzeichnis: |
|||
<syntaxhighlight lang="powershell"> |
|||
PS> get-childitem | measure-object -property length -sum |
|||
Get-Process | where { $_.WS -gt 10MB } |
|||
</syntaxhighlight> |
|||
<code>where</code> ist ein Alias für <code>Where-Object</code> und filtert das ausgegebene Objekt von <code>Get-Process</code> auf alle Elemente die als Eigenschaft WS (<code>$_.WS</code>) einen Wert größer 10 MB haben. PowerShell kennt die Maßeinheit [[Byte]] und rechnet 10 MB in 10485760 um. |
|||
* Warte, bis ein bestimmter Prozess beendet wurde: |
|||
Berechne die Gesamtanzahl der Bytes aller Dateien in einem Verzeichnis: |
|||
PS> $processToWatch = get-process notepad |
|||
<syntaxhighlight lang="powershell"> |
|||
PS> $processToWatch.WaitForExit() |
|||
Get-ChildItem | Measure-Object -Property Length -Sum |
|||
</syntaxhighlight> |
|||
* Ändere eine Zeichenkette von Kleinbuchstaben in Großbuchstaben: |
|||
PS> "hallo welt!".ToUpper() |
|||
Warte, bis ein bestimmter Prozess beendet wurde: |
|||
* Füge die Zeichenfolge „ABC“ nach dem ersten Buchstaben des Wortes „string“ ein, um als Ergebnis „sABCtring“ zu erhalten: |
|||
<syntaxhighlight lang="powershell"> |
|||
PS> "string".Insert(1, "ABC") |
|||
$processToWatch = Get-Process notepad |
|||
$processToWatch.WaitForExit() |
|||
</syntaxhighlight> |
|||
* Lade einen bestimmten [[RSS|RSS-Feed]] herunter und zeige die Überschriften der acht neuesten Einträge: |
|||
<source lang="text"> |
|||
PS> $rssUrl = "http://blogs.msdn.com/powershell/rss.aspx" |
|||
PS> $blog = [xml](new-object System.Net.WebClient).DownloadString($rssUrl) |
|||
PS> $blog.rss.channel.item | select title -first 8 |
|||
</source> |
|||
Ändere eine [[Zeichenkette]] von Kleinbuchstaben in Großbuchstaben: |
|||
== Dateiendungen == |
|||
<syntaxhighlight lang="powershell"> |
|||
"hallo welt!".ToUpper() |
|||
</syntaxhighlight> |
|||
* .ps1 – Windows PowerShell Shell-Skript |
|||
Füge die Zeichenfolge „ABC“ nach dem ersten Buchstaben des Wortes „string“ ein, um als Ergebnis „sABCtring“ zu erhalten: |
|||
<syntaxhighlight lang="powershell"> |
|||
"string".Insert(1, "ABC") |
|||
</syntaxhighlight> |
|||
Lade einen bestimmten [[RSS (Web-Feed)|RSS]]-[[Web-Feed]] herunter und zeige die Überschriften der acht neuesten Einträge: |
|||
<syntaxhighlight lang="powershell"> |
|||
$rssUrl = "https://devblogs.microsoft.com/powershell/feed/" |
|||
$blog = [xml] (New-Object System.Net.WebClient).DownloadString($rssUrl) |
|||
$blog.rss.channel.item | select title -First 8 |
|||
</syntaxhighlight> |
|||
Lösche die komplette Festplatte ohne Rückfrage, Äquivalent zu <span style="font-family:monospace;">rm -rf /</span> unter Unix: |
|||
<syntaxhighlight lang="powershell"> |
|||
Get-PSDrive -p "FileSystem" | % { ls -Recurse $_.Root | rm –Force } |
|||
</syntaxhighlight> |
|||
== Dateiendungen == |
|||
* .ps1 – Windows PowerShell [[Shellskript]] |
|||
* .ps1xml – Windows PowerShell Format- und Typdefinitionen |
* .ps1xml – Windows PowerShell Format- und Typdefinitionen |
||
* .psc1 – Windows PowerShell Konsolendatei (exportierte Shell-Konfiguration) |
* .psc1 – Windows PowerShell Konsolendatei (exportierte Shell-Konfiguration) |
||
Zeile 193: | Zeile 640: | ||
== Software-Unterstützung == |
== Software-Unterstützung == |
||
Unterstützt werden unter anderem folgende Systeme: |
|||
{| class="wikitable" style="text-align: center;" |
|||
{| class="wikitable sortable" |
|||
|- |
|- |
||
! Software |
! Software |
||
! Version |
! class="unsortable"| Version |
||
! Cmdlets |
! Cmdlets |
||
! Provider |
! Provider |
||
Zeile 203: | Zeile 652: | ||
|[[Microsoft Exchange Server]] |
|[[Microsoft Exchange Server]] |
||
|2007 |
|2007 |
||
|{{Ja}} (402) |
|{{Ja-Feld}} (402) |
||
|{{Ja}} |
|{{Ja-Feld}} |
||
|{{Ja}} |
|{{Ja-Feld}} |
||
|- |
|||
|[[Microsoft Exchange Server]] |
|||
|2010 |
|||
|{{Ja-Feld}} |
|||
|{{Ja-Feld}} |
|||
|{{Ja-Feld}} |
|||
|- |
|- |
||
|[[Microsoft Windows|Microsoft Windows Server]] |
|[[Microsoft Windows|Microsoft Windows Server]] |
||
|[[Microsoft Windows Server 2008|2008]] |
|[[Microsoft Windows Server 2008|2008]] |
||
|{{Ja}} |
|{{Ja-Feld}} |
||
|{{Ja}} |
|{{Ja-Feld}} |
||
|{{Nein}} |
|{{Nein-Feld}} |
||
|- |
|||
|[[Microsoft Windows|Microsoft Windows Server]] |
|||
|[[Microsoft Windows Server 2008#Server Core|2008 Core]] |
|||
|{{Nein-Feld}} |
|||
|{{Nein-Feld}} |
|||
|{{Nein-Feld}} |
|||
|- |
|||
|[[Microsoft Windows|Microsoft Windows Server]] |
|||
|[[Microsoft Windows Server 2008 R2]] |
|||
|{{Ja-Feld}} |
|||
|{{Nein-Feld}} |
|||
|{{Nein-Feld}} |
|||
|- |
|- |
||
|[[Microsoft SQL Server]] |
|[[Microsoft SQL Server]] |
||
|2008 |
|2008 |
||
|{{Ja}} |
|{{Ja-Feld}} |
||
|{{Ja}} |
|{{Ja-Feld}} |
||
|{{Nein}} |
|{{Nein-Feld}} |
||
|- |
|||
|[[SharePoint]] |
|||
|2010, 2013 |
|||
|{{Ja-Feld}} |
|||
|{{Ja-Feld}} |
|||
|{{Nein-Feld}} |
|||
|- |
|- |
||
|[[Microsoft System Center Operations Manager]] |
|[[Microsoft System Center Operations Manager]] |
||
|2007 |
|2007 |
||
|{{Ja}} (74) |
|{{Ja-Feld}} (74) |
||
|{{Ja}} |
|{{Ja-Feld}} |
||
|{{Nein}} |
|{{Nein-Feld}} |
||
|- |
|- |
||
|[[Microsoft System Center Virtual Machine Manager]] |
|[[Microsoft System Center Virtual Machine Manager]] |
||
|2007 |
|2007 |
||
|{{Ja}} |
|{{Ja-Feld}} |
||
|{{Ja}} |
|{{Ja-Feld}} |
||
|{{Ja}} |
|{{Ja-Feld}} |
||
|- |
|- |
||
|[[Microsoft System Center Data Protection Manager]] |
|[[Microsoft System Center Data Protection Manager]] |
||
|2007 |
|2007 |
||
|{{Ja}} |
|{{Ja-Feld}} |
||
|{{Nein}} |
|{{Nein-Feld}} |
||
|{{Nein}} |
|{{Nein-Feld}} |
||
|- |
|- |
||
|[[Microsoft Windows Compute Cluster Server]] |
|[[Microsoft Windows Compute Cluster Server]] |
||
|2007 |
|2007 |
||
|{{Ja}} |
|{{Ja-Feld}} |
||
|{{Ja}} |
|{{Ja-Feld}} |
||
|{{Nein}} |
|{{Nein-Feld}} |
||
|- |
|- |
||
|Microsoft Transporter Suite for [[Lotus Notes|Lotus Domino]]<ref>{{ |
|Microsoft Transporter Suite for [[Lotus Notes|Lotus Domino]]<ref>{{Internetquelle |url=http://www.microsoft.com/downloads/details.aspx?familyid=35fc4205-792b-4306-8e4b-0de9cce72172&displaylang=en |titel=Microsoft Transporter Suite for Lotus Domino |abruf=2008-02-18}}</ref> |
||
|08.02.0012 |
|08.02.0012 |
||
|{{Ja}} (47) |
|{{Ja-Feld}} (47) |
||
|{{Nein}} |
|{{Nein-Feld}} |
||
|{{Nein}} |
|{{Nein-Feld}} |
||
|- |
|- |
||
|Microsoft PowerTools for [[Office Open XML|Open XML]]<ref>{{ |
|Microsoft PowerTools for [[Office Open XML|Open XML]]<ref>{{Internetquelle |url=http://www.codeplex.com/PowerTools |titel=PowerTools for Open XML |abruf=2008-06-20}}</ref> |
||
|1.0 |
|1.0 |
||
|{{Ja}} (33) |
|{{Ja-Feld}} (33) |
||
|{{Nein}} |
|{{Nein-Feld}} |
||
|{{Nein}} |
|{{Nein-Feld}} |
||
|- |
|- |
||
|[[WebSphere#WebSphere MQ|IBM WebSphere MQ]]<ref>{{ |
|[[WebSphere#WebSphere MQ|IBM WebSphere MQ]]<ref>{{Internetquelle |url=http://www-1.ibm.com/support/docview.wss?rs=171&uid=swg24017698 |titel=MO74: WebSphere MQ – Windows Powershell Library |abruf=2008-02-18}}</ref> |
||
|6.0.2.2 |
|6.0.2.2 |
||
|{{Ja}} (44) |
|{{Ja-Feld}} (44) |
||
|{{Nein}} |
|{{Nein-Feld}} |
||
|{{Nein}} |
|{{Nein-Feld}} |
||
|- |
|- |
||
|Quest Management Shell for Active Directory<ref>{{ |
|Quest Management Shell for Active Directory<ref>{{Internetquelle |url=http://www.quest.com/powershell/activeroles-server.aspx |titel=PowerShell Commands for Active Directory by Quest Software |abruf=2008-07-02}}</ref> |
||
|1.1 |
|1.1 |
||
|{{Ja}} (40) |
|{{Ja-Feld}} (40) |
||
|{{Nein}} |
|{{Nein-Feld}} |
||
|{{Nein}} |
|{{Nein-Feld}} |
||
|- |
|- |
||
|[[SpecOps Password Policy|Special Operations Software Specops Command]]<ref>{{ |
|[[SpecOps Password Policy|Special Operations Software Specops Command]]<ref>{{Internetquelle |url=http://www.specopssoft.com/powershell/ |titel=PowerShell Remoting through Group Policy |abruf=2008-02-18}}</ref> |
||
|1.0 |
|1.0 |
||
|{{Ja}} |
|{{Ja-Feld}} |
||
|{{Nein}} |
|{{Nein-Feld}} |
||
|{{Ja}} |
|{{Ja-Feld}} |
||
|- |
|- |
||
|[[VMware|VMware Infrastructure Toolkit]]<ref>{{ |
|[[VMware|VMware Infrastructure Toolkit]]<ref>{{Internetquelle |url=http://www.vmware.com/sdk/vitk_win/ |titel=VMware Infrastructure Toolkit for Windows |abruf=2008-11-26 |archiv-url=https://web.archive.org/web/20081121201154/http://www.vmware.com./sdk/vitk_win/ |archiv-datum=2008-11-21 |offline=1}}</ref> |
||
|1.0 |
|1.0 Update 1 |
||
|{{Ja}} ( |
|{{Ja-Feld}} (125) |
||
|{{Nein}} |
|{{Nein-Feld}} |
||
|{{Nein}} |
|{{Nein-Feld}} |
||
|- |
|- |
||
|[[Microsoft Internet Information Services|Internet Information Services]]<ref>{{ |
|[[Microsoft Internet Information Services|Internet Information Services]]<ref>{{Internetquelle |url=http://blogs.msdn.com/powershell/archive/2008/07/03/iis7-powershell-provider-tech-preview-2.aspx |titel=Windows PowerShell: IIS7 PowerShell Provider Tech Preview 2 |abruf=2008-07-03}}</ref> |
||
|7.0 |
|7.0 |
||
|{{Ja}} (54) |
|{{Ja-Feld}} (54) |
||
|{{Ja}} |
|{{Ja-Feld}} |
||
|{{Nein}} |
|{{Nein-Feld}} |
||
|- |
|||
|[[Microsoft Windows 7]] Troubleshooting Center |
|||
|6.1 |
|||
|{{Ja-Feld}} |
|||
|{{Nein-Feld}} |
|||
|{{Ja-Feld}} |
|||
|- |
|||
|[[Microsoft Deployment Toolkit]] |
|||
|2010 |
|||
|{{Ja-Feld}} |
|||
|{{Nein-Feld}} |
|||
|{{Nein-Feld}} |
|||
|- |
|||
|[[LOGINventory]] |
|||
|5.x |
|||
|{{Ja-Feld}} |
|||
|{{Ja-Feld}} |
|||
|{{Ja-Feld}} |
|||
|- |
|||
|[[Citrix XenApp]] |
|||
|seit v5.x |
|||
|{{Ja-Feld}} |
|||
|{{Ja-Feld}} |
|||
|{{Ja-Feld}} |
|||
|- |
|||
|[[Citrix XenDesktop]] |
|||
|seit v5.x |
|||
|{{Ja-Feld}} |
|||
|{{Ja-Feld}} |
|||
|{{Ja-Feld}} |
|||
|} |
|} |
||
== Zukunft == |
|||
{{Belege}} |
|||
Der [[Codename|Arbeitstitel]] für die nächste Version lautet ''Aspen'', was gleichzeitig auch der Arbeitstitel für die nächste Generation der [[Microsoft Management Console]] (MMC) ist. Chef-Architekt des zuständigen Teams ist [[Jeffrey Snover]]. Zukünftig sollen alle Windows-Administrationswerkzeuge der MMC unter der grafischen Oberfläche auf der Windows PowerShell aufbauen, so dass sich Windows sowohl komplett über die [[grafische Benutzeroberfläche]] als auch alternativ über die Kommandozeile administrieren lässt. Während der Schwerpunkt der Entwicklung für die erste Version vor allem auf der Skriptsprache lag, sind für die Nachfolge-Version unter anderem ein flexibleres [[Terminalemulation|Terminal-Fenster]] und weitere Cmdlets geplant. |
|||
== Quellen == |
|||
<references /> |
|||
== Literatur == |
== Literatur == |
||
;Deutsch |
|||
* Ulrich Cuber: ''Windows PowerShell''. Mitp-Verlag 2007, ISBN 978-3-8266-1673-0. |
|||
=== Deutsch === |
|||
* {{Literatur |
|||
* Ulrich Cuber: ''Windows PowerShell''. Mitp-Verlag 2007, ISBN 978-3826616730. |
|||
|Autor=Lee Holmes, Rolf Masuch |
|||
* Lee Holmes: ''Windows PowerShell – kurz & gut''. O’Reilly Verlag 2007, ISBN 978-3-89721-532-0. |
|||
|Titel=Windows PowerShell 3.0 kurz & gut |
|||
* Peter Monadjemi: [http://www.microsoft-press.de/product.asp?cnt=product&id=ms-5617&apid=60269 ''Windows PowerShell – Crashkurs'']. Microsoft Press Deutschland 2007, ISBN 978-3866456174. |
|||
|Auflage=3 |
|||
|Verlag=O’Reilly |
|||
|Datum=2013 |
|||
|ISBN=978-3-95561-055-5}} |
|||
* Peter Monadjemi: ''Windows PowerShell – Crashkurs''. Microsoft Press Deutschland 2007, ISBN 978-3-86645-617-4. |
|||
* Andy Oakley: ''Schnelleinstieg in die Windows PowerShell''. O’Reilly Verlag 2007, ISBN 978-3-89721-487-3. |
* Andy Oakley: ''Schnelleinstieg in die Windows PowerShell''. O’Reilly Verlag 2007, ISBN 978-3-89721-487-3. |
||
* Bruce Payette: ''Windows PowerShell im Einsatz''. Hanser Fachbuchverlag 2007, ISBN 978- |
* Bruce Payette: ''Windows PowerShell im Einsatz''. Hanser Fachbuchverlag 2007, ISBN 978-3-446-41239-2. |
||
* Holger Schwichtenberg: ''Windows PowerShell''. Addison-Wesley 2007, ISBN 978- |
* Holger Schwichtenberg: ''Windows PowerShell''. Addison-Wesley 2007, ISBN 978-3-8273-2533-4. |
||
* Holger Schwichtenberg: ''Windows Scripting. Automatisierte Systemadministration mit dem Windows Script Host und der Windows PowerShell''. Addison-Wesley 2007, ISBN 978- |
* Holger Schwichtenberg: ''Windows Scripting. Automatisierte Systemadministration mit dem Windows Script Host und der Windows PowerShell''. Addison-Wesley 2007, ISBN 978-3-8273-2423-8. |
||
* Helma Spona: ''Windows PowerShell. Sprachgrundlagen, Dateisystem, Datenbankzugriffe, WMI-Steuerung''. Galileo Press 2007, ISBN 978- |
* Helma Spona: ''Windows PowerShell. Sprachgrundlagen, Dateisystem, Datenbankzugriffe, WMI-Steuerung''. Galileo Press 2007, ISBN 978-3-89842-880-4. |
||
* Tobias Weltner: |
* Tobias Weltner: ''Scripting mit Windows PowerShell – Einsteiger-Workshop''. Microsoft Press Deutschland 2007, ISBN 978-3-86645-620-4. |
||
* Tobias Weltner: |
* Tobias Weltner: ''PowerShell Scripting für Administratoren''. Microsoft Press Deutschland 2008, ISBN 978-3-86645-635-8. |
||
;Englisch |
|||
* Jerry Lee Ford Jr.: ''Microsoft Windows Powershell Programming for the Absolute Beginner''. Course Technology Ptr 2007, ISBN |
* Jerry Lee Ford Jr.: ''Microsoft Windows Powershell Programming for the Absolute Beginner''. Course Technology Ptr 2007, ISBN 1-59863-354-6. |
||
* Lee Holmes: |
* Lee Holmes: ''Windows PowerShell Quick Reference''. O’Reilly 2006, ISBN 0-596-52813-2. |
||
* Don Jones: |
* Don Jones: ''An Introduction to Microsoft® PowerShell™''. Realtimepublishers.com 2006. |
||
* Don Jones, Jeffery Hicks: |
* Don Jones, Jeffery Hicks: ''Windows PowerShell™: TFM®''. SAPIEN Press 2006, ISBN 0-9776597-1-2. |
||
* Tyson Kopczynski: ''Microsoft Powershell Unleashed''. Sams Publishing 2007, ISBN |
* Tyson Kopczynski: ''Microsoft Powershell Unleashed''. Sams Publishing 2007, ISBN 0-672-32953-0. |
||
* Andy Oakley: |
* Andy Oakley: ''Monad – Introducing the MSH Command Shell and Language''. O’Reilly 2006, ISBN 0-596-10009-4. |
||
* Bruce Payette: |
* Bruce Payette: ''Windows PowerShell in Action''. Manning Publications, ISBN 1-932394-90-7. |
||
* Andrew Watt: |
* Andrew Watt: ''Professional Windows PowerShell''. Wrox Press 2007, ISBN 0-471-94693-1. |
||
* Ed Wilson: |
* Ed Wilson: ''Microsoft® Windows PowerShell™ Step By Step''. Microsoft Press 2007, ISBN 0-7356-2395-3. |
||
* Steve Seguis: ''Windows PowerShell 2 for Dummies'', ISBN 978-0-470-37198-5 |
|||
* {{Literatur |
|||
|Autor=Arul Kumaravel, Jon White, Michael Naixin Li, Scott Happell, Guohui Xie, Krishna C. Vutukuri |
|||
|Titel=Professional Windows PowerShell Programming: Snapins, Cmdlets, Hosts and Providers |
|||
|Reihe=Wrox Professional Series |
|||
|Auflage=1 |
|||
|Verlag=John Wiley & Sons |
|||
|Datum=2008 |
|||
|ISBN=978-0-470-17393-0 |
|||
|Kommentar=Standardwerk zur PowerShell-Entwicklung mit C#}} |
|||
== Weblinks == |
== Weblinks == |
||
* [https://www.heise.de/developer/meldung/PowerShell-7-0-freigegeben-Eine-Shell-fuer-fast-alle-und-fast-alles-4656825.html PowerShell 7.0 freigegeben: Eine Shell für (fast) alle und (fast) alles] März 2020, heise online |
|||
;Schnellreferenzen |
|||
* {{Internetquelle |
|||
|url=https://www.microsoft.com/en-us/download/details.aspx?id=42554 |
|||
|titel=Windows PowerShell Quick Reference |
|||
|werk=Download Center |
|||
|hrsg=Microsoft |
|||
|sprache=en |
|||
|abruf=2013-08-06}} |
|||
;Einführung |
|||
* [http://www.microsoft.com/germany/technet/scriptcenter/hubs/msh.mspx Script Center: Skripting mit der Windows PowerShell] – Microsofts Einstiegs-Seite zur Windows PowerShell |
|||
* [http://technet.microsoft.com/de-de/scriptcenter/dd742419 Microsoft TechnNet: Skripterstellung mit Windows PowerShell] – Microsofts Einstiegs-Seite zur Windows PowerShell |
|||
* [http://www.windowspro.de/wolfgang-sommergut/powershell-30-workflows-robuste-sessions-zeitgesteuerte-scripts Die Neuerungen von PowerShell 3.0 im Überblick] |
|||
* [http://www.linux-magazin.de/heft_abo/ausgaben/2006/12/muschelzucht_im_ausland Muschelzucht im Ausland] – PowerShell-Artikel erschienen im [[Linux-Magazin]] 2006/12 |
|||
* [http://www.admin-magazin.de/Das-Heft/2011/01/Powershell-fuer-Exchange-und-SharePoint PowerShell für Exchange und Sharepoint] – ADMIN-Magazin 01/2011 |
|||
;Blogs |
|||
* [http://blogs.msdn.com/powershell/ Weblog des PowerShell-Entwicklerteams] (en) – Informationen und Neuigkeiten zur PowerShell aus erster Hand |
* [http://blogs.msdn.com/powershell/ Weblog des PowerShell-Entwicklerteams] (en) – Informationen und Neuigkeiten zur PowerShell aus erster Hand |
||
* {{Internetquelle |
|||
* [http://channel9.msdn.com/wiki/default.aspx/Channel9.WindowsPowerShellWiki Inoffizielles PowerShell-Wiki auf Channel 9] (en) – Informationen, kurzer Überblick über die Skriptsprache, Beispielskripte, etc. |
|||
|url=http://www.powershellmagazine.com/ |
|||
* [http://www.linux-magazin.de/heft_abo/ausgaben/2006/12/muschelzucht_im_ausland Muschelzucht im Ausland] – PowerShell Artikel erschienen im Linux-Magazin 2006/12 |
|||
|titel=PowerShell Magazine |
|||
|sprache=en |
|||
|abruf=2014-04-16}} |
|||
;Cmdlets und Module |
|||
* {{Internetquelle |
|||
|url=http://www.powergui.org/index.jspa |
|||
|titel=PowerGUI |
|||
|sprache=en |
|||
|abruf=2013-08-06 |
|||
|kommentar=PowerShell Community und Anbieter eines kostenlosen Grafischen User Interfaces und Skripteditor für Microsoft Windows Powershell}} |
|||
* {{Internetquelle |
|||
|url=http://technet.microsoft.com/en-us/library/dn264983.aspx |
|||
|titel=Windows PowerShell for Windows Server 2012 and Windows 8 |
|||
|werk=TechNet |
|||
|hrsg=Microsoft |
|||
|sprache=en |
|||
|abruf=2013-08-06 |
|||
|kommentar=PowerShell Module in Windows Server 2012 und Windows 8}} |
|||
* {{Internetquelle |
|||
|url=http://technet.microsoft.com/en-us/scriptcenter/bb410849.aspx |
|||
|titel=Script Center |
|||
|werk=TechNet |
|||
|hrsg=Microsoft |
|||
|sprache=en |
|||
|abruf=2013-08-06}} |
|||
* {{Internetquelle |
|||
|url=http://powershell.codeplex.com/ |
|||
|titel=PowerShell scripts, modules and cmdlets for IT Admins |
|||
|werk=CodePlex |
|||
|sprache=en |
|||
|abruf=2013-08-06}} |
|||
* {{Internetquelle |
|||
|url=http://social.technet.microsoft.com/wiki/contents/articles/4308.popular-powershell-modules.aspx |
|||
|titel=Popular PowerShell Modules |
|||
|werk=TechNet |
|||
|hrsg=Microsoft |
|||
|sprache=en |
|||
|abruf=2013-08-06 |
|||
|kommentar=Übersicht über häufig genutzte PowerShell Module}} |
|||
* {{Internetquelle |
|||
|url=http://www.admin-magazin.de/Das-Heft/2014/02/Office-365-mit-der-Powershell-verwalten |
|||
|titel=Powershell für Exchange und Sharepoint |
|||
|hrsg=ADMIN-Magazin |
|||
|sprache=de |
|||
|abruf=2015-01-09 |
|||
|kommentar=Modul zur Verwaltung von Office 365}} |
|||
* {{Internetquelle |
|||
|url=http://www.admin-magazin.de/Das-Heft/2011/01/Powershell-fuer-Exchange-und-Sharepoint |
|||
|titel=Office 365 mit der Powershell verwalten |
|||
|hrsg=ADMIN-Magazin |
|||
|sprache=de |
|||
|abruf=2015-01-09 |
|||
|kommentar=Module für Exchange und Sharepoint}} |
|||
;Portierungen |
|||
* {{Internetquelle |
|||
|url=http://pash-project.github.io/ |
|||
|titel=Pash |
|||
|werk=Github |
|||
|sprache=en |
|||
|abruf=2013-08-06 |
|||
|kommentar=[[Mono (Software)|Mono]]-Portierung von PowerShell}} |
|||
;[[Behavior Driven Development|BDD]] und [[Modultest|Unit Testing]] Frameworks |
|||
* {{Internetquelle |
|||
|url=https://github.com/pester/Pester |
|||
|titel=Pester |
|||
|werk=Github |
|||
|sprache=en |
|||
|abruf=2014-04-16}} |
|||
* {{Internetquelle |
|||
|url=http://psunit.codeplex.com/ |
|||
|titel=PS Unit |
|||
|werk=CodePlex |
|||
|sprache=en |
|||
|abruf=2014-04-16}} |
|||
* {{Internetquelle |
|||
|url=http://www.nuget.org/packages/PsTest/ |
|||
|titel=PsTest |
|||
|sprache=en |
|||
|abruf=2014-04-16}} |
|||
;Automation, Delegation & Management mit PowerShell Skripten |
|||
* [https://www.scriptrunner.com/ ScriptRunner: Automation & Collaboration Plattform für PowerShell] – ScriptRunner ermöglicht eine schnelle, einfache und sichere Automatisierung und Delegation von Skripten sowie das Erstellen, Verwalten und Überwachen von Skripten und Ausführungsrichtlinien. |
|||
;Sonstiges |
|||
* {{Internetquelle |
|||
|autor=Adam R Driscoll |
|||
|url=http://visualstudiogallery.msdn.microsoft.com/c9eb3ba8-0c59-4944-9a62-6eee37294597 |
|||
|titel=PowerShell Tools for Visual Studio |
|||
|werk=Visual Studio Gallery |
|||
|hrsg=Microsoft |
|||
|sprache=en |
|||
|abruf=2014-04-12}} |
|||
== Einzelnachweise == |
|||
<references> |
|||
<ref name="NT4"> |
|||
{{Internetquelle |
|||
|url=https://www.microsoft.com/resources/documentation/windowsnt/4/server/reskit/en-us/reskt4u4/rku4list.mspx?mfr=true |
|||
|titel=Alphabetical List of Tools in the Windows NT 4.0 Resource Kit Supplement 4 |
|||
|hrsg=Microsoft |
|||
|abruf=2016-02-10}} |
|||
</ref> |
|||
<ref name="tlist"> |
|||
{{Internetquelle |
|||
|url=https://msdn.microsoft.com/en-us/library/windows/hardware/ff558901%28v=vs.85%29.aspx |
|||
|titel=TList |
|||
|hrsg=Microsoft |
|||
|abruf=2016-02-10}} |
|||
</ref> |
|||
<ref name="tasklist"> |
|||
{{Internetquelle |
|||
|url=https://technet.microsoft.com/de-de/library/cc730909%28v=ws.10%29.aspx |
|||
|titel=Tasklist |
|||
|hrsg=Microsoft |
|||
|abruf=2016-02-10}} |
|||
</ref> |
|||
<ref name="kill"> |
|||
{{Internetquelle |
|||
|url=https://msdn.microsoft.com/en-us/library/windows/hardware/ff551919%28v=vs.85%29.aspx |
|||
|titel=Kill Tool |
|||
|hrsg=Microsoft |
|||
|abruf=2016-02-10}} |
|||
</ref> |
|||
<ref name="taskkill"> |
|||
{{Internetquelle |
|||
|url=https://technet.microsoft.com/de-de/library/cc725602%28v=ws.10%29.aspx |
|||
|titel=Taskkill |
|||
|hrsg=Microsoft |
|||
|abruf=2016-02-10}} |
|||
</ref> |
|||
</references> |
|||
[[Kategorie:Shell]] |
[[Kategorie:Shell]] |
||
[[Kategorie: |
[[Kategorie:.NET]] |
||
[[Kategorie:Windows-Betriebssystemkomponente]] |
|||
[[Kategorie:Skriptsprache]] |
[[Kategorie:Skriptsprache]] |
||
[[Kategorie:Windows]] |
|||
[[Kategorie:.Net]] |
|||
[[Kategorie:Microsoft]] |
|||
[[cs:Windows PowerShell]] |
|||
[[en:Windows PowerShell]] |
|||
[[es:Windows PowerShell]] |
|||
[[fi:Windows PowerShell]] |
|||
[[fr:Windows PowerShell]] |
|||
[[id:Windows PowerShell]] |
|||
[[it:Windows PowerShell]] |
|||
[[ja:Windows PowerShell]] |
|||
[[ko:윈도 파워셸]] |
|||
[[nl:Windows PowerShell]] |
|||
[[pl:Windows PowerShell]] |
|||
[[pt:Windows PowerShell]] |
|||
[[ru:Windows PowerShell]] |
|||
[[uk:Windows PowerShell]] |
|||
[[zh:Windows PowerShell]] |
Aktuelle Version vom 29. März 2025, 17:52 Uhr
PowerShell
| |
---|---|
![]() | |
![]() Screenshot der powershell.exe 5.0 innerhalb conhost.exe unter Windows 8.1
| |
Basisdaten
| |
Entwickler | Microsoft |
Erscheinungsjahr | 14. November 2006 |
Aktuelle Version | 7.5.0[1] (23. Januar 2025) |
Betriebssystem | Microsoft Windows, ab Version 6 auch Linux und macOS |
Programmiersprache | C#[2] |
Kategorie | Kommandozeileninterpreter |
Lizenz | Proprietär, MIT-Lizenz[3] |
deutschsprachig | ja |
PowerShell |
PowerShell (auch Windows PowerShell und PowerShell Core) ist ein plattformübergreifendes Framework von Microsoft zur Automatisierung, Konfiguration und Verwaltung von Systemen, das einen Kommandozeileninterpreter inklusive Skriptsprache bietet.[4]
Windows PowerShell basiert auf der Common Language Runtime (CLR) des .NET Frameworks und wird mit Windows als Teil des Windows Management Frameworks (WMF) unter einer proprietären Lizenz ausgeliefert.[5][6] Seit 2016 gibt es Windows PowerShell auch als Core Edition, welche wie PowerShell Core auf .NET Core basiert und als Teil von Windows Nano Server und Windows IoT ausgeliefert wird.[7]
Seit Version 6 basiert PowerShell auf der Core Common Language Runtime (CoreCLR) und ist als plattformübergreifendes Open-Source-Projekt[8] unter der MIT-Lizenz[3] für Linux, macOS und Windows verfügbar.[5]
Entstehungsgeschichte
[Bearbeiten | Quelltext bearbeiten]Eingabeaufforderung
[Bearbeiten | Quelltext bearbeiten]Jede veröffentlichte Version von MS-DOS und Windows enthielt eine Kommandozeile oder Eingabeaufforderung (siehe auch Kommandozeileninterpreter). Diese sind COMMAND.COM
(in DOS bzw. DOS-basierten Betriebssystemen wie Windows 9x) und cmd.exe
(in Betriebssystemen der Windows-NT-Familie). Die Eingabeaufforderung bietet einige Standardbefehle und ermöglicht das Ausführen weiterer Konsolenanwendungen. Darüber hinaus gibt es eine Skriptsprache, um Aufgaben zu automatisieren (siehe Stapelverarbeitungsdatei).
Da jedoch nicht alle Funktionalitäten der grafischen Benutzeroberfläche über die Eingabeaufforderung erreichbar sind, können nicht alle Aufgaben automatisiert werden und auch die Skriptsprache ist aufgrund ihrer Einfachheit in der Funktionalität beschränkt.
Mit Windows Server 2003 waren die meisten Funktionen auch per Eingabeaufforderung verfügbar, dennoch bleiben die Limitierung der Skriptsprache sowie Inkonsistenzen in der Bedienung unterschiedlicher Konsolenanwendungen.
Microsoft versuchte bereits 1998 einige dieser Limitierungen mit der Einführung von Windows Script Host (cscript.exe
) und dessen Unterstützung von JScript und VBScript in Windows 98 zu überwinden. Mit Windows Script Host ist es möglich, alle COM-Komponenten anzusprechen, was die Automatisierung von weiten Teilen des Betriebssystems ermöglicht.
Darüber hinaus gibt es in unterschiedlichen Windows-Versionen weitere Kommandozeileninterpreter für spezielle Einsatzgebiete (z. B. netsh zur Netzwerkkonfiguration oder das Windows Management Instrumentation Command-line (WMIC)).
Monad Manifest
[Bearbeiten | Quelltext bearbeiten]Jeffrey Snover – ein Verfechter von Kommandozeilen, der 1999 bei Microsoft anfing – unterstützte zunächst Microsoft Windows Services for UNIX (SFU), um Unix-Tools unter Windows nutzen zu können. Da Windows aber nicht wie Unix textorientiert, sondern API-orientiert arbeitet, konnte es letztlich nicht umfassend verwaltet werden (z. B. Setzen von Registry-Werten). Snover entwickelte außerdem die Windows Management Instrumentation Command-line (WMIC).[9] 2002 beschrieb er einen neuen Ansatz für die Automatisierung in Windows als Monad Manifest. Darin beschreibt Snover Monad als mächtige, konsistente, erweiterbare und nützliche „Plattform der nächsten Generation“ auf Basis von .NET, mit der der Aufwand für Administratoren reduziert und das Leben von Nicht-Programmierern deutlich vereinfacht werden könne.[10] Dies sollte unter anderem durch folgende Punkte erreicht werden:
- Administratoren können Befehle schneller und einfacher programmieren, da Monad viele Standardaufgaben von Befehlen übernimmt und durch einen einheitlichen Parser Konsistenz bietet.
- Anstatt Text (unstrukturierte Daten) werden Objekte (strukturierte Daten) an die Pipe übergeben, was die Weiterverarbeitung vereinfacht.
- Ausführung von Skripts auf einer Vielzahl von entfernten Computern
Die Idee von Monad wurde weiterentwickelt. 2003 bei der Professional Development Conference in Los Angeles wurde erstmals die Monad Shell (MSH) gezeigt. 2005 wurden Beta-Versionen veröffentlicht.
PowerShell entsteht und wird Teil von Windows
[Bearbeiten | Quelltext bearbeiten]2006 verkündete Microsoft, dass Monad in PowerShell umbenannt werde. Gleichzeitig wurde verkündet, dass Exchange Server 2007 per PowerShell administriert werde und auch die GUI auf PowerShell aufsetze.[11] Noch im gleichen Jahr wurde PowerShell 1.0 veröffentlicht und zum Download angeboten.[12]
Durch die Unterstützung der Exchange- und Datacenter-Verantwortlichen bei Microsoft konnte die PowerShell im Konzern etabliert werden.[13] 2007 wurde PowerShell Teil von Microsofts Common Engineering Criteria für 2009, einer Liste von Kriterien, der jedes Microsoft Server-Produkt entsprechen soll. Das bedeutete effektiv, dass ab 2009 jedes Server-Produkt von Microsoft PowerShell unterstützen sollte.[14] Dies war der endgültige Durchbruch für PowerShell als zentrale Verwaltungs- und Automatisierungseinheit in Windows.
2008 wurde Windows Server 2008 das erste Betriebssystem, das mit PowerShell ausgeliefert wird – jedoch noch als optionale Komponente.
2009 wurde PowerShell 2.0 als fester Bestandteil von Windows 7 und Windows Server 2008 R2 veröffentlicht.[15] Anfang 2010 stand PowerShell 2.0 auch für ältere Betriebssysteme als optionales Update per Windows Update bereit.[16]
PowerShell wird Open Source und plattformübergreifend
[Bearbeiten | Quelltext bearbeiten]2016 verkündete Microsoft, dass PowerShell unter der MIT-Lizenz Open Source und plattformübergreifend entwickelt wird.[17] Gleichzeitig wurde ein GitHub Repository erstellt und die Alpha-Version von PowerShell Version 6.0 für Windows, Linux und macOS veröffentlicht. Der Hersteller begründete diesen Schritt in seiner Cloud-Strategie. In Microsoft Azure werden nicht nur Windows-, sondern auch eine Vielzahl von Linux-Systemen bereitgestellt. Microsoft bietet PowerShell als universelles Werkzeug für alle Administratoren an, ganz gleich welches Betriebssystem oder welche Anwendung administriert werden soll.
Aufbau
[Bearbeiten | Quelltext bearbeiten]PowerShell wurde speziell für die Systemverwaltung und -automatisierung entworfen.[18]
Sie verbindet die aus Unix-Shells bekannte Philosophie von Pipes und Filtern mit dem Paradigma der objektorientierten Programmierung. Der Benutzer kann wie bisher einfache Befehle an einer Kommandozeile ausführen und miteinander verknüpfen oder aber auch komplexe Skript-Programme mit der eigens dafür entwickelten PowerShell Scripting Language schreiben.
Die PowerShell erlaubt Zugriff auf WMI-Klassen, COM-Objekte sowie auf das gesamte .NET Framework.
PowerShell Engine
[Bearbeiten | Quelltext bearbeiten]Die PowerShell Engine (auch Shell, PowerShell Class oder PowerShell Runtime) ist der Kommandozeileninterpreter, der die Eingaben verarbeitet und damit das Herz der PowerShell. Die Engine ist eine Sammlung von .NET-Klassen, die in einer DLL (System.Management.Automation.dll
) gespeichert sind.
PowerShell Host
[Bearbeiten | Quelltext bearbeiten]Der PowerShell Host ist die Benutzerschnittstelle zur PowerShell Engine. In Windows steht standardmäßig die Windows PowerShell (auch Konsole) (powershell.exe
, bereitgestellt durch conhost.exe
) und Windows PowerShell ISE (Integrated Scripting Environment, kurz ISE) (powershell_ise.exe
) zur Verfügung. Die ISE ist ein modernes Eingabefenster mit unter anderem integriertem Skripteditor, Debugger und IntelliSense. Beide Hosts erlauben es auch, herkömmliche Kommandozeilenanwendungen auszuführen, wie beispielsweise ipconfig.exe
. Jedoch erlaubt die ISE keine Interaktion, wie zum Beispiel bei nslookup.exe
. Die ISE kann durch Add-ons erweitert werden; eine bekannte Erweiterung ist ISESteroids.
Auch Verwaltungskonsolen, wie etwa die Exchange Management Console (EMC) seit Exchange Server 2007, sind ein Host. Darüber hinaus gibt es auf dem Markt weitere Hosts, wie PowerShell Plus von Idera.
Zwar nutzen alle Hosts dieselbe Engine, doch da die Implementierung unterschiedlich sein kann, ist es auch möglich, dass sich die Hosts untereinander unterschiedlich verhalten.
PowerShell Scripting Language (PSL)
[Bearbeiten | Quelltext bearbeiten]Die PowerShell Scripting Language (PSL) ist die Sprache um Skripte für die PowerShell Engine zu entwickeln. Ab Version 2.0 kann die Skriptsprache auch verwendet werden, um eigene Cmdlets zu erstellen.
Die PowerShell-Sprache basiert auf dem IEEE 1003.2 POSIX Shell Standard und die Syntax ist an der Programmiersprache C# angelehnt.[19] Mit Version 5 wurde die Skriptsprache um Klassen erweitert.[20]
Anders als bei bisher existierenden objektorientierten Skript-Interpretern (BeanShell, Smalltalk, Python Shell) ist die Syntax der PowerShell-Skriptsprache, welche sich unter anderem Anleihen bei Perl, Unix-Shells, SQL und C nimmt, darauf ausgelegt, auch für den täglichen interaktiven Gebrauch als Shell für administrative Aufgaben wie etwa Dateiverwaltung geeignet zu sein.
Cmdlets
[Bearbeiten | Quelltext bearbeiten]Cmdlets (gesprochen Commandlets) werden die Befehle in einer PowerShell-Umgebung genannt. Der Begriff soll verdeutlichen, dass es sich um sehr kleine, spezielle Befehle handelt, etwa wie in Befehlchen. Im Gegensatz zu herkömmlichen Befehlen sind Cmdlets keine Standalone-Anwendungen, das heißt, sie können nicht ohne die PowerShell ausgeführt werden. Cmdlets können .NET-Klassen oder PowerShell-Skripte sein und mit wenigen Zeilen Programmcode geschrieben werden. Cmdlets parsen Eingaben in der Regel nicht selber, stellen Fehler nicht selbst dar und geben Ergebnisse unformatiert als Objekt wieder.[21] Die PowerShell-Engine bzw. Standard-Cmdlets nehmen Cmdlet-Entwicklern Arbeit von Standardaufgaben ab und vereinfachen und beschleunigen die Entwicklung. Gleichzeitig wird die Nutzbarkeit und Lesbarkeit von Skripten und Befehlen durch sehr strikte und ausführliche Namenskonventionen gewährleistet.
Die Anzahl der vorinstallierten Cmdlets steigt mit jeder Version. Sie liegt in der Version 5.1 der Legacy-PowerShell bei 489 Cmdlets und 766 mitgelieferten Funktionen und in der Core-Version 6.1 bei 287 Cmdlets und 145 mitgelieferten Funktionen im Kernpaket und 1900 Cmdlets mit zusätzlichen Modulen.[22][23]
Cmdlets folgen dem Namensschema Verb-Substantiv, also beispielsweise Get-Help
oder Set-Location
. Cmdlets sind durch das vorangestellte Verb aufgabenorientiert, sollen genau eine spezifische Aufgabe erfüllen und nur einen Objekttyp ausgeben, wie zum Beispiel Get-Process
, das alle laufenden Prozesse auflistet und als Objekt vom Typ System.Diagnostics.Process
ausgibt. Das Beenden von Prozessen ist eine eigene Aufgabe und ist daher ein eigenes Cmdlet (Stop-Process
). Das Auflisten von Diensten gibt andere Eigenschaften als bei Prozessen aus und hat daher ein anderes Substantiv (Get-Service
). Die resultierenden Objekte können über die Pipe (|
) von anderen Cmdlets weiterverarbeitet werden. So ist es möglich, übergebene Objekte zu filtern (z. B. Select-Object -Property Name,Status
, Where-Object -Property Status -EQ -Value Stopped
), zu konvertieren (z. B. Converto-Json
) oder auszugeben (z. B. Out-File
, Out-GridView
) (siehe auch Objekte und die Pipe).
Microsoft hat eine Liste mit erlaubten Verben veröffentlicht. Die Einhaltung der Verben wird nicht technisch erzwungen. Sie wird jedoch empfohlen, um die Bedienung zu vereinheitlichen.[24] Die Liste der freigegebenen Verben kann mit Get-Verb
abgerufen werden.
Für Cmdlets können Aliase hinterlegt werden, etwa um Kompatibilität zu alten Skripten herzustellen, das Umsteigen von anderen Systemen zu erleichtern oder einfach Befehle mit weniger Buchstaben ausführen zu können. Einige dieser Aliase werden bereits durch Module vordefiniert. So wird beispielsweise das Cmdlet Set-Location
verwendet, um das aktuelle Verzeichnis des Hosts zu definieren, es sind jedoch auch die Aliase sl
, cd
und chdir
verwendbar.
Die folgende Tabelle stellt eine Auswahl von Standard-Cmdlets mit Aliasen und vergleichbaren Befehlen anderer Kommandozeileninterpreter gegenüber.
PowerShell Cmdlet |
PowerShell Version |
PowerShell Alias |
cmd.exe |
Unix-Shell | Beschreibung |
---|---|---|---|---|---|
Get-Help | 1.0[25] | help, man | help | man | Hilfe zu Befehlen |
Get-Command | 1.0[25] | gcm | Listet alle im derzeitigen Kontext verfügbaren Befehle und Aliase auf. | ||
Get-Alias | 1.0[25] | gal | alias | Listet Aliase für Befehle auf. | |
Get-Location | 1.0[25] | gl, pwd | cd | pwd | Ausgabe des aktuellen Verzeichnisses |
Set-Location | 1.0[25] | sl, cd, chdir | cd, chdir | cd | Wechseln des aktuellen Verzeichnisses |
Clear-Host | 3.0[26] | cls, clear | cls | clear | Löschen der Ausgabe |
Copy-Item | 1.0[25] | cpi, copy, cp | copy | cp | Kopieren einer oder mehrerer Dateien / eines ganzen Verzeichnisbaums |
Remove-Item | 1.0[25] | ri, del, erase, rmdir, rd, rm | del, rmdir, rd | rm, rmdir | Löschen einer Datei / eines Verzeichnisses |
Rename-Item | 1.0[25] | rni, ren | ren | mv | Umbenennen einer Datei / eines Verzeichnisses |
Move-Item | 1.0[25] | mi, move, mv | move | mv | Verschieben einer Datei / eines Verzeichnisses |
Get-ChildItem | 1.0[25] | gci, dir, ls | dir | ls | Liste aller Dateien / Verzeichnisse im (aktuellen) Verzeichnis |
Write-Host | 1.0[25] | echo, write | echo | echo | Ausgabe von Zeichenketten, Variablen etc. in der Konsole |
Pop-Location | 1.0[25] | popd | popd | popd | In Verzeichnis wechseln, das zuletzt auf dem Stack abgelegt wurde |
Push-Location | 1.0[25] | pushd | pushd | pushd | Verzeichnis auf dem Stack ablegen |
Set-Variable | 1.0[25] | sv, set | set | set | Wert einer Variable setzen / Variable anlegen |
Start-Process | 2.0[27] | saps | start | Startet ein Programm im eigenen Fenster | |
Get-Content | 1.0[25] | gc, type, cat | type | cat | Ausgabe einer Datei |
Select-String | 1.0[25] | sls | find, findstr | grep | Suche und Filterung definierter Zeichenketten |
Get-Process | 1.0[25] | gps, ps | tlist,[28][29] tasklist[30] | ps | Liste aller momentan laufenden Prozesse |
Stop-Process | 1.0[25] | spps, kill | kill,[28][31] taskkill[32] | kill | Beenden eines laufenden Prozesses |
Stop-Computer | 2.0[27] | shutdown | shutdown, poweroff | Herunterfahren des Rechners | |
Restart-Computer | 2.0[27] | shutdown -r | reboot, shutdown -r | Neustart des Rechners | |
Tee-Object | 1.0[25] | tee | tee | Standardeingabe in eine Datei oder Variable umleiten und entlang der Pipeline weiterreichen (Standardausgabe) | |
Get-NetIPAddress | 3.0[33] | gip | ipconfig | ifconfig | Listet die Netzwerkschnittstellen mit Konfigurationsinformationen auf |
Get-Acl | 1.0[25] | acl | Listet die Zugriffsberechtigungen eines Ordners oder Dokuments auf. | ||
Get-Member | 1.0[25] | gm | Listet die Mitglieder (Member-Variablen) eines Objektes auf. | ||
Get-PSSnapin | 1.0[25] | gsnp | Listet die aktiven PowerShell-Erweiterungen auf. | ||
Export-Console | 1.0[25] | export | Exportiert die aktive Konfiguration der Konsole in eine Datei. Eine neue PowerShell-Instanz kann diese Konfiguration über den Parameter -psconsolefile <String> beim Start laden.
|
Parameter werden nach dem Cmdlet mit -Parametername [Wert]
angegeben. Ein Parameter kann unterschiedliche Eigenschaften besitzen, so kann er beispielsweise einen Standardwert haben, erforderlich oder positionsbezogen sein oder Werte aus der Pipe akzeptieren. Welche Parameter für ein Cmdlet verfügbar sind und welche Eigenschaften sie besitzen, kann mit Get-Help
geprüft werden (z. B. Get-Help -Name Get-NetIPAddress -Parameter *
).
Zusätzlich zu Cmdlet-spezifischen Parametern gibt es auch sogenannte Common Parameter, also allgemein verfügbare Parameter. Dazu zählt -Verbose
zur Ausgabe von Detailinformationen, -ErrorAction
, um festzulegen, wie bei einem Fehler verfahren werden soll oder -WhatIf
, um sich ausgeben zu lassen, was passieren würde, wenn man den Befehl ausführt, ohne dass tatsächlich Änderungen gemacht werden.
Module sind die bevorzugte Art, um Cmdlets zu veröffentlichen und in PowerShell zu laden. Module bestehen aus dem Cmdlet-Programmcode (als PowerShell-Skript oder .NET-Klasse) und einem Manifest, das den Inhalt des Moduls beschreibt.[34] In PowerShell 1.0 war es ausschließlich über PSSnapins (Snap-ins) möglich, Cmdlets zu laden. Dies wurde jedoch durch die Funktion der Module ersetzt.[35]
PowerShell Provider
[Bearbeiten | Quelltext bearbeiten]PowerShell Provider (auch PSProvider) bieten den Zugriff auf Daten und Komponenten (Namensräume), die sonst nicht einfach über den Host abrufbar wären, und präsentieren die Daten in einem konsistenten Format als Laufwerke. Das bekannteste Beispiel dafür ist das Dateisystem, welches eine Partition als Laufwerk C darstellt. Es sind jedoch auch weitere Provider möglich, wie etwa Variablen, die Registry, Active Directory und der Zertifikatsspeicher. In allen Laufwerken (zum Beispiel C:
, D:
, Env:
, HKLM:
oder Cert:
) kann gleichermaßen navigiert oder Elemente verarbeitet werden (Set-Location
, Get-ChildItem
, Remove-Item
, …).
Liste von Providern
[Bearbeiten | Quelltext bearbeiten]Folgende Liste zeigt einige der Standardprovider in PowerShell.
Name | Typ | Aufgabe |
---|---|---|
Alias | Container | Bindet ein logisches Laufwerk mit dem Namen „Alias:“ ein. Über dieses Laufwerk lassen sich als Schlüssel-Wert Paare definierte Alias (etwa mit Get-ChildItem Alias: ) abrufen.
|
Environment | Container | Bindet ein logisches Laufwerk mit dem Namen „env:“ ein. Über dieses Laufwerk lassen sich die Umgebungsvariablen abfragen. |
FileSystem | Navigation | Über den FileSystem Provider wird der Zugriff auf das Dateisystem ermöglicht. Über den FileSystem-Provider können Laufwerke, Wechseldatenträger, Netzlaufwerke, u. ä., sowie die darauf befindlichen Dateien und Ordner zugegriffen werden. Laufwerke werden dabei jedoch nicht als logisches Laufwerk in PowerShell integriert, sondern als Referenz im Function-Provider hinterlegt. |
Function | Container | Verwaltet Funktionen, welche mit New-Item erstellt oder in einem PowerShell-Skript deklariert wurden.
|
Registry | Navigation | Ermöglicht unter Windows den Zugriff auf die Registrierungsdatenbank. Standardmäßig werden die Laufwerke „HKLM:“ (für HKEY_LOCAL_MACHINE ) und „HKLU:“ (für HKEY_LOCAL_USER ) erstellt. Weitere Laufwerke lassen sich bei Bedarf mit New-PSDrive (z. B. New-PSDrive -name HKU -psprovider Registry -root HKEY_USERS ) anlegen.
|
Variable | Container | Verwaltet die im PowerShell-Host erstellten Variablen und deren Werte und bindet diese als logisches Laufwerk „Variable:“ ein. |
Certificate | Navigation | Verwaltet die Sicherheitszertifikate des Systems und bindet sich als logisches Laufwerk „Cert:“ ein. Der Certificate-Provider wird von Get-PSProvider nicht aufgelistet.
|
Versionen
[Bearbeiten | Quelltext bearbeiten]Windows PowerShell 1.0
[Bearbeiten | Quelltext bearbeiten]Die erste Version von PowerShell erscheint 2006 als ein Grundgerüst mit den wichtigsten Funktionen der PowerShell. Insbesondere der Kommandozeileninterpreter ist sehr mächtig, so gibt es bereits die objektbasierte Pipe, eine eigene Skriptsprache und ein Sicherheitsmodell. PowerShell kann sogenannte Namensräume wie das Dateisystem, den Zertifikatsspeicher oder die Registry ansprechen. Cmdlets können ausschließlich in .NET geschrieben werden, Skripte können auf entfernten Computern nur per WMI ausgeführt werden, die verfügbare Konsole ist sehr einfach gehalten.
Windows PowerShell 2.0
[Bearbeiten | Quelltext bearbeiten]2009 wird mit PowerShell 2.0 die Erstellung von neuen Cmdlets drastisch vereinfacht. Cmdlets können erstmals auch als Skripte geschrieben werden. Auch die Hilfe, basierend auf Kommentaren in Cmdlets, wird eingeführt. Cmdlets können als Module zusammengefasst werden. Außerdem wird die PowerShell ISE eingeführt, eine leistungsfähige Konsole mit eingebautem Skripteditor. Zur Verwaltung von entfernten Computern wird PowerShell Remoting eingeführt. Zusätzlich kann PowerShell nun Jobs erstellen, die im Hintergrund abgearbeitet werden.
Windows PowerShell 3.0
[Bearbeiten | Quelltext bearbeiten]2012 wird die PowerShell in der Version 3.0 ausgereifter und benutzerfreundlicher. Workflows auf Basis der Windows Workflow Foundation werden eingeführt, womit es mit geringen Mitteln möglich ist, Aufgaben parallel erledigen zu lassen. Erstmals wird CIM und JSON unterstützt. Im System verfügbare Module werden automatisch geladen und stehen dem Administrator somit sofort zur Verfügung.
Windows PowerShell 4.0
[Bearbeiten | Quelltext bearbeiten]Mit PowerShell 4.0 wird 2013 Desired State Configuration (DSC) eingeführt, eine deklarative Sprache zur Konfiguration von Systemen.
Windows PowerShell 5.0
[Bearbeiten | Quelltext bearbeiten]2015 wird in PowerShell 5.0 die Desired State Configuration (DSC) deutlich erweitert und verbessert. Außerdem werden Klassen, welche es erlauben Skripte formaler entwickeln zu lassen, und Oneget, eine Paketverwaltung für PowerShell, eingeführt. In der PowerShell ISE können Skripte nun auch in Sitzungen auf entfernten Computern geändert werden.
Windows PowerShell 5.1
[Bearbeiten | Quelltext bearbeiten]PowerShell 5.1, die aktuelle und voraussichtlich letzte Windows PowerShell Version, erscheint 2016. Sie wird im Rahmen von Windows unterstützt, jedoch nicht mehr aktiv weiterentwickelt. PowerShell 5.1 bleibt auch auf Windows Server 2019 die vorinstallierte PowerShell-Version.[36] Mit PowerShell 5.1 ist die erste Core Version der PowerShell verfügbar und diese läuft nur auf Windows Nano Server 2016.[37]
PowerShell Core 6
[Bearbeiten | Quelltext bearbeiten]PowerShell 6.0 ist die erste plattformübergreifende, quelloffene Version der PowerShell und läuft auf Windows, macOS und Linux. Die Entwicklung wird 2016 angekündigt, bevor 2018 das erste GA-Release erscheint. Sie basiert auf .NET Core 2.0 und hat einen stark eingeschränkten Funktionsumfang gegenüber der PowerShell-Version 5.1.[38]
PowerShell 6.1 basiert auf .NET Core 2.1[39] und erweitert mit der Unterstützung vieler existierende Module den Funktionsumfang beträchtlich. Auf Windows werden nun 432 Cmdlets und mitgelieferte Funktionen unterstützt (PowerShell 5.1: 1264 Cmdlets und Funktionen), sowie weitere 1468 Cmdlets über externe Module.[23]
Der Kommandozeilenname von PowerShell 6 wurde von powershell.exe in pwsh.exe umbenannt, dies erlaubt eine leichtere Unterscheidung beim Aufruf der Powershell, wenn sowohl PowerShell Core, als auch die klassische Powershell installiert sind.[40]
PowerShell 7
[Bearbeiten | Quelltext bearbeiten]Mit PowerShell 7[41] wird 2020 sowohl das Präfix Windows wie auch das Suffix Core entfernt und kennzeichnet damit, dass es der Nachfolger der Windows PowerShell 5.1, wie von PowerShell Core 6 ist. Insbesondere die Kompatibilität zu in Windows mitgelieferten PowerShell-Modulen wurde verbessert. PowerShell 7 basiert auf .NET 5, worauf auch der Supportlebenszyklus angepasst wurde.[42]
Objekte und die Pipe
[Bearbeiten | Quelltext bearbeiten]Andere Kommandozeileninterpreter wie Cmd.exe, Bash oder DCL sind textbasiert, wohingegen PowerShell mit Objekten arbeitet. Objekte können Eigenschaften (Properties), Methoden (Methods) und Ereignisse (Events) enthalten.
Get-Member
zeigt den Typ sowie die Eigenschaften und Methoden von Objekten.
Für die Systemverwaltung/Administration bedeutet dies, dass Ergebnisse von Befehlen nicht mehr als Text (unstrukturierte Daten), sondern Objekte (strukturierte Daten) vorliegen. Dies wirkt sich auch auf die Pipe aus.
Die Pipe (|
) in textbasierten Kommandozeileninterpretern verbindet die Standardausgabe stdout
mit der Standardeingabe stdin
des darauffolgenden Befehls. In PowerShell werden Daten in der Pipe abgelegt und die Pipe muss die Daten an das darauffolgende Cmdlet binden. Ob und wie Eingaben von einer Pipe erlaubt sind, entscheidet jedes Cmdlet für jeden Parameter selbst. Das heißt, die Pipe muss prüfen, ob der Folgebefehl das Binden an einen Parameter erlaubt. Dabei wird zwischen zwei Arten von Bindungen unterschieden: ByValue
oder ByPropertyName
. Bei ByValue
muss der Objekttyp in der Pipe mit dem geforderten Objekttyp übereinstimmen. Bei ByPropertyName
muss der Name einer Eigenschaft des Objekts mit dem Namen des Parameters des Folgebefehls übereinstimmen. ByValue
wird ByPropertyName
gegenüber bevorzugt.
Arbeitet man mit herkömmlichen Konsolenanwendungen in einem PowerShell Host wird der Standardoutput stdout
in ein Objekt des Typs String
umgewandelt.
Dieses Modell ist anfangs komplex, jedoch ergeben sich dadurch in der Praxis auch Vorteile beim Filtern und Verarbeiten von Informationen, wie folgende Beispiele verdeutlichen sollen.
Beispiel 1: Es sollen alle gestoppten Dienste eines entfernten Computers gestartet werden, mit einer Ausgabe, welche Dienste gestartet wurden.
# Listet alle Dienste auf einem entfernten Computer auf
# Filtert die zurückgegebene Dienste nach denen, die gestoppt sind
# Startet all diese Dienste und gibt die verarbeiteten Objekte an die Pipeline weiter (-PassThru)
# Gibt die Eigenschaften MachineName, DisplayName und Status der gestarteten Dienste aus
Get-Service -ComputerName Server01 | Where-Object -Property Status -EQ -Value Stopped | Start-Service -PassThru | Select-Object -Property MachineName, DisplayName, Status
Beispiel 2: Auf dem lokalen Computer sollen die 10 Prozesse von Microsoft mit der höchsten Arbeitsspeichernutzung (in Megabyte) in absteigender Reihenfolge in einer CSV-Datei abgespeichert werden.
# Listet alle gestarteten Prozesse auf dem lokalen Computer auf
# Filtert nach Prozessen der Firma Microsoft
# Sortiert nach Arbeitsspeichernutzung (WorkingSet64) absteigend (-Descending)
# Filtert auf die Eigenschaften ProcessName und MemoryUsageMB, wobei MemoryUsageMB ein ''Custom Property'' ist, das zur Laufzeit die bestehende Eigenschaft WorkingSet64 in MB und auf ganze Zahlen gerundet darstellt
# Filtert auf die ersten 10 Objekte
# Das Objekt wird in ein CSV-Format umgewandelt
# und in einer Datei gespeichert
Get-Process | Where-Object -Property Company -EQ -Value 'Microsoft Corporation' | Sort-Object -Property WorkingSet64 -Descending | Select-Object ProcessName,@{Name='MemoryUsageMB';Expression={[math]::round($PSItem.WorkingSet64/1MB,0)}} | Select-Object -First 10 | ConvertTo-Csv | Out-File -FilePath $env:TEMP\TopProcesses.csv
PowerShell arbeitet bei Objekten mit einer dynamischen Typisierung. Dabei kommt ein erweitertes Typsystem (englisch: extended type system, ETS) zum Einsatz, bei dem .NET-Objekte in der Klasse PSObject
gekapselt werden. PSObject
stellt hierbei die Basisklasse für PowerShell-Objekte dar. PSObject
entspricht damit einer Monade.
In C#:
using System;
using System.Management.Automation;
namespace PowerShell
{
public class PSObjectExample
{
public void Main()
{
var time = DateTime.UtcNow;
var powerTime = new PSObject(time);
}
}
}
|
In PowerShell:
# Aufruf einer statischen Methode mit [ClassName]::Method
# Variable $time ist explizit typisiert
[System.DateTime]$time = [System.DateTime]::UtcNow
# explizites Typecasting nach PSObject
# Variable $powerTime ist implizit typisiert
$powerTime = [System.Management.Automation.PSObject]$time
# Aufruf eines Konstruktors
$powerTime = New-Object System.Management.Automation.PSObject($time)
|
PowerShell bietet implizite Typkonvertierung. Dabei kommen Typkonverter zum Einsatz, von denen einige vorgegeben sind:
Typ | Konvertiert nach | Methode |
---|---|---|
null | String | gibt String.Empty zurück
|
null | Char | gibt '\0' zurück
|
null | Numeric | gibt 0 zurück
|
null | Boolean | gibt false zurück
|
null | Nullable<T> | gibt null zurück
|
null | Objektreferenz | gibt null zurück
|
Klasse | Basisklasse | Boxing der Klasse auf die Basisklasse |
object | void | gibt AutomationNull.Value zurück
|
object | String | gibt value.ToString() zurück
|
object | Boolean | gibt das Ergebnis von LanguagePrimitives.IsTrue(value) zurück
|
object | PSObject | gibt PSObject.AsPSObject(value) zurück
|
object | XMLDocument | ruft die value.ToString() -Methode auf und übergibt das Ergebnis dem XMLDocument Konstruktor
|
object | Nullable<T> | das Objekt wird mit (T)value konvertiert und als Nullable-Monade zurückgegeben
|
Array | Array | Konvertierung der einzelnen Array-Elemente |
IDictionary | Hashtable | gibt new Hashtable(value) zurück
|
String | Char[] | gibt value.ToCharArray() zurück
|
String | RegEx | gibt new RegEx(value) zurück
|
String | Type | Deserialisierung über RunSpaceConfiguration.Assemblies
|
String | Numeric | 0 für String.Empty . Versucht den Wert mit Culture.InvariantCulture zu parsen.
|
Integer | System.Enum | Liefert den Enum-Wert zurück, der dem Integer zugewiesen ist. throw new PSInvalidCastException() falls das nicht möglich ist.
|
Skripte
[Bearbeiten | Quelltext bearbeiten]PowerShell-Skripte können in einer Skript-Datei zusammengefasst werden. Skript-Dateien enthalten Funktionen mit zugehöriger Beschreibung in einem Kommentarblock sowie Variablen und Befehle. Skript-Dateien haben die Endung .ps1
und werden mit dem Befehl .
, gefolgt vom vollständigen Namen der Datei geladen und verarbeitet.
- Beispiel
<#
.SYNOPSIS
Hello World Application.
.DESCRIPTION
This script is a more complex Hello World function that intends to show some of the syntax of PowerShell.
To use it, write ". ./Write-Hello.ps1" (dot, space, filename) into your PowerShell first, so that the script gets loaded.
.NOTES
File Name: Write-Hello.ps1
.EXAMPLE
Write-Hello
Hello World!
.EXAMPLE
Write-Hello "World"
Hello World!
.EXAMPLE
greet "World"
Hello World!
.EXAMPLE
Write-Hello -Name "World"
Hello World!
.EXAMPLE
"World" | Write-Hello
Hello World!
.EXAMPLE
@("Jack", "Jill") | Write-Hello
Hello Jack!
Hello Jill!
.ALIAS
greet
.LINK
http://de.wikipedia.org/wiki/PowerShell
.INPUTTYPE
Takes a name of type [string].
.RETURNVALUE
Output a greeting of type [string].
.PARAMETER Name
A list of names of the persons to greet. Greets the world by default.
#>
function Write-Hello
{
[CmdletBinding()]
param(
# get name parameter from the pipeline or as a parameter
[Parameter(Mandatory = $False, Position = 0, ValueFromPipeline = $True, HelpMessage = "The name to greet.")]
[string]$Name = "World"
)
begin {
# load assemblies from Global Assembly Cache (deprecated method)
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Exception")
# cancel the execution if an error occurs
$ErrorActionPreference = "Stop"
}
# process once for every input that was given
process {
try {
if($Name -eq "Error") {
throw New-Object System.Exception("The name must not be 'Error'.")
}
}
catch [System.Exception] {
Write-Error $_
}
# process the request
[string]$Greeting = [string]::Format("Hello {0}!", $Name)
# outputs a string object to the PowerShell pipeline
# note: using write-host calls .ToString() method on the returned object
Write-Output $Greeting
}
end {
}
}
# setting an alias
Set-Alias greet Write-Hello
Beispiele
[Bearbeiten | Quelltext bearbeiten]Gib die Zeichenfolge "Hallo Welt!" auf der Konsole aus:
Write-Host "Hallo Welt!"
Write-Host
erzwingt dabei die Ausgabe auf der Konsole. Die Ausgabe wird nicht an die Pipeline weitergegeben und kann nicht weiterverarbeitet werden. Write-Output
würde die Ausgabe sowohl an die Konsole, als auch die Pipeline weitergeben.
Hole alle Prozesse, deren Namen mit dem Buchstaben „p“ beginnen:
Get-Process p*
Hole alle Prozesse, die mehr als 10 MB Hauptspeicher verwenden:
Get-Process | where { $_.WS -gt 10MB }
where
ist ein Alias für Where-Object
und filtert das ausgegebene Objekt von Get-Process
auf alle Elemente die als Eigenschaft WS ($_.WS
) einen Wert größer 10 MB haben. PowerShell kennt die Maßeinheit Byte und rechnet 10 MB in 10485760 um.
Berechne die Gesamtanzahl der Bytes aller Dateien in einem Verzeichnis:
Get-ChildItem | Measure-Object -Property Length -Sum
Warte, bis ein bestimmter Prozess beendet wurde:
$processToWatch = Get-Process notepad
$processToWatch.WaitForExit()
Ändere eine Zeichenkette von Kleinbuchstaben in Großbuchstaben:
"hallo welt!".ToUpper()
Füge die Zeichenfolge „ABC“ nach dem ersten Buchstaben des Wortes „string“ ein, um als Ergebnis „sABCtring“ zu erhalten:
"string".Insert(1, "ABC")
Lade einen bestimmten RSS-Web-Feed herunter und zeige die Überschriften der acht neuesten Einträge:
$rssUrl = "https://devblogs.microsoft.com/powershell/feed/"
$blog = [xml] (New-Object System.Net.WebClient).DownloadString($rssUrl)
$blog.rss.channel.item | select title -First 8
Lösche die komplette Festplatte ohne Rückfrage, Äquivalent zu rm -rf / unter Unix:
Get-PSDrive -p "FileSystem" | % { ls -Recurse $_.Root | rm –Force }
Dateiendungen
[Bearbeiten | Quelltext bearbeiten]- .ps1 – Windows PowerShell Shellskript
- .ps1xml – Windows PowerShell Format- und Typdefinitionen
- .psc1 – Windows PowerShell Konsolendatei (exportierte Shell-Konfiguration)
- .psd1 – Windows PowerShell Datendatei
- .psm1 – Windows PowerShell Moduldatei
Software-Unterstützung
[Bearbeiten | Quelltext bearbeiten]Unterstützt werden unter anderem folgende Systeme:
Software | Version | Cmdlets | Provider | Grafische Benutzeroberfläche |
---|---|---|---|---|
Microsoft Exchange Server | 2007 | ja (402) | ja | ja |
Microsoft Exchange Server | 2010 | ja | ja | ja |
Microsoft Windows Server | 2008 | ja | ja | nein |
Microsoft Windows Server | 2008 Core | nein | nein | nein |
Microsoft Windows Server | Microsoft Windows Server 2008 R2 | ja | nein | nein |
Microsoft SQL Server | 2008 | ja | ja | nein |
SharePoint | 2010, 2013 | ja | ja | nein |
Microsoft System Center Operations Manager | 2007 | ja (74) | ja | nein |
Microsoft System Center Virtual Machine Manager | 2007 | ja | ja | ja |
Microsoft System Center Data Protection Manager | 2007 | ja | nein | nein |
Microsoft Windows Compute Cluster Server | 2007 | ja | ja | nein |
Microsoft Transporter Suite for Lotus Domino[43] | 08.02.0012 | ja (47) | nein | nein |
Microsoft PowerTools for Open XML[44] | 1.0 | ja (33) | nein | nein |
IBM WebSphere MQ[45] | 6.0.2.2 | ja (44) | nein | nein |
Quest Management Shell for Active Directory[46] | 1.1 | ja (40) | nein | nein |
Special Operations Software Specops Command[47] | 1.0 | ja | nein | ja |
VMware Infrastructure Toolkit[48] | 1.0 Update 1 | ja (125) | nein | nein |
Internet Information Services[49] | 7.0 | ja (54) | ja | nein |
Microsoft Windows 7 Troubleshooting Center | 6.1 | ja | nein | ja |
Microsoft Deployment Toolkit | 2010 | ja | nein | nein |
LOGINventory | 5.x | ja | ja | ja |
Citrix XenApp | seit v5.x | ja | ja | ja |
Citrix XenDesktop | seit v5.x | ja | ja | ja |
Literatur
[Bearbeiten | Quelltext bearbeiten]- Deutsch
- Ulrich Cuber: Windows PowerShell. Mitp-Verlag 2007, ISBN 978-3-8266-1673-0.
- Lee Holmes, Rolf Masuch: Windows PowerShell 3.0 kurz & gut. 3. Auflage. O’Reilly, 2013, ISBN 978-3-95561-055-5.
- Peter Monadjemi: Windows PowerShell – Crashkurs. Microsoft Press Deutschland 2007, ISBN 978-3-86645-617-4.
- Andy Oakley: Schnelleinstieg in die Windows PowerShell. O’Reilly Verlag 2007, ISBN 978-3-89721-487-3.
- Bruce Payette: Windows PowerShell im Einsatz. Hanser Fachbuchverlag 2007, ISBN 978-3-446-41239-2.
- Holger Schwichtenberg: Windows PowerShell. Addison-Wesley 2007, ISBN 978-3-8273-2533-4.
- Holger Schwichtenberg: Windows Scripting. Automatisierte Systemadministration mit dem Windows Script Host und der Windows PowerShell. Addison-Wesley 2007, ISBN 978-3-8273-2423-8.
- Helma Spona: Windows PowerShell. Sprachgrundlagen, Dateisystem, Datenbankzugriffe, WMI-Steuerung. Galileo Press 2007, ISBN 978-3-89842-880-4.
- Tobias Weltner: Scripting mit Windows PowerShell – Einsteiger-Workshop. Microsoft Press Deutschland 2007, ISBN 978-3-86645-620-4.
- Tobias Weltner: PowerShell Scripting für Administratoren. Microsoft Press Deutschland 2008, ISBN 978-3-86645-635-8.
- Englisch
- Jerry Lee Ford Jr.: Microsoft Windows Powershell Programming for the Absolute Beginner. Course Technology Ptr 2007, ISBN 1-59863-354-6.
- Lee Holmes: Windows PowerShell Quick Reference. O’Reilly 2006, ISBN 0-596-52813-2.
- Don Jones: An Introduction to Microsoft® PowerShell™. Realtimepublishers.com 2006.
- Don Jones, Jeffery Hicks: Windows PowerShell™: TFM®. SAPIEN Press 2006, ISBN 0-9776597-1-2.
- Tyson Kopczynski: Microsoft Powershell Unleashed. Sams Publishing 2007, ISBN 0-672-32953-0.
- Andy Oakley: Monad – Introducing the MSH Command Shell and Language. O’Reilly 2006, ISBN 0-596-10009-4.
- Bruce Payette: Windows PowerShell in Action. Manning Publications, ISBN 1-932394-90-7.
- Andrew Watt: Professional Windows PowerShell. Wrox Press 2007, ISBN 0-471-94693-1.
- Ed Wilson: Microsoft® Windows PowerShell™ Step By Step. Microsoft Press 2007, ISBN 0-7356-2395-3.
- Steve Seguis: Windows PowerShell 2 for Dummies, ISBN 978-0-470-37198-5
- Arul Kumaravel, Jon White, Michael Naixin Li, Scott Happell, Guohui Xie, Krishna C. Vutukuri: Professional Windows PowerShell Programming: Snapins, Cmdlets, Hosts and Providers (= Wrox Professional Series). 1. Auflage. John Wiley & Sons, 2008, ISBN 978-0-470-17393-0 (Standardwerk zur PowerShell-Entwicklung mit C#).
Weblinks
[Bearbeiten | Quelltext bearbeiten]- PowerShell 7.0 freigegeben: Eine Shell für (fast) alle und (fast) alles März 2020, heise online
- Schnellreferenzen
- Windows PowerShell Quick Reference. In: Download Center. Microsoft, abgerufen am 6. August 2013 (englisch).
- Einführung
- Microsoft TechnNet: Skripterstellung mit Windows PowerShell – Microsofts Einstiegs-Seite zur Windows PowerShell
- Die Neuerungen von PowerShell 3.0 im Überblick
- Muschelzucht im Ausland – PowerShell-Artikel erschienen im Linux-Magazin 2006/12
- PowerShell für Exchange und Sharepoint – ADMIN-Magazin 01/2011
- Blogs
- Weblog des PowerShell-Entwicklerteams (en) – Informationen und Neuigkeiten zur PowerShell aus erster Hand
- PowerShell Magazine. Abgerufen am 16. April 2014 (englisch).
- Cmdlets und Module
- PowerGUI. Abgerufen am 6. August 2013 (englisch, PowerShell Community und Anbieter eines kostenlosen Grafischen User Interfaces und Skripteditor für Microsoft Windows Powershell).
- Windows PowerShell for Windows Server 2012 and Windows 8. In: TechNet. Microsoft, abgerufen am 6. August 2013 (englisch, PowerShell Module in Windows Server 2012 und Windows 8).
- Script Center. In: TechNet. Microsoft, abgerufen am 6. August 2013 (englisch).
- PowerShell scripts, modules and cmdlets for IT Admins. In: CodePlex. Abgerufen am 6. August 2013 (englisch).
- Popular PowerShell Modules. In: TechNet. Microsoft, abgerufen am 6. August 2013 (englisch, Übersicht über häufig genutzte PowerShell Module).
- Powershell für Exchange und Sharepoint. ADMIN-Magazin, abgerufen am 9. Januar 2015 (Modul zur Verwaltung von Office 365).
- Office 365 mit der Powershell verwalten. ADMIN-Magazin, abgerufen am 9. Januar 2015 (Module für Exchange und Sharepoint).
- Portierungen
- BDD und Unit Testing Frameworks
- Pester. In: Github. Abgerufen am 16. April 2014 (englisch).
- PS Unit. In: CodePlex. Abgerufen am 16. April 2014 (englisch).
- PsTest. Abgerufen am 16. April 2014 (englisch).
- Automation, Delegation & Management mit PowerShell Skripten
- ScriptRunner: Automation & Collaboration Plattform für PowerShell – ScriptRunner ermöglicht eine schnelle, einfache und sichere Automatisierung und Delegation von Skripten sowie das Erstellen, Verwalten und Überwachen von Skripten und Ausführungsrichtlinien.
- Sonstiges
- Adam R Driscoll: PowerShell Tools for Visual Studio. In: Visual Studio Gallery. Microsoft, abgerufen am 12. April 2014 (englisch).
Einzelnachweise
[Bearbeiten | Quelltext bearbeiten]- ↑ Release 7.5.0. 23. Januar 2025 (abgerufen am 26. Januar 2025).
- ↑ The powershell Open Source Project on Open Hub: Languages Page. In: Open Hub. (abgerufen am 30. Oktober 2018).
- ↑ a b PowerShell Lizenz auf Github
- ↑ PowerShell Readme-Datei auf Github
- ↑ a b blogs.msdn.microsoft.com: PowerShell on Linux and Open Source
- ↑ msdn.microsoft.com: Windows Management Framework (WMF) 5.0 RTM – Anmerkungen zu dieser Version – Übersicht
- ↑ technet.microsoft.com: PowerShell unter Nano Server
- ↑ PowerShell auf Github
- ↑ PowerShell.org auf YouTube: Snover Monad Manifesto Revisited
- ↑ jsnover.com: Monad Manifesto (PDF; 371 kB)
- ↑ blogs.msdn.microsoft.com: Windows PowerShell (Monad) Has Arrived
- ↑ blogs.msdn.microsoft.com: It’s a Wrap! Windows PowerShell 1.0 Released!
- ↑ YouTube: Jeffrey Snover 2015 auf dem DevOps Enterprise Summit über The Cultural Battle To Remove Windows from Windows Server
- ↑ blogs.msdn.microsoft.com: PowerShell To Be Added to Common Engineering Criteria
- ↑ blogs.msdn.microsoft.com: Windows PowerShell 2.0 RTM
- ↑ blogs.msdn.microsoft.com: Windows PowerShell 2.0 on Windows Update
- ↑ azure.microsoft.com: PowerShell is open sourced and is available on Linux
- ↑ Windows PowerShell. In: Microsoft TechNet. Microsoft, archiviert vom (nicht mehr online verfügbar) am 21. Dezember 2007; abgerufen am 3. September 2016.
- ↑ Bruce Payette, Richard Siddaway: Windows PowerShell in Action. 3. Ausgabe. Manning, Shelter Island 2018, ISBN 978-1-63343-029-7, S. 17–18.
- ↑ Bruce Payette, Richard Siddaway: Windows PowerShell in Action. Shelter Island 2018, S. 762.
- ↑ msdn.microsoft.com: Cmdlet Overview
- ↑ Neuerungen in Windows PowerShell 5.0. Abgerufen am 30. Januar 2019.
- ↑ a b Neuigkeiten in PowerShell Core 6.1. Abgerufen am 30. Januar 2019.
- ↑ Approved Verbs for Windows PowerShell Commands. In: Windows Dev Center. Microsoft, abgerufen am 3. August 2013 (englisch).
- ↑ a b c d e f g h i j k l m n o p q r s t u v w Tomoaki Yoshizawa: PowerShell 1.0 Cmdlets. In: Microsoft TechNet. Abgerufen am 3. September 2016.
- ↑ Windows PowerShell Core Cmdlets. Windows PowerShell 3.0. In: Microsoft Developer Network. Microsoft, abgerufen am 3. September 2016.
- ↑ a b c Overview of Cmdlets Available in Windows PowerShell. In: Microsoft TechNet. Microsoft, abgerufen am 3. September 2016.
- ↑ a b Alphabetical List of Tools in the Windows NT 4.0 Resource Kit Supplement 4. Microsoft, abgerufen am 10. Februar 2016.
- ↑ TList. Microsoft, abgerufen am 10. Februar 2016.
- ↑ Tasklist. Microsoft, abgerufen am 10. Februar 2016.
- ↑ Kill Tool. Microsoft, abgerufen am 10. Februar 2016.
- ↑ Taskkill. Microsoft, abgerufen am 10. Februar 2016.
- ↑ Net TCP/IP Cmdlets in Windows PowerShell. Windows Server 2012 and Windows 8. In: Microsoft Developer Network. Microsoft, abgerufen am 3. September 2016.
- ↑ msdn.microsoft.com: Understanding a Windows PowerShell Module
- ↑ msdn.microsoft.com PowerShell Referenz: about_PSSnapins
- ↑ about_Windows_PowerShell_5.1. Abgerufen am 30. Januar 2019 (amerikanisches Englisch).
- ↑ PowerShell unter Nano Server. Abgerufen am 30. Januar 2019.
- ↑ Neuigkeiten in PowerShell Core 6.0. Abgerufen am 30. Januar 2019.
- ↑ Weitere Informationen zu .NET Core. Abgerufen am 30. Januar 2019 (deutsch).
- ↑ https://docs.microsoft.com/de-de/powershell/scripting/whats-new/what-s-new-in-powershell-core-60?view=powershell-7#renamed-powershellexe-to-pwshexe
- ↑ Announcing PowerShell 7.0. 4. März 2020, abgerufen am 30. März 2020 (amerikanisches Englisch).
- ↑ Supportlebenszyklus von PowerShell. 11. November 2020, abgerufen am 16. Januar 2021.
- ↑ Microsoft Transporter Suite for Lotus Domino. Abgerufen am 18. Februar 2008.
- ↑ PowerTools for Open XML. Abgerufen am 20. Juni 2008.
- ↑ MO74: WebSphere MQ – Windows Powershell Library. Abgerufen am 18. Februar 2008.
- ↑ PowerShell Commands for Active Directory by Quest Software. Abgerufen am 2. Juli 2008.
- ↑ PowerShell Remoting through Group Policy. Abgerufen am 18. Februar 2008.
- ↑ VMware Infrastructure Toolkit for Windows. Archiviert vom (nicht mehr online verfügbar) am 21. November 2008; abgerufen am 26. November 2008.
- ↑ Windows PowerShell: IIS7 PowerShell Provider Tech Preview 2. Abgerufen am 3. Juli 2008.