簡體   English   中英

Powershell: 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?

[英]Powershell: 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?

我正在嘗試在未連接到 Internet 的 Win 7 計算機上從 Powershell 命令行安裝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 -Name 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 嗎? How do I obtain and install the Nuget provider (v2.8.5.201 or greater) for PowerShell so I can install this nuget package from the PowerShell command line?

注意:Visual Studio 與我的問題沒有任何關系

雖然我已經嘗試了所有以前的答案,但只有以下一個解決了:

1 - 打開 Powershell(以管理員身份)

2 - 運行:

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

3 - 運行:

Install-PackageProvider -Name NuGet

作者是 Niels Weistra: 微軟論壇

我接受了trebleCode 的回答,但我想通過遵循 trebleCode 的回答,提供有關在未連接的 Win 7 機器上安裝感興趣的 nupkg pswindowsupdate.2.0.0.4.nupkg采取的步驟的更多詳細信息。

首先:經過一番挖掘,我想我找到了高音代碼所指的 MS 文檔:

引導 NuGet 提供程序和 NuGet.exe

安裝包提供者

繼續,正如 trebleCode 所說,我做了以下

在我連接的機器上安裝 NuGet 提供程序

在連接的機器(Win 10 機器)上,我從 PS 命令行運行Install-PackageProvider -Name NuGet -RequiredVersion 2.8.5.208 -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.208將提供程序導入到當前的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

我注冊了 repo: Register-PSRepository -Name fooPsRepository -SourceLocation c:\\users\\foo\\Documents\\PSRepository -InstallationPolicy Trusted

安裝 NuGet 包

我在未連接的 Win7 機器上獲取並復制了 nupkg pswindowsupdate.2.0.0.4.nupkgc:\\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驗證了安裝的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 

我想我可以走了

MSDocs 針對您的情況說明了這一點:

為了第一次執行,PackageManagement 需要 Internet 連接才能下載 Nuget 包提供程序。 但是,如果您的計算機沒有 Internet 連接並且您需要使用 Nuget 或 PowerShellGet 提供程序,您可以在另一台計算機上下載它們並將它們復制到您的目標計算機。 使用以下步驟執行此操作:

  1. 運行Install-PackageProvider -Name NuGet -RequiredVersion 2.8.5.201 -Force從具有 Internet 連接的計算機安裝提供程序。

  2. 安裝后,您可以在$env:ProgramFiles\\PackageManagement\\ReferenceAssemblies\\\\\\<ProviderName\\>\\\\\\<ProviderVersion\\>$env:LOCALAPPDATA\\PackageManagement\\ProviderAssemblies\\\\\\<ProviderName\\>\\\\\\<ProviderVersion\\>

  3. 將文件夾(在本例中為 Nuget 文件夾)放置在目標計算機上的相應位置。 如果您的目標計算機是 Nano 服務器,則需要從 Nano Server 運行 Install-PackageProvider 以下載正確的 Nuget 二進制文件。

  4. 重新啟動 PowerShell 以自動加載包提供程序。 或者,運行Get-PackageProvider -ListAvailable以列出計算機上所有可用的包提供程序。 然后使用Import-PackageProvider -Name NuGet -RequiredVersion 2.8.5.201將提供程序導入到當前的 Windows PowerShell 會話。

嘗試這個:

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

Install-PackageProvider NuGet -Force

Set-PSRepository PSGallery -InstallationPolicy Trusted

提供程序與 PowerShell>=6.0 捆綁在一起。

如果您只需要一種從文件安裝包的方法,只需從 github 發布頁面獲取最新版本的 .msi 安裝程序,將其復制到機器上,安裝並使用它。

這是我在基於windows/servercoreDockerfile使用的腳本,用於通過 Artifactory 鏡像實現完整的 PowerShellGallery 設置(也適用於 onegetcdn.azureedge.net)

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

該線程中的所有選項都不適合我。 我正在使用 PowerShell Core 7.1.5。 對我有用的是從 $env:PSModulePath 中刪除 Windows Powershell 模塊。 本質上,檢查您的環境變量並查找任何包含“WindowsPowerShell”的路徑並將其刪除。

為了以非交互方式安裝 Nuget Package 管理器,只需使用繞過提示的-Force標志:

Install-PackageProvider NuGet -Force

您不必使用有關安全協議的技巧,至少對於 Windows Powershell (5.1)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM