2017-02-13 2 views
0

Ich versuche, den folgenden Befehl in einem PowerShell-Workflow-Runbook auszuführen. Ich erhalte den Fehler "Kann nicht in ein NULL-Array indexieren.", Was nicht der Fall ist, da das gleiche Skript, das auf meinem lokalen Computer einwandfrei ausgeführt wurde, nicht im Azure-Portal als PowerShell-Arbeitsablauf-Runbook ausgeführt wird.Azure Powershell Runbook - Get-AzureRMWebAppSlot SiteConfig.ConnectionStrings [0] Fehler beim Indexieren in ein Null-Array

Kann jemand bitte in das schauen?

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

enter image description here

+0

können Sie bestätigen, dass "$ webapp" tatsächlich Daten enthält und nicht "$ null" ist? – 4c74356b41

+0

Ja, ich habe die Frage aktualisiert, um das zu berücksichtigen. @ 4c74356b41 – NikhilGoud

+0

Bitte beachten Sie, dass ich dieses Problem speziell während der Ausführung dieses Skripts als Workflow bekomme. Wenn ich das gleiche Skript ohne einen Workflow ausführe, funktioniert alles gut. Aber ich brauche einen Workflow, um Parameter für das Skript zu nennen und die Ausführung zu planen. – NikhilGoud

Antwort

1

Einige Arten nicht serialisiert/deserialisiert korrekt und in Powershell-Workflow, das ist ein Problem, weil Powershell-Workflow auf der Serialisierung/Deserialisierung Objekt setzt (das ist, wie PSWF der Lage ist, einen Checkpoint, zu suspendieren, und resume - Es konvertiert alle Objekte in eine Zeichenfolgenform, wenn es markiert/ausgesetzt wird, und stellt bei der Fortsetzung wieder vollständige Objekte aus diesen Zeichenfolgen wieder her.

Es würde erscheinen Get-AzureRMWebAppSlot 's Ausgabeobjekt ist einer dieser Typen, die nicht korrekt serialisiert/deserialisiert. Von Ihrem Screenshot kann ich sehen, dass die SiteConfig Eigenschaft von $webApp eine Zeichenfolge ist, die Microsoft.Azure.Management.WebSites.Model.SiteConfig statt eines Objekts enthält, wie Sie erwarten. Offensichtlich wird das Objekt nicht korrekt in seine ursprüngliche Form deserialisiert, wobei SiteConfig ein komplexes Objekt ist.

Die Möglichkeit, dies zu umgehen, besteht darin, nur mit dem Objekt im PowerShell-Skriptkontext statt mit dem Workflowkontext zu interagieren. Zum Beispiel:

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 
} 
Verwandte Themen