Windows PowerShell (WPS)

Eintrag zuletzt aktualisiert am: 16.12.2022

Die Windows PowerShell ist Microsoft neuere Lösung für die kommandozeilenbasierte Administration und Scripting in Windows. Erstmals kann sich eine Windows-Shell mit den Unix-Shells messen und ist ihnen durch das typisierte Pipelining (Objekt-Pipelining) überlegen

Namen

Codename: Monad
Frühere Namen in der Beta-Phase: Microsoft Shell (MSH), Microsoft Command Shell
Version 1.0 bis 6.0: Windows PowerShell
Ab Version 6.0: PowerShell Core
Seit Version 7.0: PowerShell

Versionen

Versionsgeschichte leider noch nicht verfügbar

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