Вопрос или проблема
Я пытаюсь обновить PowerShellGet с версии 1.0.0.1 до более новой версии на Windows Server 2019. Я не эксперт в NuGet, но имею грубое представление о провайдерах пакетов и источниках пакетов. Я следовал этим инструкциям и инструкциям на сайте Microsoft Learn, а также другим. Я за корпоративным фаерволом и не имею доступа к общему Интернету. У нас есть экземпляр Nexus с настроенными следующими репозиториями:
- Прокси Nuget под названием psgallery-proxy для https://www.powershellgallery.com/api/v2/
- Прокси Nuget под названием nugetorg-proxy для https://www.nuget.org/api/v2/
Сначала я скопировал провайдер NuGet версии 2.8.5.208 с другого компьютера в $env:ProgramFiles\PackageManagement\ProviderAssemblies\NuGet\2.8.5.208
. Затем я выполнил следующие шаги в Powershell:
[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12
Import-PackageProvider -Name NuGet -RequiredVersion 2.8.5.208
$cred = Get-Credential
Register-PackageSource -Name NexusNugetOrg -ProviderName Nuget -Location https://example.com/repository/nugetorg-proxy/ -Trusted -Credential $cred
Register-PSRepository -Name NexusPSGallery -SourceLocation https://example.com/repository/psgallery-proxy/ -InstallationPolicy Trusted -Credential $cred
После выполнения этих команд я получаю следующее, что, как мне кажется, верно:
PS C:\Windows\system32> Get-PackageProvider -ListAvailable
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, PublishLocation, ScriptSourceLocation, ScriptPublishLocation
Programs 3.0.0.0 IncludeWindowsInstaller, IncludeSystemComponent
PS C:\Windows\system32> Get-PackageSource
Name ProviderName IsTrusted Location
---- ------------ --------- --------
NexusNugetOrg NuGet True https://example.com/repository/nugetorg-proxy/
NexusPSGallery PowerShellGet True https://example.com/repository/psgallery-proxy/
PS C:\Windows\system32> (Get-ItemPropertyValue -LiteralPath 'HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' -Name Release) -ge 394802
True
Я могу устанавливать обычные пакеты. Если я выполняю следующую команду, установка модуля проходит успешно, и я вижу, что dbatools
появляется в Nexus:
Install-Module -Name dbatools -Force -Credential $cred -Repository NexusPSGallery
Однако я не могу обновить PowerShellGet. Я получаю следующий вывод:
PS C:\Windows\system32> Install-Module -Name PowerShellGet -Force -AllowClobber -Credential $cred -Repository NexusNugetOrg
PackageManagement\Get-PackageSource : Невозможно найти репозиторий 'NexusNugetOrg'. Используйте Get-PSRepository, чтобы увидеть все доступные репозитории.
At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:4489 char:35
+ ... ckageSources = PackageManagement\Get-PackageSource @PSBoundParameters
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Microsoft.Power...etPackageSource:GetPackageSource) [Get-PackageSource], Exception
+ FullyQualifiedErrorId : SourceNotFound,Microsoft.PowerShell.PackageManagement.Cmdlets.GetPackageSource
PS C:\Windows\system32> Install-Module -Name PowerShellGet -Force -AllowClobber -Credential $cred -Repository NexusPSGallery
PackageManagement\Install-Package : Совпадения для указанных критериев поиска и имени модуля 'PowerShellGet' не найдены. Попробуйте Get-PSRepository, чтобы увидеть все зарегистрированные репозитории модулей.
At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1809 char:21
+ ... $null = PackageManagement\Install-Package @PSBoundParameters
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Microsoft.Power....InstallPackage:InstallPackage) [Install-Package], Exception
+ FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage
Что мне не хватает, чтобы успешно выполнить Install-Module PowerShellGet?
.
Ответ или решение
Обновление PowerShellGet за корпоративным фаерволом может вызвать некоторые сложности, особенно если учесть необходимость работы с прокси-серверами и ограниченный доступ к интернет-ресурсам. Давайте рассмотрим процесс обновления более подробно, предоставляя вам ясное руководство по преодолению этих преград.
Теория
PowerShellGet — это модуль, который упрощает установку, обновление и публикацию исходных модулей PowerShell. В данном случае, вы уже создали необходимые NuGet-прокси на вашем Nexus-сервере, но испытываете трудности с обновлением PowerShellGet.
Проблемы и Решаемые Задачи
- Отсутствие подходящего хранилища для PowerShellGet: Ошибка указания неверного или недоступного хранилища указывает на необходимость убедиться, что ваш прокси хранилище настроено корректно.
- Неопознанные источники репозитория: Ваша конфигурация пакета может быть не полностью настроена, если репозитории не обнаружены.
- Ошибки при определении версий: Могут возникнуть проблемы при определении точной совместимой версии для вашей локальной среды.
Пример
Ваш процесс выглядит следующим образом: вы зафиксировали прокси на Nexus и настроили безопасность на использование Tls12. Вы также зарегистрировали источники NuGet и PowerShellGet с необходимыми учетными данными. Проблемы начались на этапе, когда вы пытаетесь использовать команду Install-Module
для установки PowerShellGet.
Приложение
Шаги для решения проблемы:
-
Проверка правильности регистрации хранилищ:
- Убедитесь, что вы подключаетесь к правильному URL для вашего экземпляра Nexus. URL должен точно соответствовать тому, который вы используете для других успешных модулей.
-
Уточнение Конфигурации Хранилищ:
- Запустите
Get-PSRepository
иGet-PackageSource
для проверки текущих настроек и сопоставьте их с теми, кто успешно работают для других модулей. - Выполните
Set-PSRepository
для обновления или исправления настроек, если они отличаются от успешных модулей.
- Запустите
-
Обновление NuGet Провайдера:
- Проверьте, что версия NuGet провайдера (2.8.5.208) совместима и полностью установлена. Попробуйте обновить ее до последней версии, если ваша среда это поддерживает.
-
Проверка доступности PowerShellGet на Прокси:
- Проверьте, доступен ли PowerShellGet в вашем Nexus репозитории, выполнив поиск через веб-интерфейс Nexus. Убедитесь, что модуль не скрыт или не имеет проблем с отображением в репозитории.
-
Обновление через Скачанный Пакет:
- В случае продолжающихся проблем, вы можете скачать последнюю версию PowerShellGet как файл
.nupkg
на компьютер, имеющий доступ к интернету, затем вручную перенести его в ваш сервер и установить напрямую через локальный путь, используяInstall-Package -Source
.
- В случае продолжающихся проблем, вы можете скачать последнюю версию PowerShellGet как файл
-
Логирование и Отладка:
- Используйте
-Verbose
и-Debug
флаги для подсказок, которые могут объяснить, что идет не так во время выполнения команды.
- Используйте
-
Обновление через Другие Консоли:
- Если все вышеупомянутое не решает проблему, попробуйте использовать другую порцию командной строки PowerShell или даже другой, незаданный экземпляр сервера, чтобы определить, где может скрываться проблема.
Эти действия должны улучшить вопрос архитектуры вашего хранилища и способствовать успешному обновлению PowerShellGet. Помните, что для крупных корпоративных сетей иногда могут потребоваться дополнительные шаги по оптимизации и дополнительной проверке политик безопасности, так как они могут оказывать влияние на доступность и возможность выполнения любых обновлений.