Проблемы с репозиториями PowerShell на агентах Azure DevOps

Извините за очень длинный пост, но я действительно застрял и надеюсь, что кто-то может помочь. Я так много раз возвращался и возвращался, и у меня возникло множество проблем со всем, что связано с репозиториями PowerShell и агентами Azure DevOps.

Конечная цель - установить последние версии некоторых модулей PowerShell как часть конвейера.

Я пишу различные модули PowerShell, упаковываю их как NuGets и отправляю в разные репозитории (артефакты Azure DevOps, SonaType Nexus OSS)

Затем мне нужно установить эти модули как часть других конвейеров. Поскольку в Azure DevOps нет встроенного способа обработки репозиториев PowerShell и модулей импорта, я написал сценарий, который принимает в качестве параметров расположение, имя и учетные данные репозитория, проверяет, зарегистрирован ли он, и устанавливает модуль. Когда я запускаю этот сценарий на ЛЮБОЙ машине, он отлично работает.Когда этот сценарий представляет собой задачу PowerShell на любом конвейере, он имеет различные сбои, всегда с командлетами из PackageManagement.

Я думал, что это потому, что агент запускает его с -NoProfile, но у меня это работает, когда я запускаю сценарий точно так, как его запускает агент - "powershell.exe -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ". 'C:.....'"

Я также попытался запустить задачу cmd и вызвать PowerShell для запуска сценария, но получил те же результаты

Проблемы, с которыми я сталкиваюсь:

  • Get-PSRepository НИЧЕГО не возвращает. Даже PSGallery

  • Когда я пытаюсь зарегистрировать репозиторий (используя Register-PSRepository или Register-PackageSource), он выдает ошибку:PackageManagement\Register-PackageSource : The property 'Values' cannot be found on this object. Verify that the property exists.

  • как часть моего скрипта я запускаю эти командлеты, чтобы убедиться, что все необходимые модули есть:

    $webclient=New-Object System.Net.WebClient; $webclient.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials; [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Install-PackageProvider -Name NuGet -RequiredVersion 2.8.5.208 -Force -Confirm:$false -Verbose; Install-Module PowerShellGet -RequiredVersion 2.2.4 -SkipPublisherCheck -Verbose -Force;

  • Другая возникающая ошибка:

PackageManagement\Get-PackageSource : Unable to find repository 'PSGallery'. Use Get-PSRepository to see all available repositories.

Я потратил на это часы. Как правильно установить модули PS из стороннего репозитория (на основе NuGet)

Спасибо

1 ответ

Я заметил, что вы отправили свой пакет nuget в Azure Artifacts.

Вы можете добавить задачи Powershell в конвейер и запустить следующие сценарии:

Регистр-PS Репозиторий:

 $patToken = "PAT" | ConvertTo-SecureString -AsPlainText -Force
    
 $credsAzureDevopsServices = New-Object System.Management.Automation.PSCredential("email address", $patToken)
    
 Register-PSRepository -Name "PowershellAzureDevopsServices" -SourceLocation "https://pkgs.dev.azure.com/<org_name>/<project_name>/_packaging/<feed_name>/nuget/v2" -PublishLocation "https://pkgs.dev.azure.com/<org_name>/<project_name>/_packaging/<feed_name>/nuget/v2" -InstallationPolicy Trusted -Credential $credsAzureDevopsServices

Тогда вы сможете успешно зарегистрироваться.

Примечание: я предлагаю вам создать a Project Scope feed. Или у вас могут возникнуть проблемы.

Затем вы можете запустить следующие сценарии для установки модуля.

Find-Module -Repository PowershellAzureDevopsServices

Install-Module -Name Get-Hello -Repository PowershellAzureDevopsServices

Для получения более подробной информации вы можете обратиться к этому Руководству.