如何在未连接的计算机上安装适用于PowerShell的Nuget提供程序,以便可以从PS命令行安装nuget软件包?

时间:2018-07-18 16:15:24

标签: powershell nuget

我正在尝试通过Powershell命令行在未连接到Internet的Win 7计算机上安装pswindowsupdate.2.0.0.4.nupkg。我正在运行PS 5.1.14409.1005。我从https://www.preview.powershellgallery.com/packages/PSWindowsUpdate/2.0.0.4

获得了nupkg

PS命令Install-Module -Name pswindowsupdate.2.0.0.4.nupkg -Repository {path to pswindowsupdate.2.0.0.4.nupkg}会引发错误消息:

  

PowerShellGet需要NuGet提供程序版本“ 2.8.5.201”或更高版本才能与基于NuGet的存储库进行交互。 NuGet提供程序必须在“ C:\ Program Files \ PackageManagement \ ProviderAssemblies”或“ C:\ Users {我的登录名} \ AppData \ Local \ PackageManagement \ ProviderAssemblies”中可用。您还可以通过运行“ Install-PackageProvider-名称NuGet -MinimumVersion 2.8.5.201 -Force”来安装NuGet提供程序。您是否希望PowerShell现在安装和导入NuGet提供程序?

因为我没有连接到互联网,所以当然不能安装NuGet提供程序。

我获得了nuget.exe(v4.7.0),将其存储在“ C:\ Program Files \ PackageManagement \ ProviderAssemblies”中,并将“ C:\ Program Files \ PackageManagement \ ProviderAssemblies”添加到了path中声明。但是,执行Install-Module -Name pswindowsupdate.2.0.0.4.nupkg -Repository {path to pswindowsupdate.2.0.0.4.nupkg}仍然失败。

NuGet provider到底是什么?仅仅是nuget.exe吗?如何获取和安装PowerShell的Nuget提供程序(v2.8.5.201或更高版本),以便可以从PowerShell命令行安装此nuget软件包?

注意:我的问题不涉及Visual Studio

6 个答案:

答案 0 :(得分:65)

尽管我已经尝试了所有前面的答案,但只有以下一个可以解决:

1-打开Powershell(以管理员身份)

2-运行:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

3-运行:

Install-PackageProvider -Name NuGet

作者是Niels Weistra: Microsoft Forum

答案 1 :(得分:5)

我接受了trebleCode的答案,但是我想提供更多有关我通过遵循trebleCode的答案在未连接的Win 7机器上安装感兴趣的nupkg pswindowsupdate.2.0.0.4.nupkg的步骤的详细信息。

首先:经过一番挖掘,我认为我找到了trebleCode所指的MS文档:

Bootstrap the NuGet provider and NuGet.exe

Install-PackageProvider

如trebleCode所述,要继续,我做了以下

在连接的计算机上安装NuGet提供程序

在连接的计算机(Win 10计算机)上,从PS命令行运行Install-PackageProvider -Name NuGet -RequiredVersion 2.8.5.201 -Force。 Nuget软件是从'Net获得的,并安装在我的本地连接计算机上。

