Azure Runbook 错误,AzureRmStorageAccountKey 无法索引到空数组

Posted

技术标签:

【中文标题】Azure Runbook 错误,AzureRmStorageAccountKey 无法索引到空数组【英文标题】:Azure Runbook Error, AzureRmStorageAccountKey Cannot Index into null array 【发布时间】:2017-11-07 12:27:57 【问题描述】:

我正在尝试在 Azure 运行手册中运行此命令

(Get-AzureRmStorageAccountKey -Name $defaultStorageAccountName -ResourceGroupName $defaultResourceGroupName).Value[0]

它在我的本地机器上运行良好,我可以看到存储帐户密钥。但是,当我在 Azure Runbook 中运行相同的命令时,它会引发以下错误

Cannot index into a null array

如果我只是在 Azure Runbook 中运行 Get-AzureRmStorageAccountKey -Name $defaultStorageAccountName -ResourceGroupName $defaultResourceGroupName,它运行良好并且我可以看到密钥。只是当我从 Array 中选择一个元素时,它会失败并引发错误。

我的本​​地计算机和 Azure Runbook 上的 PowerShell 版本为 5。

更新:

在我的自动化帐户中更新库中的模块后,我的问题得到了解决。

【问题讨论】:

尝试get-member -inputobject (Get-AzureRmStorageAccountKey -Name $defaultStorageAccountName -ResourceGroupName $defaultResourceGroupName).Value 并发布结果 我已经运行了你建议的命令,它抛出了这个错误get-member : You must specify an object for the Get-Member cmdlet 好吧,没有名为value 的属性尝试执行get-member -inputobject (Get-AzureRmStorageAccountKey -Name $defaultStorageAccountName -ResourceGroupName $defaultResourceGroupName) 并查看所有存在的属性 我得到的输出是Equals Method bool Equals(System.Object obj) tem.Object obj) GetHashCode Method int GetHashCode() GetType Method type GetType() ToString Method string ToString() Key1 Property string Key1 get;set; Key2 Property string Key2 get;set; 【参考方案1】:

根据您的描述,我在运行手册中测试了您的 cmdlet,我可以获得存储密钥。

您可以使用以下命令登录您的订阅。

Write-Verbose "Get connection asset: $ConnectionAssetName" -Verbose
$connectionName = Get-AutomationConnection -Name "AzureRunAsConnection"
$AzureCredentialAssetName = "AzureRunAsConnection"
try

    # Get the connection "AzureRunAsConnection "
    $servicePrincipalConnection=Get-AutomationConnection -Name $AzureCredentialAssetName        

    "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
    


$key=(Get-AzureRmStorageAccountKey -Name <storage account name> -ResourceGroupName <resource group name>).Value[0]
"The storage account key is $key"

更多信息请参考link。 更新

您需要更新自动化帐户中的 Azure 存储帐户模块版本,然后才能解决此问题。

【讨论】:

我已经运行了你的脚本,但它仍然抛出同样的错误。 Cannot index into a null array 我认为这与登录无关。因为以下成功运行Get-AzureRmStorageAccountKey -Name "xxx" -ResourceGroupName "yyy" 并且它显示输出为Microsoft.Azure.Management.Storage.Models.StorageAccountKeys 奇怪,数据类型不对。根据这个数据类型,应该使用(Get-AzureRmStorageAccountKey -Name $defaultStorageAccountName -ResourceGroupName $defaultResourceGroupName).Value,如果使用value[0],会报错Cannot index into a null array 我在实验室进行测试,我在 Runbook 上的数据类型是 Microsoft.Azure.Management.Storage.Models.StorageAccountKey Microsoft.Azure.Management.Storage.Models.StorageAccountKey。所以我可以使用value[0]value[1]。您是否确保使用 ARM 存储帐户并选择正确的订阅。 ` 你的关键数据类型错误的根本原因。我建议您可以尝试创建一个新的 ARM 存储帐户并测试在 Runbook 中获取存储密钥。 我通过为我的 Azure 自动化帐户更新 Modules 解决了这个问题

以上是关于Azure Runbook 错误,AzureRmStorageAccountKey 无法索引到空数组的主要内容,如果未能解决你的问题,请参考以下文章

使用 Webhook“参数列表中缺少参数”触发 Azure 自动化 Runbook 失败

Azure Runbook 不删除文件共享中的文件

Azure自动化| Runbook | Powershell | Get-AzRoleAssignment | Microsoft.Rest.Azure.CloudException

Azure Runbook检查状态

使用 python 将 azure Runbook 与 azure 中的文件共享连接起来

在 Azure Runbook 上运行“mysqldump”