如何在离线计算机上安装 PowerShell 的 Nuget 提供程序?

How do I install the Nuget provider for PowerShell on a offline machine?

我正在尝试在离线工作机器上安装NuGet 运行 Windows Server 2016。文件可以通过NAS上传到这台机器。所有在线机器都具有受限的管理员权限,而离线机器具有完全管理员权限。我找到了离线机器的安装指南,但他们都假设在线机器具有管理员权限。

How to get PowerShellGet working with no Internet access [Intrepid Integration]

Bootstrap the NuGet provider and NuGet.exe [Microsoft]

这些参考资料建议在在线机器上安装 NuGet(需要管理员权限),然后将安装的 dll 复制到离线机器上。到目前为止,这是我尝试过的方法:

  1. 尝试在离线机器上下载 NuGet 以查看它下载文件的位置。它搜索:https://onegetcdn.azureedge.net/providers/providers.masterList.feed.swidtag
  2. 点击 URL 中的链接并下载了 PackageManagement.NuGetProvider-2.8.5.208.dll
  3. 在个人计算机上(具有管理员权限)我以正常方式下载了 NuGet,并在 C:\Program [=41] 中安装了 dll PackageManagement.NuGetProvider.dll =].8.5.208\
  4. 我检查了两个 dll 的散列,它们匹配。
  5. 在离线计算机上,我创建了一个 C:\Program Files\PackageManagement\ProviderAssemblies\nuget.8.5.208 文件夹,并将步骤 2 中的 dll 放入该文件夹中。
  6. 我以管理员身份启动 PowerShell,发现已安装 NuGet 2.8.5.208,但没有 DynamicOptions。任何安装 nupkg 包的尝试都失败了。 Get-PackageProvider 的输出如下所示:
PS C:\Windows\system32> Get-PackageProvider -ListAvailable
Name                     Version          DynamicOptions
----                     -------          --------------
msi                      3.0.0.0          AdditionalArguments
msu                      3.0.0.0
nuget                    2.8.5.208
PowerShellGet            1.0.0.1          PackageManagementProvider, Type, Scope, AllowClobber, SkipPublisherCheck, ...
Programs                 3.0.0.0          IncludeWindowsInstaller, IncludeSystemComponent

请注意,NuGet 没有动态选项。它显然没有正确安装。我对版本 2.8.5.208 和 2.8.5.205 重复了这个过程(均失败)。我怀疑我复制到离线机器上的 dll 的元数据有问题。

如何在没有在线计算机管理员权限的情况下在我的离线计算机上正确安装 NuGet?

你不能安装它吗? https://www.nuget.org/downloads 将 Windows x86 命令行安装程序下载到拇指驱动器或共享文件夹,然后以传统方式或脚本安装?

下载-复制-过去解决方案

运行 在您的离线或在线 Windows 机器上
Install-PackageProvider -Name NuGet

如果您收到以下错误

Install-PackageProvider : Administrator rights are required to install packages in 'C:\Program Files\PackageManagement\ProviderAssemblies'.
  Log on to the computer with an account that has Administrator rights, and then try again,
  or install in 'C:\Users\AppData\Local\PackageManagement\ProviderAssemblies' by adding "-Scope CurrentUser" to your command. You can also try running the Windows PowerShell session with elevated rights (Run as Administrator).
At line:1 char:1
+ Install-PackageProvider -Name NuGet

然后 运行 它与 -Scope CurrentUser
Install-PackageProvider -Name NuGet -Scope CurrentUser

我们需要 URL 来自收到的错误

WARNING: Unable to download from URI 'https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409' to ''.
WARNING: Unable to download the list of available providers. Check your internet connection.
Install-PackageProvider : No match was found for the specified search criteria for the provider 'NuGet'. The package provider requires 'PackageManagement' and 'Provider' tags. Please check if the specified package has the tags.

目前这将是 https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409

所以,转到在线机器并在浏览器中打开这个 URL。
您将收到以下 XML

<?xml version="1.0" encoding="utf-8"?>
<SoftwareIdentity xmlns="http://standards.iso.org/iso/19770/-2/2015/schema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:discovery="http://packagemanagement.org/discovery" patch="false" media="(OS:windows)" name="OneGet.Providers" tagVersion="1" uniqueId="OneGet.Providers.1" version="1.15.194.0" versionScheme="multipartnumeric">

    <!--
        This swidtag is a Discovery Feed that has pointers to the SWIDTAGs for
        the providers that the bootstrapper can download.
    -->

    <Link href="https://onegetcdn.azureedge.net/providers/nuget-2.8.5.208.package.swidtag" type="application/swid-tag+xml" rel="package" discovery:name="nuget" discovery:latest="true" discovery:version="2.8.5.208" media="(OS:windows)" />

    <Link href="https://onegetcdn.azureedge.net/providers/psl-1.0.0.210.package.swidtag" type="application/swid-tag+xml" rel="package" discovery:name="psl" discovery:latest="true" discovery:version="1.0.0.210" media="(OS:windows)" />

    <Link href="https://onegetcdn.azureedge.net/providers/ChocolateyPrototype-2.8.5.130.package.swidtag" type="application/swid-tag+xml" rel="package" discovery:name="chocolatey" discovery:latest="true" discovery:version="2.8.5.130" media="(OS:windows)" />

    <Link href="https://onegetcdn.azureedge.net/providers/nugetv2.feed.swidtag" type="application/swid-tag+xml" rel="feed" discovery:name="nuget" media="(OS:windows)" />

    <Link href="https://onegetcdn.azureedge.net/providers/psl.feed.swidtag" type="application/swid-tag+xml" rel="feed" discovery:name="nuget" media="(OS:windows)" />

    <Link href="https://onegetcdn.azureedge.net/providers/chocolateyprototype.feed.swidtag" type="application/swid-tag+xml" rel="feed" discovery:name="chocolatey" media="(OS:windows)" />
</SoftwareIdentity>

复制下面形式的URLhttps://onegetcdn.azureedge.net/providers/nuget-X.X.X.XXX.package.swidtag
目前是 https://onegetcdn.azureedge.net/providers/nuget-2.8.5.208.package.swidtag

在浏览器中打开此 URL,您将收到以下 XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SoftwareIdentity xmlns="http://standards.iso.org/iso/19770/-2/2015/schema.xsd" xmlns:discovery="http://packagemanagement.org/discovery" xmlns:sha512="http://www.w3.org/2001/04/xmlenc#sha512" name="nuget" versionScheme="multipartnumeric" media="(windows)" tagVersion="1" version="2.8.5.208" uniqueId="nuget.2.8.5.208">

    <Meta providerName="nuget" providerVersion="2.8.5.208" summary="NuGet provider for the OneGet meta-package manager" />

    <Link href="https://onegetcdn.azureedge.net/providers/Microsoft.PackageManagement.NuGetProvider-2.8.5.208.dll" type="application/octet-stream" rel="installationmedia" discovery:targetFilename="Microsoft.PackageManagement.NuGetProvider.dll" discovery:type="assembly" media="(OS:windows)" />
</SoftwareIdentity>

您需要来自唯一 href 属性的 URL。
URL 允许您下载当前 NuGet Provider for PowerShell 的当前 .dll 文件。 目前是 https://onegetcdn.azureedge.net/providers/Microsoft.PackageManagement.NuGetProvider-2.8.5.208.dll

下载后,导航至此 .dll 文件并将其解锁(或使用 Unblock-File cmdlet)

将此文件复制到离线计算机上的 C:\Program Files\PackageManagement\ProviderAssemblies

Additional info