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

时间:2019-10-12 01:02:56

标签: powershell nuget offline

我正在尝试在运行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,并在C:\ Program Files \ PackageManagement \ ProviderAssemblies \ nuget \ 2.8中安装了 PackageManagement.NuGetProvider.dll dll。 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正确安装在脱机计算机上?

2 个答案:

答案 0 :(得分:3)

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

在您的离线或在线 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

我们需要收到错误的网址

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>

复制以下表单的 URL 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 允许您下载当前用于 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

Additional info

答案 1 :(得分:0)

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