Как обновить PowerShellGet за корпоративным файерволом?

Вопрос или проблема

Я пытаюсь обновить PowerShellGet с версии 1.0.0.1 до более новой версии на Windows Server 2019. Я не эксперт в NuGet, но имею грубое представление о провайдерах пакетов и источниках пакетов. Я следовал этим инструкциям и инструкциям на сайте Microsoft Learn, а также другим. Я за корпоративным фаерволом и не имею доступа к общему Интернету. У нас есть экземпляр Nexus с настроенными следующими репозиториями:

Сначала я скопировал провайдер 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.

Проблемы и Решаемые Задачи

  1. Отсутствие подходящего хранилища для PowerShellGet: Ошибка указания неверного или недоступного хранилища указывает на необходимость убедиться, что ваш прокси хранилище настроено корректно.
  2. Неопознанные источники репозитория: Ваша конфигурация пакета может быть не полностью настроена, если репозитории не обнаружены.
  3. Ошибки при определении версий: Могут возникнуть проблемы при определении точной совместимой версии для вашей локальной среды.

Пример

Ваш процесс выглядит следующим образом: вы зафиксировали прокси на Nexus и настроили безопасность на использование Tls12. Вы также зарегистрировали источники NuGet и PowerShellGet с необходимыми учетными данными. Проблемы начались на этапе, когда вы пытаетесь использовать команду Install-Module для установки PowerShellGet.

Приложение

Шаги для решения проблемы:

  1. Проверка правильности регистрации хранилищ:

    • Убедитесь, что вы подключаетесь к правильному URL для вашего экземпляра Nexus. URL должен точно соответствовать тому, который вы используете для других успешных модулей.
  2. Уточнение Конфигурации Хранилищ:

    • Запустите Get-PSRepository и Get-PackageSource для проверки текущих настроек и сопоставьте их с теми, кто успешно работают для других модулей.
    • Выполните Set-PSRepository для обновления или исправления настроек, если они отличаются от успешных модулей.
  3. Обновление NuGet Провайдера:

    • Проверьте, что версия NuGet провайдера (2.8.5.208) совместима и полностью установлена. Попробуйте обновить ее до последней версии, если ваша среда это поддерживает.
  4. Проверка доступности PowerShellGet на Прокси:

    • Проверьте, доступен ли PowerShellGet в вашем Nexus репозитории, выполнив поиск через веб-интерфейс Nexus. Убедитесь, что модуль не скрыт или не имеет проблем с отображением в репозитории.
  5. Обновление через Скачанный Пакет:

    • В случае продолжающихся проблем, вы можете скачать последнюю версию PowerShellGet как файл .nupkg на компьютер, имеющий доступ к интернету, затем вручную перенести его в ваш сервер и установить напрямую через локальный путь, используя Install-Package -Source.
  6. Логирование и Отладка:

    • Используйте -Verbose и -Debug флаги для подсказок, которые могут объяснить, что идет не так во время выполнения команды.
  7. Обновление через Другие Консоли:

    • Если все вышеупомянутое не решает проблему, попробуйте использовать другую порцию командной строки PowerShell или даже другой, незаданный экземпляр сервера, чтобы определить, где может скрываться проблема.

Эти действия должны улучшить вопрос архитектуры вашего хранилища и способствовать успешному обновлению PowerShellGet. Помните, что для крупных корпоративных сетей иногда могут потребоваться дополнительные шаги по оптимизации и дополнительной проверке политик безопасности, так как они могут оказывать влияние на доступность и возможность выполнения любых обновлений.

Оцените материал
Добавить комментарий

Капча загружается...