しばたテックブログ

気分で書いている技術ブログです。

Get-Commandをちょっとラップしたやつ書いた

PowerShellでもwhichコマンドを使いたかったので。

PowerShellでのwhich

PowerShellでwhichコマンドの代わりに使えるのはGet-Commandコマンドレットですが、こいつの戻り値はSystem.Management.Automation.CommandInfoクラスの派生クラスである

  • System.Management.Automation.AliasInfo
  • System.Management.Automation.ApplicationInfo
  • System.Management.Automation.CmdletInfo
  • System.Management.Automation.FunctionInfo
  • System.Management.Automation.WorkflowInfo

となっており、それぞれエイリアス、実行ファイル、コマンドレット、ファンクション、ワークフローに対応していて見るべきプロパティも微妙に異なっています。

そんなわけで、シンプルに使うにはひと手間かけてやる必要があるなと思い簡単なファンクションを作りました。

書いたやつ

こんな感じ。

Get-Commandをちょっとラップしたやつ+whichエイリアス

実行するとこんな感じの結果を返します。

# こんな感じで使います
PS E:\> which sort
2 command found.
Alias : sort -> Sort-Object
Application : C:\WINDOWS\system32\sort.exe

# 検索対象を絞ることもできます。
PS E:\> which sort -CommandType Application
1 command found.
Application : C:\WINDOWS\system32\sort.exe

自分好みに作ったので使い勝手には満足してます。

(おまけ)ちょっと現実的なはなし

2015/06/12追記

こんなファンクションを作りましたが、実際にこのファンクションが必要な環境およびタイミングでこれを仕込んでいる余裕はないと思っていますw
PowerShellでwhichコマンド使いたいときは、従来通りwhere.exeを使うのが現実的だと思います。

PowerShellではwhereWhere-Objectのエイリアスになっていますので、.exeを明示的に指定する必要があります。

PS E:\> where.exe sort
C:\Windows\System32\sort.exe

あとはwhere.exewhichのエイリアスにしておく位が良いところでしょうか。

PS E:\> Set-Alias which where.exe
PS E:\> which sort
C:\Windows\System32\sort.exe