安装后,我在C:\Program Files\PackageManagement\ProviderAssemblies处找到了NuGet提供程序软件(注意:文件夹名\ProviderAssemblies\ReferenceAssemblies相对于trebleCode的回答是一个小的区别。

提供程序软件的文件夹结构如下:

C:\Program Files\PackageManagement\ProviderAssemblies
   \NuGet
      \2.8.5.208
         \Microsoft.PackageManagement.NuGetProvider.dll

在未连接的计算机上安装NuGet提供程序

我将\ NuGet文件夹(及其所有子文件夹)从已连接的计算机复制到了拇指驱动器上,并将其复制到了未连接的(Win 7)计算机上的C:\Program Files\PackageManagement\ProviderAssemblies

我在未连接的(Win 7)计算机上启动了PS(v5),然后运行Import-PackageProvider -Name NuGet -RequiredVersion 2.8.5.201将提供程序导入到当前的PowerShell会话中。

我跑了Get-PackageProvider -ListAvailable并看到了这一点(NuGet出现在以前不存在的地方):

Name                     Version          DynamicOptions                                                                                                                                                                      
----                     -------          --------------                                                                                                                                                                      
msi                      3.0.0.0          AdditionalArguments                                                                                                                                                                 
msu                      3.0.0.0                                                                                                                                                                                              
NuGet                    2.8.5.208        Destination, ExcludeVersion, Scope, SkipDependencies, Headers, FilterOnTag, Contains, AllowPrereleaseVersions, ConfigFile, SkipValidate                                             
PowerShellGet            1.0.0.1          PackageManagementProvider, Type, Scope, AllowClobber, SkipPublisherCheck, InstallUpdate, NoPathUpdate, Filter, Tag, Includes, DscResource, RoleCapability, Command, PublishLocati...
Programs                 3.0.0.0          IncludeWindowsInstaller, IncludeSystemComponent

在未连接的计算机上创建本地存储库

在未连接的(Win 7)计算机上,我创建了一个文件夹用作我的PS存储库(例如c:\users\foo\Documents\PSRepository

我注册了仓库:Register-PSRepository -Name fooPsRepository -SourceLocation c:\users\foo\Documents\PSRepository -InstallationPolicy Trusted

安装NuGet软件包

我在未连接的Win7计算机上获得了nupkg pswindowsupdate.2.0.0.4.nupkg并将其复制到c:\users\foo\Documents\PSRepository

我通过执行Find-Module -Repository fooPsRepository

了解了模块的名称
Version    Name                                Repository           Description                                                                                                                      
-------    ----                                ----------           -----------                                                                                                                      
2.0.0.4    PSWindowsUpdate                     fooPsRepository      This module contain functions to manage Windows Update Client.

我通过执行Install-Module -Name pswindowsupdate

安装了模块

我通过执行Get-Command –module PSWindowsUpdate

验证了已安装的模块
CommandType     Name                                               Version    Source                                                                                                                 
-----------     ----                                               -------    ------                                                                                                                 
Alias           Download-WindowsUpdate                             2.0.0.4    PSWindowsUpdate                                                                                                        
Alias           Get-WUInstall                                      2.0.0.4    PSWindowsUpdate                                                                                                        
Alias           Get-WUList                                         2.0.0.4    PSWindowsUpdate                                                                                                        
Alias           Hide-WindowsUpdate                                 2.0.0.4    PSWindowsUpdate                                                                                                        
Alias           Install-WindowsUpdate                              2.0.0.4    PSWindowsUpdate                                                                                                        
Alias           Show-WindowsUpdate                                 2.0.0.4    PSWindowsUpdate                                                                                                        
Alias           UnHide-WindowsUpdate                               2.0.0.4    PSWindowsUpdate                                                                                                        
Alias           Uninstall-WindowsUpdate                            2.0.0.4    PSWindowsUpdate                                                                                                        
Cmdlet          Add-WUServiceManager                               2.0.0.4    PSWindowsUpdate                                                                                                        
Cmdlet          Enable-WURemoting                                  2.0.0.4    PSWindowsUpdate                                                                                                        
Cmdlet          Get-WindowsUpdate                                  2.0.0.4    PSWindowsUpdate                                                                                                        
Cmdlet          Get-WUApiVersion                                   2.0.0.4    PSWindowsUpdate                                                                                                        
Cmdlet          Get-WUHistory                                      2.0.0.4    PSWindowsUpdate                                                                                                        
Cmdlet          Get-WUInstallerStatus                              2.0.0.4    PSWindowsUpdate                                                                                                        
Cmdlet          Get-WUJob                                          2.0.0.4    PSWindowsUpdate                                                                                                        
Cmdlet          Get-WULastResults                                  2.0.0.4    PSWindowsUpdate                                                                                                        
Cmdlet          Get-WURebootStatus                                 2.0.0.4    PSWindowsUpdate                                                                                                        
Cmdlet          Get-WUServiceManager                               2.0.0.4    PSWindowsUpdate                                                                                                        
Cmdlet          Get-WUSettings                                     2.0.0.4    PSWindowsUpdate                                                                                                        
Cmdlet          Get-WUTest                                         2.0.0.4    PSWindowsUpdate                                                                                                        
Cmdlet          Invoke-WUJob                                       2.0.0.4    PSWindowsUpdate                                                                                                        
Cmdlet          Remove-WindowsUpdate                               2.0.0.4    PSWindowsUpdate                                                                                                        
Cmdlet          Remove-WUServiceManager                            2.0.0.4    PSWindowsUpdate                                                                                                        
Cmdlet          Set-WUSettings                                     2.0.0.4    PSWindowsUpdate                                                                                                        
Cmdlet          Update-WUModule                                    2.0.0.4    PSWindowsUpdate 

我认为我很好

答案 2 :(得分:3)

MSDocs针对您的情况说明以下内容:

为了第一次执行,PackageManagement需要Internet连接才能下载Nuget软件包提供程序。但是,如果您的计算机没有Internet连接,并且需要使用Nuget或PowerShellGet提供程序,则可以将它们下载到另一台计算机上,然后将它们复制到目标计算机上。请按照以下步骤进行操作:

  1. 运行Install-PackageProvider -Name NuGet -RequiredVersion 2.8.5.201-强制从具有Internet连接的计算机上安装提供程序。

  2. 安装后,您可以在$ env:ProgramFiles \ PackageManagement \ ReferenceAssemblies \\\\或$ env:LOCALAPPDATA \ PackageManagement \ ProviderAssemblies \\\\中找到安装的提供程序。

  3. 将文件夹(在本例中为Nuget文件夹)放置在目标计算机上的相应位置。如果目标计算机是Nano服务器,则需要从Nano Server运行Install-PackageProvider来下载正确的Nuget二进制文件。

  4. 重新启动PowerShell以自动加载程序包提供程序。或者,运行Get-PackageProvider -ListAvailable列出计算机上所有可用的软件包提供程序。然后使用Import-PackageProvider -Name NuGet -RequiredVersion 2.8.5.201将提供程序导入到当前的Windows PowerShell会话。

答案 3 :(得分:0)

尝试一下:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Install-PackageProvider NuGet -Force

Set-PSRepository PSGallery -InstallationPolicy Trusted

答案 4 :(得分:0)

该提供程序与PowerShell> = 6.0捆绑在一起。

如果您只需要一种从文件安装软件包的方法,只需从github版本页面上获取.msi安装程序以获取最新版本,将其复制到机器上,进行安装并使用。

答案 5 :(得分:0)

这是我在基于 Dockerfilewindows/servercore 中使用的脚本,用于通过 Artifactory 镜像(也适用于 onegetcdn.azureedge.net)实现完整的 PowerShellGallery 设置

ARG ONEGET_NUGET_PROVIDER="Microsoft.PackageManagement.NuGetProvider-2.8.5.208.dll"
ARG ONEGET_PROVIDERS="https://artifactory/artifactory/generic-azureedge-onegetcdn/providers/"
 
RUN $ProviderPath = 'C:/Program Files/PackageManagement/ProviderAssemblies/'; `
    New-Item -ItemType "directory" -Path $ProviderPath -Force; `
    Invoke-WebRequest -Uri "${Env:ONEGET_PROVIDERS}${Env:ONEGET_NUGET_PROVIDER}" -OutFile "${ProviderPath}${Env:ONEGET_NUGET_PROVIDER}"; `
    Register-PSRepository -Name "artifactory-powershellgallery-remote" -SourceLocation "https://artifactory/artifactory/api/nuget/powershellgallery-remote"; `
    Unregister-PSRepository -Name PSGallery;

位置和 dll 版本在 https://onegetcdn.azureedge.net/providers/providers.masterList.feed.swidtag 处可见