読者です 読者をやめる 読者になる 読者になる

素敵なおひげですね

PowerShellを中心に気分で書いているブログです。

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

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

PowerShellでのwhich

PowerShellwhichコマンドの代わりに使えるのは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
PowerShellwhichコマンド使いたいときは、従来通り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