Azure Runbook - подписка не найдена в контексте

Фон:

Я пытаюсь настроить сценарий через Runbooks в Azure. Что мне необычно, так это то, что я могу запустить команду через Azure Powershell Cloud Shell, и она работает. Однако, когда я пытаюсь запустить его через Runbook, я получаю сообщение об ошибке (см. Ниже).

Сценарий:

$ResourceGroupName = "group"
$ServerName = "serverName"
$DatabaseName = "databaseName"
$StorageKeyType = "StorageAccessKey"
$StorageKey = "storageKey"
$StorageUri = "storageUri"
$AdminLogin = "admin"
$AdminPassword = (ConvertTo-SecureString "12345" -AsPlainText -Force)

New-AzureRmSqlDatabaseExport `
        -AdministratorLogin $AdminLogin `
        -AdministratorLoginPassword $AdminPassword `
        -DatabaseName $DatabaseName `
        -ResourceGroupName $ResourceGroupName `
        -ServerName $ServerName `
        -StorageKey $StorageKey `
        -StorageKeyType $StorageKeyType `
        -StorageUri $StorageUri `

** Использованы общие значения

Ошибка:

New-AzureRmSqlDatabaseExport : No subscription found in the context.  Please ensure that the credentials you provided 
are authorized to access an Azure subscription, then run Connect-AzureRmAccount to login.
At line:10 char:1
+ New-AzureRmSqlDatabaseExport `
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [New-AzureRmSqlDatabaseExport], ApplicationException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.Sql.ImportExport.Cmdlet.NewAzureSqlDatabaseExport

Вопрос:

Что я делаю неправильно? Я использую пароль и имя пользователя, которые используются везде и работают, когда я запускаю скрипт в Cloud Shell. Кроме того, что означает «Подписка не найдена в контексте»?


person TGills    schedule 16.03.2018    source источник


Ответы (2)


В Azure Cloud Shell у вас есть вход в свою учетную запись, поэтому повторный вход в систему не требуется. Но в Runbook вам сначала нужно войти в свою учетную запись.

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

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

    "Logging in to Azure..."
    Add-AzureRmAccount `
        -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
    }
}

В приведенном выше коде вам нужно использовать соединение AzureRunAsConnection, оно создается по умолчанию в Azure, вы можете использовать его напрямую.

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

person Shui shengbao    schedule 19.03.2018

Это означает, что вам нужно войти в Azure, прежде чем что-либо делать. Cloud Shell сделает это за вас, а служба автоматизации Azure - нет.

https://docs.microsoft.com/en-us/powershell/azure/get-started-azureps?view=azurermps-5.5.0#log-in-to-azure

Вы можете использовать логин пользователя Azure AD, вход с сертификатом или логин субъекта-службы. Реальный счет работать не будет, так как он интерактивный.

person 4c74356b41    schedule 16.03.2018
comment
Когда я запускаю команду (Login-AzureRmAccount), она возвращает ошибку: Невозможно загрузить DLL «IEFRAME.dll»: указанный модуль не может быть найден. - person TGills; 17.03.2018
comment
потому что вам нужно пройти аутентификацию в автоматическом режиме, как я уже сказал, вы не можете аутентифицироваться в интерактивном режиме. - person 4c74356b41; 17.03.2018