🛣

[PowerShell]UNIXのwhichコマンドのように実行ファイルの格納先を確認する方法

2025/03/04に公開

概要

UNIX系のサーバーでは、コマンドがどこにあるパスから呼び出されているか重要だったので、
頻繁にwhichコマンドを実行してコマンドの格納場所を探していました。

ふとWindowsを使用していてもwhichコマンドを使いたいなぁと感じることがあり、
通常のコマンドレットで確認する方法と、お遊びの自作Functionも作成してみたので紹介します。

通常のコマンドレットで確認する方法

コマンドの実行ファイルは、PowerShell標準にあるGet-CommandコマンドレットのSourceにより結果がわかります。

Get-Commandコマンドレットでコマンドのパスを確認
# exploerer.exeの格納場所
PS C:\Users\XXXX> Get-Command explorer

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Application     explorer.exe                                       10.0.26... C:\WINDOWS\explorer.exe


PS C:\Users\XXXX>

以降に紹介するFunctionをあえて使用する必要はないので悪しからず。

自作したコードで確認する方法

自作したFunctionのコード

バイナリデータのパスのみ返すwhichコマンド
Function which {
    param (
        [System.String]$CommandName
    )
    $commandData = (Get-Command -Name $CommandName -ErrorAction SilentlyContinue)

    if ($null -eq $commandData) {
        Write-Warning "該当のコマンドが見つかりませんでした。[指定したコマンド名: $($CommandName)]"
        return
    }

    return $commandData.Source
}

自作したコードを実行してみた

自作Functionでpythonの実行ファイルの格納先を取得
PS C:\Users\XXXX> which python
C:\Users\XXXX\AppData\Local\Microsoft\WindowsApps\python.exe
PS C:\Users\XXXX>

まとめ

Windowsのコマンドを使用していると結果が複雑で見づらいと感じることが多々あります。
慣れや覚えることが必要ですが、UNIX系のコマンドはシンプルなのがいいですよね。

Windowsにも簡潔なコマンドを!と思い検証してみましたが、違和感がすごい 😂
変なこともやった結果、Windowsにはシンプルが合わないんだなと痛感しています。

関連記事

https://haretokidoki-blog.com/pasocon_powershell-startup/
https://zenn.dev/haretokidoki/articles/7e6924ff0cc960
https://zenn.dev/haretokidoki/articles/fb6830f9155de5

GitHubで編集を提案

Discussion