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