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

Joe*_*Joe 8 powershell offline nuget

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

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

如何让 PowerShell 在没有 Internet 访问的情况下工作 [Intrepid Integration]

引导 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,并将 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
Run Code Online (Sandbox Code Playgroud)

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

如何让 NuGet 在我的离线机器上正确安装而没有在线机器上的管理员权限?

it3*_*3xl 6

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

在离线或在线 Windows 计算机上运行
Install-PackageProvider -Name NuGet

如果您收到以下错误

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

复制以下表单的 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>
Run Code Online (Sandbox Code Playgroud)

您需要来自 onlyhref属性的 URL 。
此 URL 允许您下载当前.dll适用于 PowerShell 的 NuGet 提供程序的当前文件。目前是https://onegetcdn.azureedge.net/providers/Microsoft.PackageManagement.NuGetProvider-2.8.5.208.dll

下载后,导航到此.dll文件并解锁(或使用Unblock-Filecmdlet)
解锁 NuGetProvider dll 文件

将此文件复制到C:\Program Files\PackageManagement\ProviderAssemblies您的离线机器上。

附加信息