我正在使用Windows 10和Powershell 5.1
Get-PSRepository的结果为:
不受信任的PSGallery https://www.powershellgallery.com/api/v2
而更新模块返回错误
PackageManagement \ Install-Package:无法找到存储库'https://www.powershellgallery.com/api/v2/'。采用 Get-PSRepository查看所有可用的存储库。 在C:\ Program Files \ WindowsPowerShell \ Modules \ powershellget \ 2.0.1 \ PSModule.psm1:13000 char:20 + ... $ sid = PackageManagement \ Install-Package @PSBoundParameters + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~ + CategoryInfo:ObjectNotFound:(Microsoft.Power .... InstallPackage:InstallPackage)[安装包],例如 知觉 + FullyQualifiedErrorId:SourceNotFound,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage
有什么解决办法的想法吗?
答案 0 :(得分:13)
貌似在PowerShell中注册的PSGallery存储库的URL曾经指向https://www.powershellgallery.com/api/v2/,但在某些时候它已更改为https://www.powershellgallery.com/api/v2(注意末尾缺少正斜杠)。
λ Get-PSRepository
Name InstallationPolicy SourceLocation
---- ------------------ --------------
PSGallery Untrusted https://www.powershellgallery.com/api/v2
从旧URL安装的所有模块现在都无法更新。从PowerShell库中重新安装它们将更新存储库URL,从而允许正常情况下对模块进行更新。您可以使用以下命令来重新安装指向旧URL的所有模块:
Get-InstalledModule `
| ? { $_.Repository -eq 'https://www.powershellgallery.com/api/v2/' } `
| % { Install-Package -Name $_.Name -Source PSGallery -Force -AcceptLicense }
我自己遇到了这个令人讨厌的问题。从错误消息中,我们可以看到以下几点:
PackageManagement \ Install-Package:无法找到存储库'https://www.powershellgallery.com/api/v2/'
PowerShellGet\Update-Module
最终将钱推给了
PackageManagement\Install-Package
在我的计算机上运行Get-PSRepository
会产生以下结果:
Name InstallationPolicy SourceLocation
---- ------------------ --------------
PSGallery Trusted https://www.powershellgallery.com/api/v2
因此,看起来好像存储库在那里,除了,也许不是。注意尾随的前斜杠。难道Install-Package
正在寻找一个与该字符串完全匹配的SourceLocation
的存储库?让我们尝试为PSGallery更改SourceLocation
:
Set-PSRepository -Name PSGallery -SourceLocation https://www.powershellgallery.com/api/v2/ -InstallationPolicy Trusted
PackageManagement \ Set-PackageSource:PSGallery存储库具有 预定义的位置。 “位置,NewLocation或SourceLocation” 参数是不允许的,请在删除“位置”后重试, NewLocation或SourceLocation”参数。在C:\ Program 文件\ WindowsPowerShell \ Modules \ PowerShellGet \ 2.0.4 \ PSModule.psm1:11768 字符:17 + ... $ null = PackageManagement \ Set-PackageSource @PSBoundParameters + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~ + CategoryInfo:InvalidArgument:(https://www.pow...ery.com/api/v2/:String)[Set-PackageSource], 例外 + FullyQualifiedErrorId:ParameterIsNotAllowedWithPSGallery,Add-PackageSource,Microsoft.PowerShell.PackageManagement.Cmdlets.SetPackageSource
嗯,那没用。看来PSGallery储存库出于您的安全受到保护。
让我们尝试添加其他存储库并更新模块:
Register-PSRepository -Name PSGallery1 -SourceLocation https://www.powershellgallery.com/api/v2/ -InstallationPolicy Trusted
Update-Module -Name pester -Force
看,没有错误。可行!
这是有趣的事情,如果我拉出已安装模块的列表,则会发现混合存储库:
Get-InstalledModule | Select Name, Repository | FT -AutoSize
Name Repository
---- ----------
7Zip4Powershell PSGallery
AWSPowerShell PSGallery
cChoco PSGallery1
dbatools PSGallery
DLMAutomation PSGallery1
InvokeBuild PSGallery1
Microsoft.PowerShell.Archive PSGallery1
PackageManagement PSGallery
Pester PSGallery1
posh-git PSGallery1
powershell-yaml PSGallery1
PowerShellGet PSGallery
PowerUpSQL PSGallery1
psake PSGallery1
PsHosts PSGallery1
psTrustedHosts PSGallery1
ReverseDSC PSGallery1
SeeShell PSGallery1
SqlServer PSGallery1
TunableSSLValidator PSGallery1
xSmbShare PSGallery1
xWebAdministration PSGallery1
查看从PSGallery1安装的所有与https://www.powershellgallery.com/api/v2/关联的模块!在此之前,我的计算机上从未存在过名为PSGallery1的存储库。我曾经安装的每个模块都来自PSGallery。我的猜测是,PSGallery存储库曾经指向https://www.powershellgallery.com/api/v2/,在某个时刻,无论是否有意将其更改为https://www.powershellgallery.com/avp/v2;对于从先前的URL安装的所有模块,请破坏Update-Module
。我怀疑如果我使用Install-Package
从更新的PSGallery存储库中重新安装模块,一切都会自行解决,并且可以删除PSGallery1存储库。
让我们更新从旧网址(PSGallery1)部署的所有模块:
Get-InstalledModule `
| ? { $_.Repository -eq 'PSGallery1' } `
| % { Install-Package -Name $_.Name -Source PSGallery -Force -AcceptLicense }
再次运行Get-InstalledModule
会产生:
Name Repository
---- ----------
7Zip4Powershell PSGallery
AWSPowerShell PSGallery
cChoco PSGallery
dbatools PSGallery
DLMAutomation PSGallery
InvokeBuild PSGallery
Microsoft.PowerShell.Archive PSGallery
PackageManagement PSGallery
Pester PSGallery
posh-git PSGallery
powershell-yaml PSGallery
PowerShellGet PSGallery
PowerUpSQL PSGallery
psake PSGallery
PsHosts PSGallery
psTrustedHosts PSGallery
ReverseDSC PSGallery
SeeShell PSGallery
SqlServer PSGallery
TunableSSLValidator PSGallery
xSmbShare PSGallery
xWebAdministration PSGallery
太好了!现在,让我们尝试删除PSGallery1存储库并更新模块:
Unregister-PSRepository PSGallery1
Update-Module -Name pester -Force
成功!模块已更新,没有错误。
我不确定PSGallery存储库的URL或Install-Package
在这里有什么问题,但是重新安装从旧URL安装的所有模块似乎可以解决所有问题。
答案 1 :(得分:7)
我遇到了同样的问题,并且发现了这个问题。我尝试了杰森·博伊德(Jason Boyd)(上面)写的所有内容,但是没有用。
搜索更多内容,找到此链接https://community.spiceworks.com/topic/2265662-powershell-get-download-problem
说 TLS 1.0 可能是罪魁祸首。建议跑步
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
之后,我能够更新我的软件包。
答案 2 :(得分:1)
我在使用Windows Powershell 5.1.17134.407时遇到了相同的问题,并且还在PowerShell 6.1的同一台计算机上进行了测试。 Update-Module可以与PowerShell 6.1一起使用,并且在Windows PowerShell和PowerShell中具有相同版本的PowerShellGet模块。因此,问题似乎是Windows PowerShell所独有的,无需进一步测试就可以猜测,这是在Windows PowerShell上运行时PowerShellGet模块本身的Update-Module代码中的问题。
我没有使用Update-Module的解决方案,但可以使用-AllowClobber参数代替Install-Module。它不会像Update-Module一样因此错误而失败。而且,至少现在,最终结果将是相同的,因为Update-Module实际上只是与根据我的测试和https://github.com/PowerShell/PowerShellGet/issues/213安装的所有旧版本并排安装了新版本。
...
做完一些进一步的测试后,我碰巧重新启动了正在测试的系统。重新启动后,Windows PowerShell 5.1中的Update-Module问题已解决-Update-Module现在可以按预期工作。我不能肯定地说重启是解决它的原因,但是现在已经解决了。
答案 3 :(得分:1)
我知道自从该线程处于活动状态以来已经有一段时间了,但是我遇到了类似的问题。经过各种尝试后,强制重新安装Nuget软件包提供程序似乎已解决了Update-Module的问题。
在提升的PowerShell会话中执行此操作:
Install-PackageProvider Nuget –Force
作为参考,我取得最大成功的时候就在这里: https://docs.microsoft.com/en-us/powershell/gallery/installing-psget
欢呼
答案 4 :(得分:1)
我尝试了这个,但是我确实得到了PSGaller2的支持。 所以我进一步寻找了解决方案。由于我在VPN / Proxy envirenmont中,因此无法正常工作。当我用餐时,它对我有用。
$webclient=New-Object System.Net.WebClient
$webclient.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
答案 5 :(得分:0)
对我来说,这些是有效的代码:
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))"
$env:Path += ";C:\ProgramData\chocolatey\bin"
答案 6 :(得分:0)
我发现了类似的问题。就我而言,这是由于TLS而发生的。
我按照以下步骤解决了该问题,如下所示: 1.在64位.Net Framework(版本4及更高版本)上设置强密码学 Set-ItemProperty-路径'HKLM:\ SOFTWARE \ Wow6432Node \ Microsoft.NetFramework \ v4.0.30319'-名称'SchUseStrongCrypto'-值'1'-类型Dword
在32位.Net Framework(版本4及更高版本)上设置了强密码学 Set-ItemProperty-路径'HKLM:\ SOFTWARE \ Microsoft.NetFramework \ v4.0.30319'-名称'SchUseStrongCrypto'-值'1'-Type Dword
重新启动PS控制台
通过使用[Net.ServicePointManager] :: SecurityProtocol
答案 7 :(得分:0)
尝试一下:
[System.Net.WebRequest]::DefaultWebProxy.Credentials = System.Net.CredentialCache]::DefaultCredentials
get-psrepository
register-psrepository -default
答案 8 :(得分:0)
以上答案的结合为我解决了这个问题。
PS> [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
PS> Install-PackageProvider Nuget –Force
PS> Install-Module -Name PSWindowsUpdate
您可能需要先删除旧版本的PSWindowsUpdate
才能安装新版本。
您可以执行-force
,它将并排安装两个版本,但这可能不是最好的主意。
答案 9 :(得分:0)
修复: