Azure Powershell Runbook - Get-AzureRMWebAppSlot SiteConfig.ConnectionStrings[0] 错误无法索引到空数组

Posted

技术标签:

【中文标题】Azure Powershell Runbook - Get-AzureRMWebAppSlot SiteConfig.ConnectionStrings[0] 错误无法索引到空数组【英文标题】:Azure Powershell Runbook - Get-AzureRMWebAppSlot SiteConfig.ConnectionStrings[0] erroring cannot index into a null array 【发布时间】:2017-07-01 14:41:17 【问题描述】:

我正在尝试在 PowerShell 工作流运行手册中执行以下命令。我收到错误“无法索引到空数组。”,这是不正确的,因为在我的本地计算机上完美运行的同一脚本在 Azure 门户中作为 PowerShell 工作流运行手册没有执行。

有人可以调查一下吗?

$webApp = Get-AzureRMWebAppSlot -ResourceGroupName $ResourceGroupName -Name $WebSiteName -Slot $WebSiteSlot
$webApp
"Printing Website ConncectionString"
$webApp.SiteConfig.ConnectionStrings.ConnectionString[0]

【问题讨论】:

你能确认$webapp里面确实有数据而不是$null吗? 是的,我更新了问题以解决这个问题。 @4c74356b41 请注意,我在将此脚本作为工作流执行时特别遇到了这个问题。如果我在没有工作流的情况下运行相同的脚本,一切都可以正常工作。但我需要工作流来向脚本提及参数并安排执行。 【参考方案1】:

某些类型不能正确序列化/反序列化,在 PowerShell 工作流中这是一个问题,因为 PowerShell 工作流依赖于对象序列化/反序列化(这就是 PSWF 能够检查点、挂起和恢复的方式——它将所有对象转换为检查点/挂起时的字符串形式,并在恢复时从这些字符串恢复为完整对象)。

看起来Get-AzureRMWebAppSlot 的输出对象是不能正确序列化/反序列化的类型之一。从您的屏幕截图中,我可以看到$webAppSiteConfig 属性是一个包含Microsoft.Azure.Management.WebSites.Model.SiteConfig 的字符串,而不是您期望的对象。显然,对象没有正确反序列化回其原始形式,其中SiteConfig 是一个复杂对象。

解决此问题的方法是仅与 PowerShell 脚本上下文中的对象交互,而不是工作流上下文。例如:

workflow foo 
   $ResourceGroupName = "RG"
   $WebSiteName = "WS"
   $WebSiteSlot = "Slot"

   $ConnectionString = InlineScript 
      $webApp = Get-AzureRMWebAppSlot -ResourceGroupName $using:ResourceGroupName -Name $using:WebSiteName -Slot $using:WebSiteSlot
      $webApp.SiteConfig.ConnectionStrings.ConnectionString[0]
   

   "Printing Website ConnectionString"
   $ConnectionString

【讨论】:

以上是关于Azure Powershell Runbook - Get-AzureRMWebAppSlot SiteConfig.ConnectionStrings[0] 错误无法索引到空数组的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PowerShell Runbook 在 azure blob 存储上创建文本文件?

Azure Runbook检查状态

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

通过 powershell 和 Azure Runbook 与个人联系人同步交换中的全局地址列表

Azure Powershell Runbook - Get-AzureRMWebAppSlot SiteConfig.ConnectionStrings[0] 错误无法索引到空数组

Start-Sleep 在 Runbook powershell 工作流程中不起作用