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

标签 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 复制到离线机器上。这是我迄今为止尝试过的:
  • 尝试在离线机器上下载 NuGet 以查看它下载文件的位置。它搜索:https://onegetcdn.azureedge.net/providers/providers.masterList.feed.swidtag
  • 按照 URL 中的链接下载 PackageManagement.NuGetProvider-2.8.5.208.dll
  • 在个人计算机(具有管理员权限)上,我以正常方式下载了 NuGet 并获得了 dll PackageManagement.NuGetProvider.dll 安装在 C:\Program Files\PackageManagement\ProviderAssemblies\nuget\2.8.5.208\
  • 我检查了两个 dll 的哈希值,它们匹配。
  • 在离线计算机上,我创建了一个 C:\Program Files\PackageManagement\ProviderAssemblies\nuget\2.8.5.208 文件夹,并将步骤 2 中的 dll 放入该文件夹中。
  • 我以管理员身份启动 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 在我的离线机器上正确安装而没有在线机器上的管理员权限?

    最佳答案

    下载-复制-过去解决方案
    在离线或在线 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
    

    then run it with -Scope CurrentUser
    Install-PackageProvider -Name NuGet -Scope CurrentUser

    We need an URL from received error

    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.
    

    Currently this will be https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409

    So, go to an online machine and open this URL in a browser.
    You'll receive the following 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属性。
    此 URL 允许您下载当前的 .dll当前用于 PowerShell 的 NuGet 提供程序的文件。
    目前是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

    关于powershell - 如何在离线机器上安装 PowerShell 的 Nuget 提供程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58349992/

    相关文章:

    windows - 使用 PowerShell 为不同域中的用户更改 AD 密码

    powershell - 为什么我不能使用 PowerShell 忽略调用的返回值?

    powershell - -喜欢多种模式

    c# - 找不到类型或命名空间名称 'HttpResponseMessage'

    nuget - 使用 GitVersion,NuGetVersionV2 和 NuGetVersion 之间有什么区别

    Android Studio 控制台构建无法重用缓存的 gradle 依赖项

    powershell - 使用 PowerShell 执行可能位于两个不同位置的文件

    nuget - 包恢复不起作用

    maven - 如何从离线机器构建和发布 Maven 项目(文件目录为 lib-repository)

    html - 绕过 HTML5 离线应用缓存