![](/img/trans.png)
[英]How do I install the Nuget provider for PowerShell on a offline machine?
[英]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 文檔:
繼續,正如 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.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
驗證了安裝的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 提供程序,您可以在另一台計算機上下載它們並將它們復制到您的目標計算機。 使用以下步驟執行此操作:
運行
Install-PackageProvider -Name NuGet -RequiredVersion 2.8.5.201 -Force
從具有 Internet 連接的計算機安裝提供程序。安裝后,您可以在
$env:ProgramFiles\\PackageManagement\\ReferenceAssemblies\\\\\\<ProviderName\\>\\\\\\<ProviderVersion\\>
或$env:LOCALAPPDATA\\PackageManagement\\ProviderAssemblies\\\\\\<ProviderName\\>\\\\\\<ProviderVersion\\>
。將文件夾(在本例中為 Nuget 文件夾)放置在目標計算機上的相應位置。 如果您的目標計算機是 Nano 服務器,則需要從 Nano Server 運行 Install-PackageProvider 以下載正確的 Nuget 二進制文件。
重新啟動 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/servercore
的Dockerfile
使用的腳本,用於通過 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.