【问题标题】:How do I install the Nuget provider for PowerShell on a offline machine?如何在脱机计算机上安装适用于 PowerShell 的 Nuget 提供程序?
【发布时间】:2020-02-09 11:56:07
【问题描述】:

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

How do I install the Nuget provider for PowerShell on a unconnected machine so I can install a nuget package from the PS command line? [Stack Exchange]

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,并将 dll PackageManagement.NuGetProvider.dll 安装在 C:\Program Files\PackageManagement\ProviderAssemblies\nuget\2.8 中。 5.208\
  4. 我检查了两个 dll 的哈希值并且它们匹配。
  5. 在离线计算机上,我创建了一个 C:\Program Files\PackageManagement\ProviderAssemblies\nuget\2.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 没有 DynamicOptions。它显然没有正确安装。我对版本 2.8.5.208 和 2.8.5.205 重复了这个过程(都失败了)。我怀疑我复制到离线机器的 dll 的元数据存在问题。

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

【问题讨论】:

  • 不太可能是 dll 错误,更有可能是另一个文件/文件夹/注册 dll 或您需要的注册表项。您是否还获得了包管理文件:C:\Program Files\WindowsPowerShell\Modules\PackageManagement\ C:\Program Files\WindowsPowerShell\Modules\PowerShellGet

标签: powershell nuget offline


【解决方案1】:

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

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

如果您收到以下错误

Install-PackageProvider:需要管理员权限才能在“C:\Program Files\PackageManagement\ProviderAssemblies”中安装包。 使用具有管理员权限的帐户登录计算机,然后重试, 或通过在命令中添加“-Scope CurrentUser”来安装在“C:\Users\\AppData\Local\PackageManagement\ProviderAssemblies”中。您还可以尝试使用提升的权限运行 Windows PowerShell 会话(以管理员身份运行)。 在行:1 字符:1 + 安装-PackageProvider -Name NuGet

然后使用 -Scope CurrentUser
Install-PackageProvider -Name NuGet -Scope CurrentUser

运行它

我们需要收到错误的 URL

警告:无法从 URI 'https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409' 下载到 ''。 警告:无法下载可用提供程序的列表。检查您的互联网连接。 Install-PackageProvider:找不到与提供程序“NuGet”的指定搜索条件匹配的内容。包提供者需要“PackageManagement”和“Provider”标签。请检查指定的包裹是否有标签。

目前这将是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>

复制以下形式的网址https://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 允许您下载当前适用于 PowerShell 的 NuGet 提供程序的当前 .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

【讨论】:

【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 2015-03-08
    相关资源
    最近更新 更多