Get-Command, Get-Random & Get-Help

Ein kleines Projekt für das Blog, es soll 100 Tage lang, jeden Tag, ein Beitrag zu Powershell Commandos geben. Manch ein Kommando funktioniert nur mit einem anderen z.B. Set-ScheduledJobOption (Tag 2) ist ohne Start-Job eher nutzlos. Deshalb wird zu jedem Befehl auch seine umliegenden Nachbarn betrachtet.

Ein Teil der Kommands werden per Zufall ausgewählt, andere wiederum aufgrund ihres breiten Anwendungsspektrum. Zur Auswahl durch den Zufall kommt das Skript zum Einsatz

Get-Command | Get-Random

und genau um diese Behfehle soll es heute gehen.

Get-Command

Get-Command listet alle Kommandos der aktuellen PowerShell-Umgebung auf. Auf meinem System sieht das in etwa so aus:

Get-Command -CommandType Cmdlet | Select -First 20

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Add-AppProvisionedSharedPackageContainer           3.0        Dism
Cmdlet          Add-AppSharedPackageContainer                      2.0.1.0    Appx
Cmdlet          Add-AppxPackage                                    2.0.1.0    Appx
Cmdlet          Add-AppxProvisionedPackage                         3.0        Dism
Cmdlet          Add-AppxVolume                                     2.0.1.0    Appx
Cmdlet          Add-BitsFile                                       2.0.0.0    BitsTransfer
Cmdlet          Add-CertificateEnrollmentPolicyServer              1.0.0.0    PKI
Cmdlet          Add-Content                                        7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Add-History                                        7.3.6.500  Microsoft.PowerShell.Core
Cmdlet          Add-JobTrigger                                     1.1.0.0    PSScheduledJob
Cmdlet          Add-KdsRootKey                                     1.0.0.0    Kds
Cmdlet          Add-LocalGroupMember                               1.0.0.0    Microsoft.PowerShell.LocalAccounts
Cmdlet          Add-Member                                         7.0.0.0    Microsoft.PowerShell.Utility
Cmdlet          Add-SignerRule                                     1.0        ConfigCI
Cmdlet          Add-Type                                           7.0.0.0    Microsoft.PowerShell.Utility
Cmdlet          Add-WindowsCapability                              3.0        Dism
Cmdlet          Add-WindowsDriver                                  3.0        Dism
Cmdlet          Add-WindowsImage                                   3.0        Dism
Cmdlet          Add-WindowsPackage                                 3.0        Dism
Cmdlet          Clear-Content                                      7.0.0.0    Microsoft.PowerShell.Management

Das sind die ersten 20 Kommandos sortiert nach namen. Der -CommandType Cmdlet schränkt die Ausgabe auf Cmdlet ein. Eine kleine übersicht über die CommandTypes bei Powershell.

  • Cmdlet oder auch Commandlet: Bei Cmdlet handelt es sich um kompilierten (nativen) .net code in einer DLL datei der von PowerShell importiert und ausgeführt werden kann. Cmdlet existieren nur innerhalb der PowerShell umgebung und können nur von dieser aufgerufen werden. (In .Net oder über Reflection kann das auch ausserhalb von PowerShell passieren macht aber wenig sinn). In einen der kommenden Tage werden wir ein Modul mit C# schreiben.

  • Application: Wie der Name schon sagt sind das die “echten” Applikationen. Exe-Dateien die sich im $PATH Verzeichnis befinden

Get-Command -CommandType Application | Select -First 20

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Application     agentactivationruntimestarter.exe                  10.0.2262 C:\WINDOWS\system32\agentactivationrunti
Application     AgentService.exe                                   10.0.2262 C:\WINDOWS\system32\AgentService.exe
Application     AggregatorHost.exe                                 10.0.2262 C:\WINDOWS\system32\AggregatorHost.exe
Application     aitstatic.exe                                      10.0.2262 C:\WINDOWS\system32\aitstatic.exe
Application     alg.exe                                            10.0.2262 C:\WINDOWS\system32\alg.exe
  • Alias: Ein Alias ist ein alternativer Name für einen Befehl
Get-Command -CommandType Alias

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           % -> ForEach-Object
Alias           ? -> Where-Object
Alias           ac -> Add-Content
Alias           Add-AppPackage                                     1.0        Appx
Alias           Add-AppPackageVolume                               1.0        Appx
Alias           Add-AppProvisionedPackage                          3.0        Dism

Der Name gibt den Alternativnamen an ac für Add-Content oder ? für Where-Object. Ein Beispiel, anstatt über -CommandType Alias zu filtern kann auch Where-Object benutzt werden (in der alias form ?):

Get-Command | ? CommandType -eq 'Alias'

equvivalent mit

Get-Command | Where-Object CommandType -eq 'Alias'

Das ergibt die selbe Ausgabe wie oben.

  • Function: Dabei handelt es sich um ein Powershell-script das eine Powershell funktion beinhaltet. In einem der kommenden Tage werden wir hierauf genauer eingehen.

Get-Help

Der Befehl ist vermutlich gerade am Anfang der Wichtigste, mit

Get-Help <BEGRIFF>

jann nach BEGRIFF in allen hilfe artikeln gesucht werden. Alternativ kann auch der Name des Commands als Begriff angegeben werden und dabei wird die Hilfe des jeweiligen Kommands ausgegeben. z.B.:

Get-Help Get-Command

NAME
    Get-Command

SYNTAX
    Get-Command [[-ArgumentList] <Object[]>] [-Verb <string[]>] [-Noun <string[]>] [-Module <string[]>]
    [-FullyQualifiedModule <ModuleSpecification[]>] [-TotalCount <int>] [-Syntax] [-ShowCommandInfo] [-All]
    [-ListImported] [-ParameterName <string[]>] [-ParameterType <PSTypeName[]>] [<CommonParameters>]

    Get-Command [[-Name] <string[]>] [[-ArgumentList] <Object[]>] [-Module <string[]>] [-FullyQualifiedModule
    <ModuleSpecification[]>] [-CommandType {Alias | Function | Filter | Cmdlet | ExternalScript | Application | Script
    | Configuration | All}] [-TotalCount <int>] [-Syntax] [-ShowCommandInfo] [-All] [-ListImported] [-ParameterName
    <string[]>] [-ParameterType <PSTypeName[]>] [-UseFuzzyMatching] [-UseAbbreviationExpansion] [<CommonParameters>]


ALIASES
    gcm


REMARKS
    Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
        -- To download and install Help files for the module that includes this cmdlet, use Update-Help.
        -- To view the Help topic for this cmdlet online, type: "Get-Help Get-Command -Online" or
           go to https://go.microsoft.com/fwlink/?LinkID=2096579.

Wie schon die ausgabe zeigt ist nur eine kurzform der Hilfe, die Paramter, verfügbar. Eine der ersten Befehle auf einem neuen Powershell-System sollte sein die Hilfe offline verfübar zu machen, mit

Update-Help

wird für jedes Modul die Hilfe heruntergeladen und der Get-Help kann sinnvoll genutzt werden. Alternativ ist ein google nach powershell COMMAND-NAME hilfreich und fürht zur microsoft dokumentation.

Fazit

Mit Get-Command und Get-Help kann man sich schnell in powershell umsehen und das system autark erabeiten. Morgen geht es weiter mit Set-ScheduledJobOption