#azure-devops #azure-pipelines #azure-powershell
#azure-devops #azure-конвейеры #azure-powershell
Вопрос:
Я пытаюсь выполнить следующий сценарий PowerShell в конвейере Azure DevOps, используя задачу PowerShell с встроенным режимом.
$clientId= "xxxxxxxxx"
$clientSecret= "xxxxxxx"
$subscriptionId= "xxxxxxxx"
$tenantId= "xxxxxxxxxxxxx"
# sign in
Write-Host "Logging in...";
$SecurePassword = $clientSecret | ConvertTo-SecureString -AsPlainText -Force
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $clientId, $SecurePassword
Connect-AzAccount -ServicePrincipal -Credential $cred-Tenant $tenantId
# set azure context with subscriptionId
Set-AzContext -SubscriptionId $subscriptionId
# select subscription
Write-Host "Selecting subscription '$subscriptionId'";
Select-AzSubscription -SubscriptionId $subscriptionId;
Но я получаю следующую ошибку:
Connect-AzAccount : термин «Connect-AzAccount» не распознается как имя командлета, функции, файла сценария или рабочей программы. Проверьте правильность написания имени или, если был указан путь, убедитесь, что путь указан правильно, и повторите попытку.
Комментарии:
1. Из-за этой проблемы попробуйте использовать версию 4 задачи Azure PowerShell. При этом загружаются командлеты Az.
Ответ №1:
Возможно, что модуль, к которому принадлежит эта команда — «Az», отсутствует / должен быть импортирован. В этом случае,
Случай-1
- Откройте Powershell от имени администратора
- Установить модуль —
Install-Module Az
Import-Module Az
- Ваша команда —
Connect-AzAccount
теперь должна работать.
Для случая-2 Импортируйте модуль с помощью — Import-Module Az.Accounts
Комментарии:
1. Полезный совет: если это решение не работает, попробуйте выполнить описанные выше шаги в PowerShell 7. Вероятно, вам придется установить версию 7, поскольку по умолчанию в Windows используется PowerShell 5. Это то, что сработало для меня.
Ответ №2:
Для меня это было проблемой — были установлены AzureRM и AZ.
В Windows PowerShell убедитесь, что у вас установлен AzureRM:
Get-InstalledModule -name AzureRM
используйте команду Uninstall-AzureRM
, чтобы удалить его.
Если приведенная выше команда не работает, используйте нижеприведенную
Get-Module -ListAvailable | Where-Object {$_.Name -like 'AzureRM*'} | Uninstall-Module
Далее ->
Установите ExecutionPolicy на RemoteSigned для powershell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Далее ->
Установите модуль Az PowerShell в Windows PowerShell
Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force
Далее ->
введите Connect-AzAccount
и завершите процесс подписания.
Комментарии:
1. Для тех, кому интересно, AZ является преемником AzureRM, как вы можете видеть здесь: azure.microsoft.com/en-us/blog /. … Возможно, это мое воображение, но, похоже, инструментарий powershell претерпел несколько изменений. По состоянию на 2022 год подход WitVault, вероятно, является вашим лучшим выбором.
2. Сегодня у меня возникла эта проблема при новой установке Windows 11. Я предполагаю, что Visual studio — это то, что установило AzureRM для меня.
Ответ №3:
Я бы рекомендовал вам переключиться на AzurePowershellTask, поскольку вы найдете там предустановленные модули:
Вы также можете попробовать установить модули самостоятельно, как показано здесь, но это бессмысленно, поскольку вы можете использовать существующую задачу.
Ответ №4:
В моем случае AZ не был успешно установлен, поскольку некоторые модули AZ уже были установлены с AzureRM. Я добавил параметр -AllowClobber
, и теперь все модули AZ установлены.
Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -AllowClobber
Удаление AzureRM с помощью command Uninstall-AzureRM
также может быть отличным решением, поскольку вы больше не собираетесь использовать AzureRM. Microsoft собирается прекратить его поддержку иногда в феврале 2024 года.
Ответ №5:
Попробуйте использовать
Вход в систему-AzAccount
вместо
Connect-AzAccount
Ответ №6:
Первое препятствие. Как указано, сначала убедитесь, какую версию командлетов вы используете: Az или AzureRM. Приведенный выше совет зависит от конкретной версии, поэтому это важно.
Затем убедитесь, что вы предоставили правильные разрешения с помощью Azure RG.
Вот пример использования MI для проверки подлинности для запуска конвейера ADF, который отлично работает и включает простую обработку ошибок, поэтому sqlagent завершится с ошибкой, если команда ps завершится с ошибкой (по умолчанию этого НЕ происходит).
#NOSQLPS
$erroractionpreference = "Stop"
Connect-AzAccount -Identity
Select-AzSubscription -Tenant "tenantidgoeshere"
Select-AzSubscription -SubscriptionName "nameofsubsriptiongoeshere"
$dfname = "ADFNamegoeshere"
$rgName = "RGNamegoeshere"
$pipeline = "ADFPipelineNamegoeshere"
Invoke-AzDataFactoryV2Pipeline -DataFactoryName $dfname -ResourceGroupName $rgName -PipelineName $pipeline
Комментарии:
1. Stackoverflow не разрешает редактирование Grrr….so помещаем это в комментарии. Выше используются поддерживаемые в настоящее время командлеты Az, а не не поддерживаемые AzureRM. Также выше был дан несколько советов, которые были дорогостоящими для меня в отношении установки командлетов Az, поскольку он устанавливался только для текущего пользователя. Это не принесет вам никакой пользы при запуске из Sqlagent с использованием учетной записи службы sqlagent. Вместо этого выполните команду следующим образом, чтобы разрешить всем пользователям использовать их….. Install-Module -Name Az -Scope AllUsers -Репозиторий PSGallery -Force