PowerShellの事はPowerShellから調べる
はじめに
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サイトを参照してください。
パラメータを調べるとき、これらの共通パラメータを場外すると、そのコマンドレットの動きが分かり易くなります。なお、オプションは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