TL; DR
Похоже, что URL-адрес хранилища PSGallery, зарегистрированного в PowerShell, использовался для указания на 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
- ищет хранилище
в 'https://www.powershellgallery.com/api/v2/'
Запуск Get-PSRepository
на моей машине дает:
Name InstallationPolicy SourceLocation
---- ------------------ --------------
PSGallery Trusted https://www.powershellgallery.com/api/v2
Так что похоже, что хранилище есть, кроме, может быть, его нет. Обратите внимание на скользящий слеш. Может быть, Install-Package
ищет репозиторий с SourceLocation
, который точно соответствует этой строке? Давайте попробуем изменить SourceLocation
для PSGallery:
Set-PSRepository -Name PSGallery -SourceLocation https://www.powershellgallery.com/api/v2/ -InstallationPolicy Trusted
PackageManagement \ Set-PackageSource: репозиторий PSGallery имеет
заранее определенные места. «Местоположение, новое местоположение или исходное местоположение»
параметр не разрешен, попробуйте еще раз после удаления «Расположение,
Параметр 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;, ломая Update-Module
для любых модулей, установленных с предыдущего URL. Я подозреваю, что если я переустановлю модули, используя Install-Package
из обновленного репозитория PSGallery, все разрешится само собой, и я смогу удалить репозиторий PSGallery1.
Давайте обновим все модули, которые были развернуты со старого URL (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
Успех! Модуль обновлен без ошибок.
Я не уверен, что здесь сломано, URL-адрес для репозитория PSGallery или Install-Package
, но переустановка всех модулей, которые были установлены по старому URL-адресу, похоже, исправит все.