2017-02-13 7 views
0

PowerShell 워크 플로 런북에서 아래 명령을 실행하려고합니다. Azure 포털에서 PowerShell Workflow Runbook으로 실행되는 동안 내 로컬 컴퓨터에서 완벽하게 실행되는 동일한 스크립트가 실행되지 않아서 "null 배열로 색인 할 수 없습니다."라는 오류가 발생합니다.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

이 스크립트를 워크 플로로 실행하는 동안이 문제가 특히 발생합니다. 워크 플로없이 동일한 스크립트를 실행하면 모든 것이 올바르게 작동합니다. 하지만 스크립트에 params를 언급하고 실행을 예약하는 워크 플로가 필요합니다. – NikhilGoud

답변

1

일부 유형/직렬화 제대로 직렬화 및 PowerShell을 워크 플로우는 객체 직렬화/역 직렬화에 의존하기 때문에 PowerShell을 워크 플로우에 문제가되지 않는다 (즉 PSWF이 체크 포인트 중지 할 수있는 방법, 그리고 resume - 검사 점/일시 중지시 모든 객체를 문자열 형식으로 변환하고 다시 시작할 때 해당 문자열에서 전체 객체로 복원합니다.

Get-AzureRMWebAppSlot의 출력 개체가 올바르게 serialize/deserialize되지 않는 형식 중 하나 인 것으로 나타납니다. 스크린 샷에서 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 
}