Невозможно запускать команды Az в Azure Runbook

Я пытаюсь запустить команды Az внутри PowerShell типа Azure Runbook. При запуске он не распознает команды Az и хочет, чтобы я установил NuGet. Теперь при установке NuGet отображается ошибка.

#Set strong cryptography on 64 bit .Net Framework (version 4 and above)
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord

#Set strong cryptography on 32 bit .Net Framework (version 4 and above)
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord 

#Install NuGet
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force

#Uninstall AzureRm
Uninstall-AzureRm

#Install Module
Install-Module -Name Az.Accounts -Force
Install-Module -Name Az.Resources -Force

#Import Module
Import-Module -Name Az.Accounts -Force
Import-Module -Name Az.Resources -Force

#Connect to your Azure Account
$Account = Connect-AzAccount -Credential $Cred

Get-AzResource -ResourceGroupName "test"

Ошибка

Install-PackageProvider : No match was found for the specified search criteria for the provider 'NuGet'. The package provider requires 'PackageManagement' and 'Provider' tags. Please check if the specified package has the tags. At line:17 char:1 + Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (Microsoft.Power...PackageProvider:InstallPackageProvider) [Install-PackageProvider], Exception + FullyQualifiedErrorId : NoMatchFoundForProvider,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackageProvider

Множественные ошибки  введите описание изображения здесь

Если вы заметили, что мой Connect-AzAccount работает успешно, но Get-AzResource выдает ошибку.

  1. Обязательно ли устанавливать NuGet?
  2. Как мой Connect-AzAccount не выдает ошибку.
  3. Мой Uninstall-AzureRm не работает, но если я его не использую, он выдает другую ошибку.

    Get-ChildItem: AzureRM.Profile уже загружен. Модули Az и AzureRM нельзя импортировать в одном сеансе или использовать в одном скрипте или модуле Runbook.

  4. Требуется ли для импорта Get-AzResource какой-либо другой модуль?

  5. На моем локальном компьютере нет проблем. Проблема только в модуле Runbook.

person rAJ    schedule 19.05.2020    source источник


Ответы (2)


Среда Runbook отличается от локальной. Если вы хотите использовать Get-AzResource, выполните следующие действия.

Примечание. Убедитесь, что вы создали Run As Account при создании учетной записи автоматизации, как показано ниже.

введите здесь описание изображения

1. Перейдите к учетной записи автоматизации на портале -> Modules -> Browse Gallery -> найдите Az.Accounts и Az.Resources -> Import оба. Последняя версия Az.Resources имеет зависимость Az.Accounts>=1.8.0. Если у вас уже есть старая версия Az.Accounts, просто удалите ее и установите новейшую версию, а затем установите Az.Resources.

введите здесь описание изображения

2. Затем используйте приведенный ниже сценарий в модуле Runbook PowerShell.

$connectionName = "AzureRunAsConnection"
try
{
    # Get the connection "AzureRunAsConnection "
    $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName         

    Connect-AzAccount `
        -ServicePrincipal `
        -TenantId $servicePrincipalConnection.TenantId `
        -ApplicationId $servicePrincipalConnection.ApplicationId `
        -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint 
}
catch {
    if (!$servicePrincipalConnection)
    {
        $ErrorMessage = "Connection $connectionName not found."
        throw $ErrorMessage
    } else{
        Write-Error -Message $_.Exception
        throw $_.Exception
    }
}

Get-AzResource -ResourceGroupName "<group-name>"

введите здесь описание изображения

person Joy Wang    schedule 20.05.2020
comment
Спасибо, это работает. На самом деле я пытаюсь импортировать модули с помощью команд, но они должны быть импортированы через галерею модулей учетной записи автоматизации. Кроме того, в мою учетную запись автоматизации не было импортировано Az.Resources. - person rAJ; 20.05.2020
comment
Добавляем еще одну вещь. Во-первых, вам нужно импортировать модули в учетную запись автоматизации. Во-вторых, вам также необходимо импортировать его в свой скрипт. - person rAJ; 20.05.2020

Хорошо, если вы хотите установить модули из галереи PowerShell, что вы делаете выше, вам необходимо установить поставщик пакетов NuGet. Я думаю, что это не так, потому что вы не используете TLS 1.2. Пожалуйста, запустите эту строку перед строкой Install-PackageProvider.

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Вы должны убедиться, что у вас запущено приглашение PowerShell с повышенными привилегиями для выполнения установки и удаления модулей, просто упомянув, что, как это выглядит, это может быть вашей проблемой здесь. Вам необходимо удалить командлеты AzureRm, если вы хотите использовать модуль Az в PowerShell 5.1. Последний модуль представляет собой кроссплатформенную замену модуля AzureRm, который теперь устарел. Если Uninstall-AzureRM оказывается проблематичным, после того, как вы закрыли все открытые консоли PowerShell и выполнили удаление от имени администратора, я бы порекомендовал сделать что-то вроде следующего:

# You may want to check the prefix of the AzureRM modules first by just running Get-Module -ListAvailable
Get-Module -Name AzureRM* -ListAvailable | Remove-Module -Force

Возможно, вам потребуется сделать это как для программных файлов (x86) [PowerShell (x86)], так и для программных файлов [PowerShell], поскольку я считаю, что это применимо к обоим.

Конечно, если вы можете просто использовать PowerShell Core, я считаю, что вы можете установить там модуль Az, не удаляя его из PowerShell 5.1. В любом случае, я бы установил полный набор модулей в соответствии с запущенным Microsoft:

Install-Module -Name Az -AllowClobber #-Scope CurrentUser # Uncomment the scope if you want to just install it for yourself

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

Get-AzResource зависит от Az.Resources. Похоже, у вас нет этого модуля, и вы не можете установить его в настоящее время, вероятно, потому, что он не может сначала установить NuGet. Как я упоминал ранее, установка SecurityProtocolType на Tls 1.2 должна исправить это, если все модули AzureRm удалены.

person Ash    schedule 19.05.2020
comment
Спасибо за ответ, но это хорошо, если проблема связана с локальным Powershell. Все, что вы упомянули, я уже пробовал ранее. - person rAJ; 20.05.2020