在Azure自动化Runbook

时间:2017-09-26 13:34:39

标签: powershell azure azure-automation azure-mcd

更新

好像其他人有同样的问题并且reported它。

从Azure自动化Runbook调用时,我遇到了一个简单的PowerShell脚本问题。同一条代码在本地运行时无瑕疵

我已在Azure Active Directory(托管在Azure德语云中)中添加了服务主体,并使用密码凭据并授予其参与者对订阅的访问权限(也包含在Azure德国云)。

Azure自动化服务托管在北欧,因为它目前在Azure德国云中不可用。

我尝试做的就是使用Add-AzureRmAccount cmdlet使用上述主体登录我的订阅。之后,我尝试使用Set-AzureRmContext设置当前上下文并收到以下错误消息:

Set-AzureRmContext : Please provide a valid tenant or a valid subscription.
At line:26 char:1
+ Set-AzureRmContext -TenantId $TenantId -Su ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Set-AzureRmContext], ArgumentException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.Profile.SetAzureRMContextCommand

这是我尝试运行的脚本(将配置留空):

$TenantId = ""
$ApplicationId = ""
$ClientSecret = ""
$SubscriptionId = ""

$secpasswd = ConvertTo-SecureString $ClientSecret -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ($ApplicationId , $secpasswd)

Add-AzureRmAccount -ServicePrincipal -Environment 'AzureGermanCloud' -Credential $mycreds -TenantId $TenantId
Set-AzureRmContext -TenantId $TenantId -SubscriptionId $SubscriptionId

我还试图使用Login-AzureRmAccount但没有成功。此外,我可以使用Get-AzureRmResourceGroup cmdlet来检索资源组,以便登录似乎有效。

所有Azure模块都更新为最新版本。

TLTR:

我的主要目标是使用runnbook中的New-AzureRmSqlDatabaseExport启动SQL导出作业,但似乎上述错误导致cmdlet失败,并显示以下消息:

New-AzureRmSqlDatabaseExport : Your Azure credentials have not been set up or have expired, please run 
Login-AzureRMAccount to set up your Azure credentials.
At line:77 char:18
+ ... rtRequest = New-AzureRmSqlDatabaseExport -ResourceGroupName $Resource 

4 个答案:

答案 0 :(得分:2)

几个星期前我遇到了同样的问题,首先使用以下方式登录Azure帐户(我认为你已经这样做了):

Login-AzureRmAccount

然后从Azure获取订阅ID并使用ID而不是名称选择订阅,如下所示:

Select-AzureRmSubscription -SubscriptionId {insert-subscription-id}

答案 1 :(得分:2)

以下是适用于我的代码(常规直流区域)。如果不起作用,请转到自动化帐户>> 模块>> 更新Azure模块

$ClientSecret = ""
$ApplicationId = ""
$SubscriptionId = ""

#New PSCredential Object
$secpasswd = ConvertTo-SecureString $ClientSecret -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ($ApplicationId , $secpasswd)

#Login to subscription
Login-AzureRmAccount -Credential $mycreds -SubscriptionId $SubscriptionId

#Export Database
New-AzureRmSqlDatabaseExport -ResourceGroupName "<RG>" -ServerName "<SQLSERVERNAME>" -DatabaseName "<DATABASENAME>" -StorageKeyType "StorageAccessKey" -StorageKey "<STRKEY>" -StorageUri "<URITOFILE>" -AdministratorLogin "<DBLOGIN>" -AdministratorLoginPassword "<DBPASS>"

更新

使用运行方式帐户运行可能是该问题的解决方法。通过导航到 Azure自动化帐户&gt;&gt;创建一个帐户设置&gt;&gt; 运行方式帐户。这是一个示例代码。

# Authenticate to Azure with service principal and certificate, and set subscription
$connectionAssetName = "AzureRunAsConnection"
$conn = Get-AutomationConnection -Name $ConnectionAssetName

Add-AzureRmAccount -ServicePrincipal -Tenant $conn.TenantID -ApplicationId $conn.ApplicationId -CertificateThumbprint $conn.CertificateThumbprint -ErrorAction Stop | Write-Verbose
Set-AzureRmContext -SubscriptionId $conn.SubscriptionId -ErrorAction Stop | Write-Verbose

答案 2 :(得分:1)

当您登录Azure帐户时,您可以使用指定的订阅ID。您可以尝试以下脚本。

fieldBitMask

答案 3 :(得分:1)

看起来这是known issue,我无法找到解决方法。但是有两个变通办法

  1. 使用 Hybrid Runnbook Worker mentioned by Walter - MSFT
  2. RunAsAccount 证书凭据(mentioned by Bruno Faria
  3. 一起使用

    指定-Environment参数很重要。否则我得到以下异常:

      

    登录 - AzureRmAccount:AADSTS90038:机密客户端不是   跨云请求支持。

    以下是我用于从NorthEurope托管的Azure Runbook登录AzureGermanCloud(MCD)的代码:

    $connectionAssetName = "AzureRunAsConnection"
    $conn = Get-AutomationConnection -Name $ConnectionAssetName
    
    Login-AzureRmAccount `
        -ServicePrincipal `
        -CertificateThumbprint $conn.CertificateThumbprint `
        -ApplicationId $conn.ApplicationId `
        -TenantId $conn.TenantID `
        -Environment AzureGermanCloud