在 PowerShell 中安装 NuGet 包

Marion Paul Kenneth Mendoza 2023年1月30日
  1. 了解 PowerShell 中的 NuGet 安装挑战
  2. 查找 PowerShell 版本
  3. PowerShell 中的传输层安全协议
  4. 正确安装 NuGet 包的解决方法
在 PowerShell 中安装 NuGet 包

NuGet 是来自 .NET framework 的包管理工具,它类似于 PowerShellGet,支持多个命令和包以与 PowerShell 一起使用的 MSI 包。

例如,我们可能需要 NuGet 来运行特定的脚本。但是,在 Windows PowerShell 中安装 NuGet 包时,我们可能会遇到错误。

本文将了解发生错误的原因以及安装适用于 PowerShell 的 NuGet 提供程序的分步指南。

了解 PowerShell 中的 NuGet 安装挑战

以管理员身份打开 PowerShell。运行命令 Install-Module PowerShellGet -Force 安装 NuGet 包。

当要求确认安装 NuGet 提供程序时,按 Y 键并按 Enter

Install-Module PowerShellGet -Force

执行后,如果你在安装 NuGet 包时遇到了这些问题,我们可能需要做额外的步骤才能成功安装包。

  • 警告:无法从 URI 下载。
  • 警告:无法下载可用提供商列表。检查互联网连接。
  • 找不到包提供程序 NuGet。它可能尚未导入。

本文的下一部分将讨论正确安装 NuGet 包的分步过程。

查找 PowerShell 版本

我们必须首先找到系统上运行的 PowerShell 版本。

为此,我们可以使用 GetHost cmdlet 或导出 $PSVersionTable 变量。

Get-Host | Select-Object Version
$PSVersionTable

输出:

Version
-------
5.1.22000.282

默认情况下,PowerShell 5.1 启用 SSL 和 TLS 以实现安全 HTTP 连接,我们需要在其中升级以安装 NuGet 包。

PowerShell 中的传输层安全协议

要检查系统上支持的安全协议,我们可以使用下面的代码片段。

[Net.ServicePointManager]::SecurityProtocol

输出:

Ssl3, Tls

默认定义的安全协议是 SSL 3.0 和 TLS 1.0。

不幸的是,这两种安全协议都已弃用。因此,在撰写本文时,仅批准了 TLS 1.2 和 TLS 1.3。

正确安装 NuGet 包的解决方法

我们将在系统上启用 TLS 1.2。运行这两个 cmdlet 以设置 .NET 框架强加密注册表项。

然后,重新启动 PowerShell 并检查是否添加了安全协议 TLS 1.2。安装 PowerShellGet 模块。

第一个 cmdlet 在 64 位 .Net 框架(版本 4 及更高版本)上设置强加密。

Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord

第二个 cmdlet 在 32 位 .Net 框架(版本 4 及更高版本)上设置强加密。

Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord

重新启动 PowerShell 并检查 TLS 版本现在是否已更新。

[Net.ServicePointManager]::SecurityProtocol

输出:

Tls, Tls11, Tls12

另一种解决方法是手动重新分配安全协议命令。

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

输出:

Tls12

安装 TLS 1.2 后,重新运行包安装程序,这一次应该可以完美运行。

Install-Module PowerShellGet -Force
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn