💪

PowerShellの事はPowerShellから調べる

2024/11/24に公開

はじめに

PowerShellを利用していて、使い方が分からないコマンドレットがあったとします。こういう時に、ネットで調べるのが一般的です。ブラウザを開いて、コマンド名を検索して、該当するページを探します。知りたいことに辿り着くまでに時間がっかかってしまいます。

PowerShellにはPowerShellの使い方を調べるための仕組みが色々用意されています。また、コマンドレットやオプションを全て覚えなくても、入力補完を利用して入力できるようになっています。

使えるコマンドを調べる

PowerShellは、モジュールをインストールすることで機能やコマンドレットの追加を行うことができます。Get-Commandを引数を付けずに実行すると、現在利用できるコマンドレットの一覧はが表示されます。

何もモジュールをインストールしていない状態でも、かなりの数のコマンドレットが表示されます。この中から調べたいコマンドレットを探していては、いくら時間があっても足りません。まず、Get-Commandの使いかたを覚えることで、コマンドレットの情報を調べられるようになりましょう。

Get-Commandを実行してコマンドレットを調べる

一番簡単な使い方は、Get-Commandの引数に調べたいコマンドレットの名前を入れて実行します。

get-command <コマンドレット名>

では、実際にGet-Servieというコマンドレットについて調べてみましょう。

PS C:\Users\Main> get-command get-service

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Get-Service                                        7.0.0.0    Microsoft.PowerShell.Management

Get-Command の後にそのままコマンドレット名を入れると、-Name のオプションにコマンドレット名を入れた時と同じ動きをします。また、名前の指定にワイルドカードを使うことができます。以下のように Get-Commmand を実行しても同様の結果が出力されます。

PS C:\Users\User> get-command -Name Get-Ser* #ワイルドカードで名前を指定

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Get-Service                                        7.0.0.0    Microsoft.PowerShell.Management

また、-Verb-Noun を使用することで、コマンドレットの動詞部分と名詞部分を指定してリストアップすることができます。こちらもワイルドカードを使用することができます。

PS C:\Users\Main> get-command -verb get -Noun Service

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Get-Service                                        7.0.0.0    Microsoft.PowerShell.Management

-Module のオプションでモジュールを指定すれば、指定したモジュールでどのようなコマンドレットが追加されたかが確認できます。インストールしたモジュールでどのようなことができるか調べる時などに、このオプションをよく使います。

PS C:\Users\Main> get-command -module TLS # TLSというモジュールで提供されているコマンドレットを確認する

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Disable-TlsCipherSuite                             2.0.0.0    TLS
Cmdlet          Disable-TlsEccCurve                                2.0.0.0    TLS
Cmdlet          Disable-TlsSessionTicketKey                        2.0.0.0    TLS
Cmdlet          Enable-TlsCipherSuite                              2.0.0.0    TLS
Cmdlet          Enable-TlsEccCurve                                 2.0.0.0    TLS
Cmdlet          Enable-TlsSessionTicketKey                         2.0.0.0    TLS
Cmdlet          Export-TlsSessionTicketKey                         2.0.0.0    TLS
Cmdlet          Get-TlsCipherSuite                                 2.0.0.0    TLS
Cmdlet          Get-TlsEccCurve                                    2.0.0.0    TLS
Cmdlet          New-TlsSessionTicketKey                            2.0.0.0    TLS

Get-Command で出力される情報

Get-Commandを実行して標準で出力される情報は以下の通りです。

パラメータ 内容
CommandType コマンドレットの種類
Name コマンドレットの名前
Version コマンドレットのバージョン
Source コマンドレットを提供しているコンポーネント

これは取得された情報の一部で、Get-Member で出力されるデータのメンバを全て表示すると以下のようになります。

PS C:\Users\User> get-command get-service | get-member

   TypeName: System.Management.Automation.CmdletInfo

