Предоставленная подписка Azure PS Automation xxxx не существует

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

Предоставленная подписка xxxx-xxxx-xxxx-xxx-xxxx не существует.

Подписка существует, и субъект-служба имеет к ней доступ, когда я вхожу в нее локально.

$id = "someid"
$pass = "somepass"

$securePass = $pass | ConvertTo-SecureString -AsPlainText -Force

$cred = new-object -TypeName System.Management.Automation.PsCredential -ArgumentList $id, $securePass

$tenantId = "someID"

Add-AzureRmAccount -Credential $cred -TenantId $tenantId -ServicePrincipal

Select-AzureRmSubscription -SubscriptionId "someID"

person Refi    schedule 22.08.2018    source источник


Ответы (2)


Наконец, я понял эту проблему, через несколько дней.

Об этой проблеме уже сообщалось здесь.

Это связано с проблемой, связанной с командлетами Add-AzureRmAccount с Service Principal.

Как упомянул Hariharan, для решения этой проблемы существует обходной путь.

$connectionAssetName = "AzureRunAsConnection"
$conn = Get-AutomationConnection -Name $ConnectionAssetName

Login-AzureRmAccount `
    -ServicePrincipal `
    -CertificateThumbprint $conn.CertificateThumbprint `
    -ApplicationId $conn.ApplicationId `
    -TenantId $conn.TenantID `
    -Environment AzureGermanCloud

Обратитесь к этому S.O

person Jayendran    schedule 26.08.2018

Для использования службы автоматизации Azure необходимо создать учетную запись службы автоматизации с включенным AzureRunAsConnection. Затем из сценария вы используете его следующим образом

$connectionName = "AzureRunAsConnection"
try {
    # Get the connection "AzureRunAsConnection "
    $servicePrincipalConnection = Get-AutomationConnection -Name $connectionName
    "Logging in to Azure..."
    Connect-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
    }
}

Надеюсь это поможет

person HariHaran    schedule 22.08.2018