【问题标题】:Azure Powershell Runbook - Get-AzureRMWebAppSlot SiteConfig.ConnectionStrings[0] erroring cannot index into a null arrayAzure Powershell Runbook - Get-AzureRMWebAppSlot SiteConfig.ConnectionStrings[0] 错误无法索引到空数组
【发布时间】: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
  • 请注意,我在将此脚本作为工作流执行时特别遇到了这个问题。如果我在没有工作流的情况下运行相同的脚本,一切都可以正常工作。但我需要工作流来向脚本提及参数并安排执行。

标签: powershell azure azure-powershell azure-automation


【解决方案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
}

【讨论】:

    猜你喜欢
    • 2017-11-07
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    相关资源
    最近更新 更多