2017-01-04 30 views
3

Я пытаюсь использовать Cake в качестве инструмента сборки, но у меня проблема в сценарии powershell.Поиск Powershell любого exe в пути к среде всегда возвращает msbuild.exe

Сценарий пытается найти nuget.exe в пути переменной окружения. Если он не существует, он загружает его.

Вопрос заключается в том, что msbuild.exe всегда возвращается, и если nuget.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 

Независимо от того, который exe я стараюсь искать с помощью этого скрипта, даже если она существует , msbuild.exe всегда возвращается в список.

+0

Итак ... если вы запустите эти два конвейера в powershell, '$ NUGET_EXE_IN_PATH' содержит ссылку fileinfo на' msbuild.exe'? –

+0

@ MathiasR.Jessen Да, это правильно. msbuild.exe всегда возвращается, даже если я ищу файл monkey.exe. Если я ищу exe, который существует, msbuild.exe по-прежнему включен в возвращаемый список – skyfoot

ответ

3

Я хотел бы использовать другой и, вероятно, более эффективный контроль за nuget.exe наличия

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

Как предложил Энрико Капитолия, вы можете добавить -CommandType Application. Теоретически это должно быть еще более эффективным. В (моей) практике это не всегда так.

+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

Нет, не знаю; когда я сказал _efficiency_, я не говорил конкретно о _speed_, а скорее о том, что ему пришлось бы искать меньше мест, а именно только пути в «Путь». Это также эквивалентно тому, что делается в скрипте загрузочного скрипта Cake. –