Читать книгу PowerShell 7 und Windows PowerShell - Tobias Weltner - Страница 46
Out-GridView
ОглавлениеEin besonderes Szenario gilt für den überaus populären Befehl Out-GridView, mit dem man Auswahldialoge wie den in Abbildung 1.11 erzeugt. Er funktioniert auch in der neuen PowerShell, aber leider nur in Windows. Code, der Out-GridView einsetzt, ist also nicht mehr auf Linux und macOS lauffähig.
»Schuld« daran ist das .NET Framework Core, eine Softwarebibliothek, aus der sich Anwendungsentwickler bedienen dürfen und auf der das neue PowerShell aufbaut. .NET Core unterstützt grafische Oberflächen (derzeit) nur auf dem Windows-Betriebssystem. Das hat Auswirkungen auf alle Befehle, die grafische Oberflächen generieren. Zum Glück sind solche Befehle, einmal abgesehen von Out-GridView, extrem selten.
Um nicht abwarten zu müssen, bis .NET Core vielleicht künftig einmal grafische Oberflächen auf allen Betriebssystemen unterstützt, hat das PowerShell-Team eine textbasierte Alternative zu Out-GridView geschaffen: Out-ConsoleGridView.
Abbildung 1.11: Ein grafisches Universalauswahlfenster funktioniert nur bei Windows.
Dieser Befehl ist derzeit noch kein Teil von PowerShell (und wie bei so vielen guten Ideen bleibt abzuwarten, ob er bis zu Ende entwickelt wird). Einstweilen kann man ihn (nur in PowerShell 7, nicht in Windows PowerShell) mit dem folgenden Befehl nachinstallieren:
PS> Install-Module -Name Microsoft.PowerShell.ConsoleGuiTools -Scope CurrentUser
Nun kann das außerhalb von Windows fehlende Out-GridView durch die plattformübergreifende Variante Out-ConsoleGridView ersetzt werden.
Listing 1.7 zeigt ein Beispiel aus der Praxis, das alle laufenden Anwendungen in einem Auswahlfenster anbietet. Die ausgewählten Anwendungen werden geschlossen (jedenfalls dann, wenn Sie in Listing 1.7 den Parameter -WhatIf entfernen, der ansonsten das Stoppen der Prozesse nur simuliert).
Get-Process |
Where-Object MainWindowHandle |
Select-Object -Property Name, Id, Description |
Sort-Object -Property Name |
Out-GridView -Title 'Prozesse' -OutputMode Multiple |
Stop-Process -WhatIf