パスが切られたディレクトリから検索
where.exeのPowerShell版
コマンド
Get-Command chrome
結果
CommandType Name Version Source
----------- ---- ------- ------
Application chrome.exe 0.0.0.0 C:\Users\karet\scoop\shims\chrome.exe
PowerShellスクリプト
ChatGPTに作ってもらいました。
ファイル名:Find-App.ps1
<#
.SYNOPSIS
指定したパターンに一致するアプリケーション(.exeファイル)をPATH環境変数および任意のフォルダから再帰的に検索します。
.DESCRIPTION
指定されたワイルドカードパターン(例: *chrome*.exe)に一致する実行ファイルを、
環境変数 PATH に登録されたフォルダと、ユーザー指定の追加フォルダを対象に検索します。
.PARAMETER pattern
検索するファイル名のパターン。ワイルドカード(* や ?)が使用可能です。
省略時は "*chrome*.exe" が使用されます。
.PARAMETER AdditionalPaths
検索対象に追加する任意のフォルダパス(複数可)。PATH環境変数と併せて検索されます。
.EXAMPLE
.\Find-App.ps1 -pattern "*vlc*.exe" -AdditionalPaths "C:\Apps","D:\Portable"
.EXAMPLE
Get-Help .\Find-App.ps1
このスクリプトのヘルプを表示します。
.NOTES
- アクセス拒否されるディレクトリには try/catch で対応。
- Get-Help 表示に対応。
#>
param (
[string]$pattern = "*chrome*.exe",
[string[]]$AdditionalPaths = @()
)
# PATH環境変数 + 任意パスを結合
$searchPaths = ($env:PATH).Split(';') + $AdditionalPaths
foreach ($path in $searchPaths) {
if (Test-Path $path) {
try {
Get-ChildItem -Path $path -Recurse -Filter $pattern -File -ErrorAction Stop
}
catch {
Write-Verbose "アクセス拒否またはエラー: $path"
}
}
}
paramの$AdditionalPaths = @()の部分に自分の環境のインストールパスをあらかじめセットしておくと便利だと思います。
実行例:
Find-App.ps1 -pattern "*gimp*.exe"
Directory: C:\Program Files\GIMP 2\bin
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2024/05/03 18:40 9034728 gimp-2.10.exe
-a--- 2024/05/03 18:41 3684120 gimp-console-2.10.exe
-a--- 2024/05/03 18:41 55656 gimp-debug-resume.exe
-a--- 2024/05/03 18:41 51032 gimp-debug-tool-2.0.exe
-a--- 2024/05/03 18:41 35144 gimp-test-clipboard-2.0.exe
-a--- 2024/05/03 18:42 43160 gimptool-2.0.exe
Directory: C:\Program Files\GIMP 2\lib\gimp\2.0\plug-ins\gimpressionist
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2024/05/03 18:58 157720 gimpressionist.exe
コメント