Azure Runbook(工作流)将结果输出到Table

时间:2018-02-21 12:00:39

标签: powershell azure azure-logic-apps azure-runbook

我正在重新创建Azure Runbook以配合Logic App功能。简而言之,我希望Logic App启动Runbook,从Runbook中获取结果并将它们用于Logic App的后续步骤。

最初我想获取启动一些虚拟机的JSON输出,我最终输出如下:

{
    "MyVM2":  true
}

{
    "MyVM1":  true
}

然后我要解析要在Runbook中使用的JSON,但很快意识到我不会有一个包含数量的结果(可能是2个VM,或者20个)我发现Parse JSON模式只能解析什么我将模式设置为(2,在我的情况下,所以更多的东西会被遗漏)。

现在我想我可以将输出放到一个表中,然后使用它来允许Logic App查看该表内部以获取我的VM名称和成功结果。所以,这是我一直在毁坏的Runbook:

workflow ShutDownStartByTagasdf
{
        Param(
        [Parameter(Mandatory=$true)]
        [String]
        $TagName,
        [Parameter(Mandatory=$true)]
        [String]
        $TagValue,
        [Parameter(Mandatory=$true)]
        [Boolean]
        $Shutdown
        )

    $connectionName = "AzureRunAsConnection";

    try
    {
        # Get the connection "AzureRunAsConnection "
        $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName        

        # Logging in to Azure
        $null = Add-AzureRmAccount `
            -ServicePrincipal `
            -TenantId $servicePrincipalConnection.TenantId `
            -ApplicationId $servicePrincipalConnection.ApplicationId `
            -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint
    }
    catch {

        if (!$servicePrincipalConnection)
        {
            $ErrorMessage = "Connection $connectionName not found."
            throw $ErrorMessage
        } else{
            Write-Error -Message $_.Exception
            throw $_.Exception
        }
    }


    $vms = Find-AzureRmResource -TagName $TagName -TagValue $TagValue | where {$_.ResourceType -like "Microsoft.Compute/virtualMachines"}

    Foreach -Parallel ($vm in $vms){
        if($Shutdown){
            $StopRtn = Stop-AzureRmVm -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName -Force;
            $objOut = [PSCustomObject]@{
                VM = $vm.Name
                Success = $StartRtn.IsSuccessStatusCode
            }
        }
        else {
            $StartRtn = Start-AzureRmVm -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName;
            $objOut = New-Object psobject -Property @{
                VM = $vm.Name
                Success = $StartRtn.IsSuccessStatusCode
                }
        }
        $outPut = InlineScript {
            $Using:objOut | Format-Table Vm,Success
        }
    }
}

忽略$objOut = [PSCustomObject]@{部分,这只是我JSON的历史记录,我现在暂时离开它,因为我没有使用$Shutdwon = $True,只有$False,这是else {

之后的最后一部分

这一点:

else {
    $StartRtn = Start-AzureRmVm -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName;
    $objOut = New-Object psobject -Property @{
        VM = $vm.Name
        Success = $StartRtn.IsSuccessStatusCode
        }
}
$outPut = InlineScript {
    $Using:objOut | Format-Table Vm,Success
}

}

我试图按照这里已经描述的内容实现某些内容:Create Table with Variables in PowerShell

但Azure Runbook控制台没有输出,但它确实启动了虚拟机。

一个非常冗长的解释,但有没有人知道如何输出到工作流程(Runbook)中的格式化表格,这将在一个表格中产生我的所有结果?

1 个答案:

答案 0 :(得分:0)

我最终使用数组来捕获信息:

import calendar
a=calendar.weekday(year,month,day)
days=["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"]
print(days[a])

最后一位workflow ShutDownStartByTagasdf { Param( [Parameter(Mandatory=$true)] [String] $TagName, [Parameter(Mandatory=$true)] [String] $TagValue, [Parameter(Mandatory=$true)] [Boolean] $Shutdown ) $connectionName = "AzureRunAsConnection"; try { # Get the connection "AzureRunAsConnection " $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName # "Logging in to Azure..." $null = Add-AzureRmAccount ` -ServicePrincipal ` -TenantId $servicePrincipalConnection.TenantId ` -ApplicationId $servicePrincipalConnection.ApplicationId ` -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint } catch { if (!$servicePrincipalConnection) { $ErrorMessage = "Connection $connectionName not found." throw $ErrorMessage } else{ Write-Error -Message $_.Exception throw $_.Exception } } $result_array = @() $vms = Find-AzureRmResource -TagName $TagName -TagValue $TagValue | where {$_.ResourceType -like "Microsoft.Compute/virtualMachines"} Foreach -Parallel ($vm in $vms) { if($Shutdown){ # Write-Output "Stopping $($vm.Name)"; $StopRtn = Stop-AzureRmVm -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName -Force; $objOut = New-Object -TypeName psobject -Property @{ VM = $vm.Name Success = $StopRtn.IsSuccessStatusCode } } else { # Write-Output "Starting $($vm.Name)"; $StartRtn = Start-AzureRmVm -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName; $objOut = New-Object -TypeName psobject -Property @{ VM = $vm.Name Success = $StartRtn.IsSuccessStatusCode } } $workflow:result_array += $objOut } $result_array | ConvertTo-Json } 让我得到了更好的输出,我希望在Logic App中使用。输出:

$result_array | ConvertTo-Json

我不喜欢它是一系列对象,现在我要弄清楚如何在Logic App中围绕它[ { "VM": "MyVM2", "Success": true, "PSComputerName": "localhost", "PSShowComputerName": true, "PSSourceJobInstanceId": "dadd87ad-1de1-432c-92b1-4c501c9a7ce8" }, { "VM": "MyVM1", "Success": true, "PSComputerName": "localhost", "PSShowComputerName": true, "PSSourceJobInstanceId": "dadd87ad-1de1-432c-92b1-4c501c9a7ce8" } ] 更好地利用它。