2

ファイル名を取り、それをローカルまたは環境パスで解決する次の関数があります。コマンドラインで得られるのと同じ機能を探しています:

function Resolve-AnyPath ($file)
{
    if ($result = Resolve-Path $file -ErrorAction SilentlyContinue)
    {
        return $result;
    }

    return ($env:PATH -split ';') |
        foreach {
            $testPath = Join-Path $_ $file
            Resolve-Path $testPath -ErrorAction SilentlyContinue
        } |
        select -first 1
}

私の質問:

  1. これを行う組み込み関数はありますか?
  2. それとも、より優れたコミュニティ スクリプトですか?
  3. 上記の関数で何か見逃しましたか?
4

2 に答える 2

4

exe(および$ env:PATHEXTの他の拡張機能)の場合は、を使用できますGet-Command。パスを検索します。例:

C:\PS> Get-Command ProcExp.exe | Foreach {$_.Path}
C:\Bin\procexp.exe
于 2012-10-09T21:46:23.297 に答える
2

これを行う組み込み関数は考えられません。私Test-Pathはそれらを取り除くために使用しますSilentlyContinue

function Resolve-Anypath
{
    param ($file)

    (".;" + $env:PATH).Split(";") | ForEach-Object {
        $testPath = Join-Path $_  $file
        if (Test-Path $testPath) {
            Write-Output ($testPath)
            break
        }
    }
}
于 2012-10-09T19:52:17.013 に答える