我正在尝试在运行 Windows Server 2016 的离线工作机器上安装 NuGet。文件可以通过 NAS 上传到这台机器。所有在线机器都具有受限的管理员权限,而离线机器具有完全的管理员权限。我找到了离线机器的安装指南,但它们都假设在线机器具有管理员权限。
How to get PowerShellGet working with no Internet access [Intrepid Integration]
这些引用建议将 NuGet 安装在在线机器上(需要管理员权限),然后将安装的 dll 复制到离线机器上。这是我迄今为止尝试过的:
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](https://i.sstatic.net/sN0CK.png)
将此文件复制到
C:\Program Files\PackageManagement\ProviderAssemblies
在您的离线机器上。Additional info
关于powershell - 如何在离线机器上安装 PowerShell 的 Nuget 提供程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58349992/