Connect-AzAccount: термин «Connect-AzAccount» не распознается как имя командлета, функции, файла сценария или рабочей программы

#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

  1. Откройте Powershell от имени администратора
  2. Установить модуль — Install-Module Az
  3. Import-Module Az
  4. Ваша команда — 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