2017-02-13 15 views
0

Я пытаюсь выполнить команду ниже в рабочей книге PowerShell Workflow Runbook. Я получаю сообщение об ошибке «не может индексироваться в нулевом массиве». Это неверно, поскольку тот же скрипт, который отлично работает на моем локальном компьютере, не выполняется, пока на портале Azure в качестве рабочей книги рабочего стола PowerShell.Azure Powershell Runbook - Get-AzureRMWebAppSlot SiteConfig.ConnectionStrings [0] ошибка не может индексироваться в нулевой массив

Может ли кто-нибудь заглянуть в это?

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

enter image description here

+0

Вы можете подтвердить, что '$ webapp' на самом деле имеет данные в нем и не является' $ null'? – 4c74356b41

+0

Да, я обновил вопрос, чтобы учесть это. @ 4c74356b41 – NikhilGoud

+0

Обратите внимание, что я получаю эту проблему при выполнении этого сценария в качестве рабочего процесса. если я запускаю тот же скрипт без рабочего процесса, все работает нормально. Но мне нужен рабочий процесс, чтобы указать параметры сценария и запланировать выполнение. – NikhilGoud

ответ

1

Некоторые типы не сериализации/десериализации правильно, и в PowerShell Workflow, что является проблемой, поскольку PowerShell Workflow зависит от объекта сериализации/десериализации (это как PSWF способен контрольно-пропускного пункта, приостановить, и resume - он преобразует все объекты в строчную форму при контроле/приостановке и восстанавливает обратно все объекты из этих строк при возобновлении).

Похоже, что выходной объект Get-AzureRMWebAppSlot является одним из тех типов, которые не сериализуются/десериализуются правильно. На скриншоте я вижу, что свойство SiteConfig$webApp - это строка, содержащая 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 
}