2017-01-04 6 views
3

Cakeをビルドツールとして使用しようとしていますが、powershellスクリプトで問題が発生しています。環境パス内の任意のexeをPowershellで検索すると必ずmsbuild.exeが返されます

スクリプトは、環境変数パスでnuget.exeを検索しようとしています。存在しなければ、それをダウンロードします。

問題がmsbuild.exeが常に返され、それが私たちにmsbuild.exe

$existingPaths = $Env:Path -Split ';' | Where-Object { (![string]::IsNullOrEmpty($_)) -and (Test-Path $_) } 

$NUGET_EXE_IN_PATH = Get-ChildItem -Path $existingPaths -Filter "nuget.exe" | Select -First 1 

をしようとしてnuget.exeスクリプトを存在しない場合は、私はそれが存在する場合でも、このスクリプトを使用するために検索しようexeどんなに失敗しているということです、msbuild.exeは常にリストに返されます。

+0

powershellで2つのパイプラインを実行すると、 '$ NUGET_EXE_IN_PATH'には' msbuild.exe'へのfileinfoの参照が含まれていますか? –

+0

@ MathiasR.Jessenはい、そうです。 monbu.exeを検索してもmsbuild.exeは常に返されます。存在するexeファイルを検索した場合msbuild.exeは返されたリストにまだ含まれています – skyfoot

答えて

3

エンリコカンピドリオはあなたが-CommandType Applicationを追加することが、示唆されているように私はnuget.exe可用性

if (!(Get-Command nuget.exe -ErrorAction 0)) { 
    # nuget.exe is not found, download ... 
} 

ごとに異なる、おそらくより効果的なチェックを使用します。理論的には、それはさらに効率的でなければならない。 (私の)練習では、これは必ずしもそうではありません。

+1

_efficiency_については、['-CommandType Application'](https://msdn.microsoft.com/en-us)を追加することができます/powershell/reference/5.1/microsoft.powershell.core/get-command#-commandtype)パラメータを使用して、検索範囲をさらに制限します。 'Get-Command -CommandType Application nuget.exe -ErrorAction 0'。 –

+0

必ずしも、私は 'CommandType'の有無にかかわらずいろいろなコマンドをプロファイリングしていました。あなたはこのケースをプロファイリングしましたか? –

+0

いいえ、私はしませんでした。私が_効率を述べたとき、私は_speed_について具体的には言及していませんでした。それどころか、より少ない場所、すなわち 'Path'のパスだけを検索しなければならないという事実について話しました。これは、Cakeのブートストラップスクリプトで行われていることと同じです。 –

関連する問題