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

问题描述 投票:0回答:2

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

如何在未连接的计算机上安装 PowerShell 的 Nuget 提供程序,以便可以从 PS 命令行安装 nuget 包? [堆栈交换]

如何获取 PowerShell 在没有 Internet 访问的情况下工作 [Intrepid 集成]

引导 NuGet 提供程序和 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 Files\PackageManagement\ProviderAssemblies 中安装了 dll PackageManagement.NuGetProvider.dll uget .8.5.208\
  4. 我检查了两个 dll 的哈希值,它们是匹配的。
  5. 在离线计算机上我创建了一个 C:\Program Files\PackageManagement\ProviderAssemblies uget .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,而无需在线计算机上的管理员权限?

powershell nuget offline
2个回答
12
投票

下载-复制-粘贴解决方案

在离线或在线 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 -名称 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)
Unlocking NuGetProvider dll file

将此文件复制到离线计算机上的

C:\Program Files\PackageManagement\ProviderAssemblies

其他信息


-2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.