Name                MemberType     Definition
----                ----------     ----------
Equals              Method         bool Equals(System.Object obj)
GetHashCode         Method         int GetHashCode()
GetType             Method         type GetType()
ResolveParameter    Method         System.Management.Automation.ParameterMetadata ResolveParameter(string name)
ToString            Method         string ToString()
CommandType         Property       System.Management.Automation.CommandTypes CommandType {get;}
DefaultParameterSet Property       string DefaultParameterSet {get;}
Definition          Property       string Definition {get;}
HelpFile            Property       string HelpFile {get;}
ImplementingType    Property       type ImplementingType {get;}
Module              Property       psmoduleinfo Module {get;}
ModuleName          Property       string ModuleName {get;}
Name                Property       string Name {get;}
Noun                Property       string Noun {get;}
Options             Property       System.Management.Automation.ScopedItemOptions Options {get;set;}
OutputType          Property       System.Collections.ObjectModel.ReadOnlyCollection[System.Management.Automation.PSTy…
Parameters          Property       System.Collections.Generic.Dictionary[string,System.Management.Automation.Parameter…
ParameterSets       Property       System.Collections.ObjectModel.ReadOnlyCollection[System.Management.Automation.Comm…
PSSnapIn            Property       System.Management.Automation.PSSnapInInfo PSSnapIn {get;}
RemotingCapability  Property       System.Management.Automation.RemotingCapability RemotingCapability {get;}
Source              Property       string Source {get;}
Verb                Property       string Verb {get;}
Version             Property       version Version {get;}
Visibility          Property       System.Management.Automation.SessionStateEntryVisibility Visibility {get;set;}
DLL                 ScriptProperty System.Object DLL {get=$this.ImplementingType.Assembly.Location;}
HelpUri             ScriptProperty System.Object HelpUri {get=$oldProgressPreference = $ProgressPreference

標準で表示される情報以外に、パラメータやモジュール等の色々な情報が出力されています。必要に応じて Select-Object で表示したいメンバ(Propertyのみ)を指定することで、これらの情報を表示することができます。

PS C:\Users\User> get-command get-service | Select-Object Name,Module,CommandType

Name        Module                          CommandType
----        ------                          -----------
Get-Service Microsoft.PowerShell.Management      Cmdlet

入力補完を利用したコマンドの調べ方

PowerShellのプロンプトでは、Tabキーでコマンド名を補完することができます。コマンドレットを途中まで入力してTabキーを入力すると、コマンドの名前が補完されます。後補のコマンドレットが複数ある場合は、複数回Tabキーを押せば切り替えることができます。Tabキーによる補完以外にも、 Ctrl + @ もしくは、Ctrl + Space を押すと、一致する値の完全な一覧をメニューとして表示します。

この補完の機能ですが、ワイルドカードを利用することができます。一般的にはコマンドレットの入力を省力化するのに補完の機能を利用しますが、ワイルドカードを利用することで、検索に似たような使い方もできます。

この方法を応用すると、Verb(動詞部分) の一部を省略してコマンドレットを補完したり、Noun(名詞) の部分を指定してコマンドレットを補完することができます。

PS C:\Users\Main> g*-service # Tabを入力すると、Get-Serviceが入力補完される。
PS C:\Users\User> *-service # Noun(名詞) がServiceのコマンドレットが補完される

Ctrl + @ もしくは、Ctrl + Space を押すと、補完の候補が複数個ある場合は一致する値の完全な一覧をメニューとして表示します。表示された候補を十字キーでカーソルを操作して、指定することができます。

オプションの調べ方

PoewrShellのコマンドレットの実行時に指定できるパラメータを手早く調べるには、Get-Commandで調べる方法と補完で調べる方法があります。Get-Commandで調べる方法はオプションをデータとして取得したいとき、補完で調べる方法はオペレーションの実行中に手早く調べるときに向いています。他にもGet-Helpで調べる方法がありますが、こちらは後述します。

Get-Commandでのパラメータの調べ方

Get-Commandの出力のParametersにコマンドレットで利用できるパラメータが出力されます。

PS C:\Users\Main> get-command get-service | Select-Object -ExpandProperty Parameters

Key                 Value
---                 -----
Name                System.Management.Automation.ParameterMetadata
DependentServices   System.Management.Automation.ParameterMetadata
RequiredServices    System.Management.Automation.ParameterMetadata
DisplayName         System.Management.Automation.ParameterMetadata
Include             System.Management.Automation.ParameterMetadata
Exclude             System.Management.Automation.ParameterMetadata
InputObject         System.Management.Automation.ParameterMetadata
Verbose             System.Management.Automation.ParameterMetadata
Debug               System.Management.Automation.ParameterMetadata
ErrorAction         System.Management.Automation.ParameterMetadata
WarningAction       System.Management.Automation.ParameterMetadata
InformationAction   System.Management.Automation.ParameterMetadata
ProgressAction      System.Management.Automation.ParameterMetadata
ErrorVariable       System.Management.Automation.ParameterMetadata
WarningVariable     System.Management.Automation.ParameterMetadata
InformationVariable System.Management.Automation.ParameterMetadata
OutVariable         System.Management.Automation.ParameterMetadata
OutBuffer           System.Management.Automation.ParameterMetadata
PipelineVariable    System.Management.Automation.ParameterMetadata

コマンドの情報全てを調べたい時は、ShowCommandInfoのオプションを付けると、シンタクスやパラメータの情報がまとめて表示されます。Syntaxのオプションを付けると、シンタクスのみ出力されます。

PS C:\Users\Main> get-command Get-Service -ShowCommandInfo

Name          : Get-Service
ModuleName    : Microsoft.PowerShell.Management
Module        : @{Name=Microsoft.PowerShell.Management}
CommandType   : Cmdlet
Definition    :
                Get-Service [[-Name] <string[]>] [-DependentServices] [-RequiredServices] [-Include <string[]>] [-Exclu
                de <string[]>] [<CommonParameters>]

                Get-Service -DisplayName <string[]> [-DependentServices] [-RequiredServices] [-Include <string[]>] [-Ex
                clude <string[]>] [<CommonParameters>]

                Get-Service [-DependentServices] [-RequiredServices] [-Include <string[]>] [-Exclude <string[]>] [-Inpu
                tObject <ServiceController[]>] [<CommonParameters>]

ParameterSets : {@{Name=Default; IsDefault=True; Parameters=System.Management.Automation.PSObject[]}, @{Name=DisplayNam
                e; IsDefault=False; Parameters=System.Management.Automation.PSObject[]}, @{Name=InputObject; IsDefault=
                False; Parameters=System.Management.Automation.PSObject[]}}

補完を利用したパラメータの調べ方

コマンドレットを入力した後に、一つスペースを入れて**-(ハイホン)**を入力して Ctrl + Space を入力すると、補完の候補が出力されてカーソルで選ぶことができます。CLIでオペレーションをするときによく利用します。なお、これで補完されるのはPoewrShellのコマンドレットに限ります。

PS C:\Users\Main> Get-Service - #ここまで入力して Ctrl + Space を押す
# オプションの一覧が表示されて、オプションをカーソルで選択できる。
Name                 Include              Debug                ProgressAction       OutVariable
DependentServices    Exclude              ErrorAction          ErrorVariable        OutBuffer
RequiredServices     InputObject          WarningAction        WarningVariable      PipelineVariable
DisplayName          Verbose              InformationAction    InformationVariable

[string[]] Name
# オプションに指定できる値の型などの情報が表示される。

オプションに指定できる値で、Switichが表示されることがあります。Switchが表示されるオプションは、オプションに値を取りません。オプションを指定することで、コマンドレットの挙動を制御できます。

共通パラメータについて

PoewrShellのオプションを色々調べていると、一部のオプションがどのコマンドレットでも出てくるのが分かります。これらのオプションはコマンドレット共通のものになります。どのようなものがあるかは、下記のWebサイトを参照してください。

https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_commonparameters?view=powershell-7.4

パラメータを調べるとき、これらの共通パラメータを場外すると、そのコマンドレットの動きが分かり易くなります。なお、オプションはUnixのコマンドのように一文字ではなく単語で構成されています。名前からおおよそどのような動きをするか推察できるようになっています。

PowerShellのヘルプ機能

PoewrShellのコマンドレットのヘルプを参照したいときは、コマンドレットに**-?**のオプションを付けて実行します。もしくは、Get-Helpのコマンドレットに、ヘルプを参照したコマンドレットの名前を指定するとヘルプが表示されます。表示される内容はほぼ同じです。

表示方法の切り替え

Get-Help に -online のオプションを付けると、ブラウザが起動して、オンラインのヘルプが表示されます。-ShowWindow のオプションを付けると、ダイアログが立ち上がり、そこにヘルプが記載されています。プロンプトの表示が増えて困る場合は、このようなオプションを付けて実行すると便利です。

ただし、-ShowWindowはMac版やLinux版のPowerShellでは使用できません。

コマンドレット以外のヘルプ

Get-Help の**-Name(ヘルプを表示する対象のコマンドレット)**に、"about_で始まるキーワードを指定すると、機能の説明のヘルプを閲覧することができます。どのようなトピックがあるかは、Get-Help -Name about_ と入力して Ctrl + Space を入力すると、トピックの一覧が表示されます。

PS C:\Users\User> get-help -Name about_*
Display all 144 possibilities? (y or n) _

実際に操作を行うと、144個のトピックがあるようです。トピックの数は、インストールしているモジュールや環境によって異なります。

Discussion