PowerShell コマンドの実装を調べる方法
PowerShell コマンドは、以下の 3 種類に分類される。
- エイリアス (Alias)
- 関数 (Function)
- コマンドレット (Cmdlet)
本記事では、それぞれの実装の調査方法を説明する。
エイリアス (Alias) を調べる
PowerShell にはエイリアス (alias) と呼ばれる短縮コマンドが用意されている。
たとえば "cd"、"dir" や "rm" といったコマンドプロンプト風のコマンドは、このエイリアスで実現されている。
エイリアスの一覧を取得するには、以下のコマンドを実行する。
Get-Alias
特定のエイリアスがどのコマンドに割り当てられているのかを知るには、以下のようにコマンドを実行する。
Get-Alias <alias> # (例) Get-Alias ls
関数 (Function) を調べる
PowerShell の関数は PowerShell で実装されており、次のコマンドで実装内容を確認できる。
(Get-Command <function>).Definition # (例) (Get-Command Update-Script).Definition
コマンドレット (Cmdlet) を調べる
PowerShell のコマンドレットは、.NET Framework で実装されている。
このため、まずはどの DLL ファイルに、どのような完全名で実装されているのかを確認する必要がある。
コマンドレットの詳細を取得するには、以下のコマンドを実行する。
Get-Command <Cmdlet> | Format-List * # (例) Get-Command Get-WinSystemLocale | Format-List *
出力例として "Get-WinSystemLocale" の例を示す。
HelpUri : https://go.microsoft.com/fwlink/?LinkID=242247 DLL : C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\Microsoft.InternationalSettings.Commands\v4.0_3.0.0.0_ _31bf3856ad364e35\Microsoft.InternationalSettings.Commands.dll Verb : Get Noun : WinSystemLocale HelpFile : Microsoft.InternationalSettings.Commands.dll-Help.xml PSSnapIn : Version : 2.0.0.0 ImplementingType : Microsoft.InternationalSettings.Commands.GetWinSystemLocaleCommand Definition : Get-WinSystemLocale [<CommonParameters>] DefaultParameterSet : OutputType : {} Options : ReadOnly Name : Get-WinSystemLocale CommandType : Cmdlet Source : International Visibility : Public ModuleName : International Module : International RemotingCapability : PowerShell Parameters : {[Verbose, System.Management.Automation.ParameterMetadata], [Debug, System.Management.Automation.ParameterMetadata], [ErrorAction, System.Management.Automation.ParameterMetadata], [WarningAction, System.Management.Automation.ParameterMetadata]...} ParameterSets : {[<CommonParameters>]}
注目するべきは、DLL
と ImplementingType
の 2 つ。
これにより、どこ (DLL
が示すパス) に、どのような完全名 (ImplementingType
) で実装されているのかが分かる。
.NET デコンパイラを使う
DLL ファイル内の実装を調べるには .NET デコンパイラと呼ばれるツールを使用する必要がある。
.NET デコンパイラについては、著名なツールを別の記事でまとめているので、そちらを参照してほしい。