PowerShell (PS)

Eintrag zuletzt aktualisiert am: 12.01.2025
 siehe auch Windows PowerShell

Die PowerShell ist eine .NET-basierte Laufzeitumgebung für kommandozeilenbasierte Befehle und Skripte. Sie wird für die System- und Netzwerkadministration sowie allgemein für Automatisierungsprozesse, z.B. Datenim- und exporte sowie DevOps-Pipelines eingesetzt.

Varianten der PowerShell

PowerShell ist
  • der Kurzname für Windows PowerShell (Versionen 1.0 bis 5.1) und
  • der Kurzname für PowerShell Core (Versionen 6.0 bis 6.2) und
  • offizieller Name der PowerShell (seit Version 7.0

Plattformen

Während die Windows PowerShell nur auf Windows läuft, gibt es die PowerShell Core und die PowerShell ab Version 7.0 auch für Linux und MacOS.

Versionen

  • PowerShell 1.0 ist erschienen am 06.11.2006 (Windows PowerShell 1.0; verfügbar für: Windows XP und höher)
  • PowerShell 2.0 ist erschienen am 22.07.2009 (Windows PowerShell 2.0; verfügbar für: Windows XP und höher)
  • PowerShell 3.0 ist erschienen am 15.08.2012 (Windows PowerShell 3.0; verfügbar für: Windows 7/Windows Server 2008 und höher; enthalten in Windows 8 / Windows Server 2012)
  • PowerShell 4.0 ist erschienen am 09.09.2013 (Windows PowerShell 4.0; verfügbar für: Windows 7/Windows Server 2008 und höher; enthalten in Windows 8.1 / Windows Server 2012 R2)
  • PowerShell 5.0 ist erschienen am 29.07.2015 (Windows PowerShell 5.0; für Windows 10; PowerShell 5.0 für Windows 7 und Windows 8.1: 18.12.2015)
  • PowerShell 5.1 ist erschienen am 26.09.2016 (Windows PowerShell 5.1; in Windows Server 2016; Add-On für Windows 7, Windows 8.1, Windows Server 2008 R2, 2012, 2012 R2)
  • PowerShell Core 6.0 ist erschienen am 20.01.2018 (meldet sich mit PowerShell 6.0)
  • PowerShell Core 6.1 ist erschienen am 13.09.2018 (meldet sich mit PowerShell 6.1)
  • PowerShell Core 6.2 ist erschienen am 28.03.2019 (meldet sich mit PowerShell 6.2)
  • PowerShell 7.0 ist erschienen am 04.03.2020 (meldet sich mit "PowerShell 7.0", basiert auf .NET Core 3.1)
  • PowerShell 7.1 ist erschienen am 11.11.2020 (meldet sich mit "PowerShell 7.1", basiert auf .NET 5.0)
  • PowerShell 7.2 ist erschienen am 08.11.2021 (meldet sich mit "PowerShell 7.2", basiert auf .NET 6.0)
  • PowerShell 7.3 ist erschienen am 08.11.2022 (meldet sich mit "PowerShell 7.3", basiert auf .NET 7.0)
  • PowerShell 7.4 ist erschienen am 16.11.2024 (meldet sich mit "PowerShell 7.4", basiert auf .NET 9.0)
  • PowerShell 7.5 wird erscheinen im Jahr 2025 (meldet sich mit "PowerShell 7.5", basiert auf .NET 10.0)

Kernfunktionen

Die Kernfunktionen der PowerShell sind:
  • Zahlreiche eingebaute Befehle, die "Commandlets" genannt werden.
  • Zugang zu allen Systemobjekten, die durch COM-Bibliotheken, das .NET Framework und die Windows Management Instrumentation (WMI) bereitgestellt werden.
  • Robuster Datenaustausch zwischen Commandlets durch Pipelines basierend auf typisierten Objekten.
  • Ein einheitliches Navigationsparadigma für verschiedene Speicher (z.B. Dateisystem, Registrierungsdatenbank, Zertifikatspeicher, Active Directory und Umgebungsvariablen).
  • Eine einfach zu erlernende, aber mächtige Skriptsprache mit wahlweise schwacher oder starker Typisierung.
  • Ein Sicherheitsmodell, das die Ausführung unerwünschter Skripte unterbindet.
  • Integrierte Funktionen für Ablaufverfolgung und Debugging.
  • Die PowerShell kann um eigene Befehle erweitert werden.
  • Die PowerShell kann in eigene Anwendungen integriert werden (Hosting).

Beispiele

  • Beende alle Prozesse durch Aufruf der Methode Kill(), die „iexplore“ heißen, wobei die Groß-/Kleinschreibung des Prozessnamens irrelevant ist.

Get-Process | where { $.processname -ieq "iexplore" } | foreach { $.Kill() }
  • Sortiere die Prozesse, die das Wort „iexplore“ im Namen tragen, gemäß ihrer CPU-Nutzung und beende den Prozess, der in der aufsteigenden Liste der CPU-Nutzung am weitesten unten steht (also am meisten Rechenleistung verbraucht).

Get-Process | where { $.processname -ilike "*iexplore*" } | Sort-Object –p cpu | Select-Object -last 1 | foreach { $.Kill() }
  • Gib die Summe der Speichernutzung aller Prozesse aus.

Ps | Measure-Object workingset

Get-Ereignisprotokoll -logname system | Group-Object username

Get-Ereignisprotokoll -logname system | Select-Object –last 10

Get-Ereignisprotokoll -logname system | Select-Object –first 10 | Select-Object -p source
  • Importiere die Textdatei test.txt, wobei die Textdatei als eine CSV-Datei mit dem Semikolon als Trennzeichen zu interpretieren ist und die erste Zeile die Spaltennamen enthalten muss. Zeige daraus die Spalten ID und Url.

Import-Csv d:\_work\test.txt -delimiter ";" | Select-Object -p ID,Url
  • Ermittle aus dem Verzeichnis System32 alle Dateien, die mit dem Buchstaben „a“ beginnen. Beschränke die Menge auf diejenigen Dateien, die größer als 40.000 Byte sind, und gruppiere die Ergebnismenge nach Dateinamenerweiterungen. Sortiere die gruppierte Menge nach dem Namen der Dateierweiterung.

Get-ChildItem c:\windows\system32 -filter a*.* | Where-Object {$_.Length –gt 40000} | Group-Object Erweiterung | Sort-Object name | Format-Table
  • Ermittle aus dem Verzeichnis System32 alle Dateien, die mit dem Buchstaben „b“ beginnen. Beschränke die Menge auf diejenigen Dateien, die größer als 40.000 Byte sind, und gruppiere die Ergebnismenge nach Dateierweiterungen. Sortiere die Gruppen nach der Anzahl der Einträge absteigend und beschränke die Menge auf das oberste Element. Gib für alle Mitglieder dieser Gruppe die Attribute Name und Length aus.

Get-ChildItem c:\windows\system32 -filter b*.* | Where-Object {$.Length –gt 40000} | Group-Object Erweiterung | Sort-Object count -desc | Select-Object -first 1 | Select-Object group | foreach {$.group} |

Select-Object name,length | Format-Table