代码之家  ›  专栏  ›  技术社区  ›  Stpete111

运行Azure Automation Runbook时出现错误消息

  •  0
  • Stpete111  · 技术社区  · 7 年前

    我正在尝试创建一个Azure自动化运行手册,使用来自SQL查询的信息将消息写入现有的Azure存储队列。以下内容在我的Windows10计算机上的PowerShellISE中非常有效,但是在Azure自动化中测试它时,我遇到了一个错误。

    脚本是:

    Connect-AzureRmAccount
    Get-AzureRmSubscription
    Set-AzureRmContext -SubscriptionId <our subscription id>
    
    $resourceGroup = "our resource group"
    $storageAccountName = "our storage account name"
    $queueName = "our queue name"
    $queue = Get-AzureRmStorageQueueQueue -resourceGroup $resourceGroup -storageAccountName $storageAccountName -queueName $queueName
    
    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
    
    $SqlConnection.ConnectionString = "our Azure SQL connection string"
    
    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
    
    $SqlCmd.CommandText = $("SELECT SourceId FROM dbo.batches GROUP BY SourceId HAVING SourceId > 101")
    
    $SqlCmd.Connection = $SqlConnection
    
    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    
    $SqlAdapter.SelectCommand = $SqlCmd
    
    $DataSet = New-Object System.Data.DataSet
    
    $Table = new-object system.data.datatable
    
    $SqlAdapter.Fill($Table) | out-null
    
    $SqlConnection.Close()
    
    $compArray = @($Table | select -ExpandProperty SourceId)
    
     foreach ($array in $compArray) {
     Add-AzureRmStorageQueueMessage -queue $queue -message @{"SourceId"=$array;"RetryCount"=0;}
     }
    

    同样,这在本地计算机上的PowerShell中也能很好地工作,但在Azure自动化中,我会得到以下错误:

    Failed
    Queue <our queue name> could not be retrieved/created from Storage Account <our storage account> on resource group  (Queue <our queue name> could not be retrieved/created from Storage Account <our storage account> on resource group )
    
    Set-AzureRmContext : Run Connect-AzureRmAccount to login.
    At line:3 char:1
    + Set-AzureRmContext -SubscriptionId <our subscription id> ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : CloseError: (:) [Set-AzureRmContext], PSInvalidOperationException
        + FullyQualifiedErrorId : Microsoft.Azure.Commands.Profile.SetAzureRMContextCommand
    
    Get-AzureRmStorageAccount : 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 C:\Modules\User\AzureRmStorageQueue\AzureRmStorageQueueCoreHelper.psm1:86 char:19
    + ... aContext = (Get-AzureRmStorageAccount -ResourceGroupName $resourceGro ...
    +                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : CloseError: (:) [Get-AzureRmStorageAccount], ApplicationException
        + FullyQualifiedErrorId : Microsoft.Azure.Commands.Management.Storage.GetAzureStorageAccountCommand
    
    Get-AzureStorageQueue : Could not get the storage context.  Please pass in a storage context or set the current storage 
    context.
    At C:\Modules\User\AzureRmStorageQueue\AzureRmStorageQueueCoreHelper.psm1:88 char:94
    + ... ue]$queue = Get-AzureStorageQueue -Name $queueName -Context $saContex ...
    +                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : CloseError: (:) [Get-AzureStorageQueue], InvalidOperationException
        + FullyQualifiedErrorId : 
    InvalidOperationException,Microsoft.WindowsAzure.Commands.Storage.Queue.GetAzureStorageQueueCommand
    
    New-AzureStorageQueue : Could not get the storage context.  Please pass in a storage context or set the current storage 
    context.
    At C:\Modules\User\AzureRmStorageQueue\AzureRmStorageQueueCoreHelper.psm1:92 char:95
    + ... ue]$queue = New-AzureStorageQueue -Name $queueName -Context $saContex ...
    +                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : CloseError: (:) [New-AzureStorageQueue], InvalidOperationException
        + FullyQualifiedErrorId : 
    InvalidOperationException,Microsoft.WindowsAzure.Commands.Storage.Queue.NewAzureStorageQueueCommand
    

    有人能帮我处理我在这里丢失的东西吗?(我已经确认azurermstoragequeue模块安装在Azure自动化中。)

    1 回复  |  直到 7 年前
        1
  •  1
  •   Joy Wang    7 年前

    $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
        }
    }
    
    $resourceGroup = "our resource group"
    $storageAccountName = "our storage account name"
    $StorageAccountKey = (Get-AzureRmStorageAccountKey -ResourceGroupName $resourceGroup -AccountName $storageAccountName).Value[1]
    $context=New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey
    $queueName = "our queue name"
    $queue = Get-AzureRmStorageQueueQueue -resourceGroup $resourceGroup -storageAccountName $storageAccountName -queueName $queueName -Context $context
    
    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
    
    $SqlConnection.ConnectionString = "our Azure SQL connection string"
    
    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
    
    $SqlCmd.CommandText = $("SELECT SourceId FROM dbo.batches GROUP BY SourceId HAVING SourceId > 101")
    
    $SqlCmd.Connection = $SqlConnection
    
    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    
    $SqlAdapter.SelectCommand = $SqlCmd
    
    $DataSet = New-Object System.Data.DataSet
    
    $Table = new-object system.data.datatable
    
    $SqlAdapter.Fill($Table) | out-null
    
    $SqlConnection.Close()
    
    $compArray = @($Table | select -ExpandProperty SourceId)
    
     foreach ($array in $compArray) {
     Add-AzureRmStorageQueueMessage -queue $queue -message @{"SourceId"=$array;"RetryCount"=0;}
     }