Powershell 始终在环境路径中搜索任何 exe returns msbuild.exe

Powershell search for any exe in environment path always returns msbuild.exe

我正在尝试使用 Cake 作为构建工具,但 运行 在他们的 powershell 脚本中遇到了问题。

脚本正在尝试在环境变量路径中查找 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 总是在列表中返回。

我会使用不同的且可能更有效的检查 nuget.exe 可用性

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

正如 Enrico Campidoglio 所建议的,您可以添加 -CommandType Application。从理论上讲,它应该更有效率。在(我的)实践中,情况并非总是如此。