我正在尝试通过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
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
答案 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
如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提供程序,则可以将它们下载到另一台计算机上,然后将它们复制到目标计算机上。请按照以下步骤进行操作:
运行Install-PackageProvider -Name NuGet -RequiredVersion 2.8.5.201-强制从具有Internet连接的计算机上安装提供程序。
安装后,您可以在$ env:ProgramFiles \ PackageManagement \ ReferenceAssemblies \\\\或$ env:LOCALAPPDATA \ PackageManagement \ ProviderAssemblies \\\\中找到安装的提供程序。
将文件夹(在本例中为Nuget文件夹)放置在目标计算机上的相应位置。如果目标计算机是Nano服务器,则需要从Nano Server运行Install-PackageProvider来下载正确的Nuget二进制文件。
重新启动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)
这是我在基于 Dockerfile
的 windows/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 处可见