如何解决错误 [术语 'pwsh.exe' 未被识别为 cmdlet、函数、脚本文件或可运行程序的名称]?

How to troubleshoot the error [The term 'pwsh.exe' is not recognized as the name of a cmdlet, function, script file, or operable program]?

在 Azure DevOps 上创建新管道以设置 CI 用于 .NET 项目时,我设置了以下 PowerShell 脚本来自动执行 .NET Core 设置。

这是脚本:

$ErrorActionPreference="Stop"
$ProgressPreference="SilentlyContinue"

# $LocalDotnet is the path to the locally-installed SDK to ensure the
#   correct version of the tools are executed.
$LocalDotnet=""
# $InstallDir and $CliVersion variables can come from options to the
#   script.
$InstallDir = "./cli-tools"
$CliVersion = "1.0.1"

# Test the path provided by $InstallDir to confirm it exists. If it
#   does, it's removed. This is not strictly required, but it's a
#   good way to reset the environment.
if (Test-Path $InstallDir)
{
    rm -Recurse $InstallDir
}
New-Item -Type "directory" -Path $InstallDir

Write-Host "Downloading the CLI installer..."

# Use the Invoke-WebRequest PowerShell cmdlet to obtain the
#   installation script and save it into the installation directory.
Invoke-WebRequest `
    -Uri "https://dot.net/v1/dotnet-install.ps1" `
    -OutFile "$InstallDir/dotnet-install.ps1"

Write-Host "Installing the CLI requested version ($CliVersion) ..."

# Install the SDK of the version specified in $CliVersion into the
#   specified location ($InstallDir).
& $InstallDir/dotnet-install.ps1 -Version $CliVersion `
    -InstallDir $InstallDir

Write-Host "Downloading and installation of the SDK is complete."

# $LocalDotnet holds the path to dotnet.exe for future use by the
#   script.
$LocalDotnet = "$InstallDir/dotnet"

当我尝试 运行 构建时,出现以下错误:

我已经在 Google 上搜索了遇到同样问题的人以及如何解决该问题。但是我还没有找到太多信息。 Azure DevOps 论坛也无济于事。

正如上面的评论中提到的,您所要做的就是在 运行 正在安装 Agent 的机器上安装适当版本的 PowerShell。例如,PowerShell 7。然后你必须确保设置了环境变量path。此变量应指向包含 PowerShell Core 的目录。

Windows

只需使用 Windows 安装程序安装 PowerShell Core(来自 PowerShell Git 存储库的 .msi 文件)。在这种情况下,path 环境变量会自动设置或扩展,以便在该变量下有pwsh.exe 目录的路径。

Linux

安装您的发行版支持的 PowerShell Core。确保 ~/.bashrc 文件中有一个 path 变量,并且 path 包含 PowerShell Core 目录的路径。


注意:如果 Azure 代理已经 运行ning,您必须重新启动它,以便它看到 path 变量中的更改。因此,在 Windows 上,如果 运行 以交互方式重新启动代理,如果 运行 作为服务重新启动服务。在 Linux,您可以按照 this 指南更新传递给代理的环境变量。

我知道您已经将脚本配置为 PowerShell Core 脚本,但为了完整起见,我添加以下内容:如果您在 Azure 管道中使用 PowerShell 任务,默认情况下不会为其设置 PowerShell Core 版本。为了 运行 作为 PowerShell Core 脚本的任务,将此添加到任务的 YAML 代码中:pwsh: true。否则,如果您仍在使用旧的图形界面,请选中任务“高级”标题下的“使用 PowerShell Core”复选框。