PowerShell 7 und Windows PowerShell. Tobias Weltner
öffnet sich ein Dialogfeld ähnlich dem in Abbildung 2.10 mit dessen Eckdaten und Versionen. Auf anderen Betriebssystemen erscheint stattdessen nur eine rote Fehlermeldung und beklagt sich, dass der Befehl winver unbekannt ist. Applications sind fast immer plattformspezifisch, so auch winver:
PS> winver
winver: The term 'winver' is not recognized as a name of a cmdlet, function, script file, or
executable program. Check the spelling of the name, or if a path was included, verify that the
path is correct and try again.
Abbildung 2.10: Ein Dialogfeld mit Betriebssystemversion per Befehl öffnen
Gefunden werden Applications über ihren Namen allerdings nur dann, wenn sie sich in einem Ordner befinden, der in der Systemumgebungsvariablen Path vermerkt ist. Liegt die Application woanders, geben Sie den absoluten (vollständigen) oder relativen Pfadnamen an.
Der relative Pfad .\anwendung.exe würde beispielsweise die Application anwendung.exe im aktuellen Ordner (.) starten. Der aktuelle Ordner wird normalerweise in der Eingabeaufforderung der PowerShell angezeigt und kann auch über Get-Location erfragt werden.
Aus der Praxis
Applications wie winver.exe sind nicht nur betriebssystemspezifisch. Selbst wenn sie vorhanden sind, ist ihr Nutzen für die Automation begrenzt, weil Skripte nun mal keine Informationen in Fenstern lesen können (siehe Abbildung 2.10).
Wenn es also ein alternatives Cmdlet gibt, das dieselbe Information liefert, ist dieses immer besser geeignet als eine Application.
Vorhin haben Sie bereits ein Cmdlet kennengelernt, das umfangreiche Betriebssysteminformationen lesen kann (siehe Seite 101): Get-ComputerInfo! Es liefert tatsächlich sogar genau dieselben Informationen wie winver.exe, nur eben in einer Form, in der man die Daten weiterverarbeiten kann:
PS> Get-ComputerInfo -Property WindowsVersion, OSBuildNumber,WindowsUBR,
WindowsRegisteredOwner, WindowsRegisteredOrganization
WindowsVersion : 2004
OsBuildNumber : 19041
WindowsUBR : 572
WindowsRegisteredOwner : [email protected]
WindowsRegisteredOrganization : psconf.eu
Und weil auch bei PowerShell viele Wege nach Rom führen, lernen Sie auf Seite 130 einen weiteren Weg kennen, der diese Informationen sogar noch deutlich schneller beschafft als das etwas langsame Get-ComputerInfo.
Applications finden
Get-Command kann nicht nur Cmdlets, sondern auch Applications finden. Allerdings sind Suchen nach Applications aufgrund ihrer nicht vorhandenen Namenssystematik viel kniffliger als bei PowerShell-Befehlen.
Möchten Sie zum Beispiel die Energiespareinstellungen des Computers verwalten, könnten Sie immerhin testweise nach Applications suchen, die das Wort »power« im Namen tragen:
PS> Get-Command -Name *power* -CommandType Application
CommandType Name Version Source
----------- ---- ------- ------
Application powercfg.cpl 10.0.19041.1 C:\WINDOWS\system32\powercfg.cpl
Application powercfg.exe 10.0.19041.1 C:\WINDOWS\system32\powercfg.exe
Application POWERPNT.EXE 16.0.13426.20332 C:\Program Files (x86)\Microsoft Of...
Application powershell.exe 10.0.19041.546 C:\WINDOWS\System32\WindowsPowerShe...
Application powershell_ise.exe 10.0.19041.1 C:\WINDOWS\System32\WindowsPowerShe...
Das Ergebnis ist unspezifisch. Anders als bei den strukturierten Cmdlet-Namen kann man einem Namen wie powercfg.exe nur sehr vage entnehmen, dass damit die Energiespareinstellungen konfiguriert werden. In den Suchergebnissen finden sich auch die Anwendung PowerPoint (falls sie installiert ist) sowie PowerShell und der ISE-Editor. In der Spalte Source steht jeweils, wo die Anwendung gefunden wurde.
Aus der Praxis
Die Suchfunktion können Sie sich ebenfalls zunutze machen, wenn Sie herausfinden müssen, wo sich eine bestimmte Anwendung genau befindet: Stellen Sie den Befehl in runde Klammern und fragen Sie dann mit einem Punkt gezielt die Spalte Source ab.
Die folgende Anweisung findet heraus, wo die Anwendung powerpnt installiert ist:
PS> (Get-Command -Name powerpnt).Source
C:\Program Files (x86)\Microsoft Office\root\Office16\POWERPNT.EXE
Möchten Sie nur wissen, ob die Anwendung PowerPoint installiert ist, verwenden Sie einen Vergleichsoperator (mehr dazu ab Seite 124) und prüfen, ob mehr als 0 Ergebnisse zurückgeliefert wurden:
PS> (Get-Command -Name powerpnt -ErrorAction Ignore).Source.Count -gt 0
True
Das Prinzip ist wie immer universell und lässt sich künftig bei jedem Befehl einsetzen. Hier würden Sie damit ausschließlich die Spalte IPAddress in den Ergebnissen von Get-NetIpAddress ausgeben, also die Liste der aktuell vergebenen IP-Adressen ermitteln:
PS> (Get-NetIPAddress).IPAddress
fe80::4c91:563d:2f8f:47be%10
fe80::7879:62db:f834:f4a4%8
fe80::44a6:7f1e:eae5:1ad9%17
fe80::b50f:484b:6474:add0%12
::1
192.168.2.105
169.254.71.190
169.254.244.164
169.254.26.217
192.168.1.21
127.0.0.1
Profitipp
Mit dem folgenden Befehl rüsten Sie das Cmdlet Find-PowerShellCommand nach:
Install-Module -Name PsCommandDiscovery -Scope CurrentUser
Listing 2.2: Ein neues Cmdlet zur Suche nach unbekannten Befehlen nachrüsten
Mit diesem neuen Cmdlet kann man noch sehr viel gezielter nach Befehlen suchen als mit Get-Command, und insbesondere die Suche nach Applications wird beim Windows-Betriebssystem dadurch etwas leichter:
PS> Find-PowerShellCommand -Keyword power -CommandType Application
Command MatchType Member Type
------- --------- ------ ----
powercfg.cpl Command .cpl: powercfg (x64) [Gui] 10.0.19041.800 Gui
powercfg.exe Command .exe: powercfg (x64) [Console] 10.0.19041.800 Console
POWERPNT.EXE Command .exe: POWERPNT (x86) [Gui] 16.0.13628.20274 Gui
powershell.exe Command .exe: powershell (x64) [Console] 10.0.19041.800