Functions/workflow-run-service/Invoke-vROWorkflow.psm1
function Invoke-vROWorkflow { <# .SYNOPSIS Invoke a vRO Workflow .DESCRIPTION Invoke a vRO Workflow .PARAMETER ID vRO Workflow ID .PARAMETER ItemHref vRO ItemHref .PARAMETER ParameterName Supply a single parameter to the workflow .PARAMETER ParameterValue Supply the value of the single parameter .PARAMETER ParameterType Supply the type of the single parameter .PARAMETER Parameters Supply workflow parameters via JSON or New-vROParameterDefinition .PARAMETER NoParameters Required when using ItemHref and supplying no parameters .INPUTS System.String System.Switch .OUTPUTS System.Management.Automation.PSObject. .EXAMPLE Invoke-vROWorkflow -ID c0278910-9ae2-46c5-bb45-2292fe88e3ab .EXAMPLE Invoke-vROWorkflow -ItemHref https://vRO01.vrademo.local:8281/vco/api/workflows/c0278910-9ae2-46c5-bb45-2292fe88e3ab/ .EXAMPLE Invoke-vROWorkflow -ID c0278910-9ae2-46c5-bb45-2292fe88e3ab -ParameterName 'text' -ParameterValue 'Apple' -ParameterType 'String' .EXAMPLE $Parameters = @" {"parameters": [ { "value": {"string":{ "value": "Apple"}}, "type": "string", "name": "a", "scope": "local" }, { "value": {"number":{ "value": 20}}, "type": "number", "name": "b", "scope": "local" } ] } "@ Invoke-vROWorkflow -ID c0278910-9ae2-46c5-bb45-2292fe88e3ab -Parameters ($Parameters | ConvertFrom-Json).parameters .EXAMPLE $Param1 = New-vROParameterDefinition -Name a -Value Apple -Type String -Scope LOCAL Invoke-vROWorkflow -Id c0278910-9ae2-46c5-bb45-2292fe88e3ab -Parameters $Param1 .EXAMPLE Get-vROWorkflow -Name 'Test-Workflow' | Invoke-vROWorkflow -ParameterName a -ParameterValue 'Nature' -ParameterType String .EXAMPLE Get-vROWorkflow -Name 'Test-Workflow' | Select ItemHref | Invoke-vROWorkflow -ParameterName a -ParameterValue 'Junior' -ParameterType String #> [CmdletBinding(DefaultParametersetName="A")][OutputType('System.Management.Automation.PSObject')] Param ( [parameter(Mandatory=$true,ValueFromPipelinebyPropertyName=$true,ParameterSetName="A")] [parameter(Mandatory=$true,ParameterSetName="B")] [ValidateNotNullOrEmpty()] [String]$ID, [parameter(Mandatory=$true,ValueFromPipelinebyPropertyName=$true,ParameterSetName="C")] [parameter(Mandatory=$true,ValueFromPipelinebyPropertyName=$true,ParameterSetName="D")] [parameter(Mandatory=$true,ValueFromPipelinebyPropertyName=$true,ParameterSetName="E")] [ValidateNotNullOrEmpty()] [String]$ItemHref, [parameter(Mandatory=$false,ParameterSetName="A")] [parameter(ParameterSetName="C")] [ValidateNotNullOrEmpty()] [String]$ParameterName, [parameter(Mandatory=$false,ParameterSetName="A")] [parameter(ParameterSetName="C")] [String]$ParameterValue, [parameter(Mandatory=$false,ParameterSetName="A")] [parameter(ParameterSetName="C")] [ValidateNotNullOrEmpty()] [String]$ParameterType, [parameter(Mandatory=$false,ParameterSetName="B")] [parameter(ParameterSetName="D")] [ValidateNotNullOrEmpty()] [PSCustomObject[]]$Parameters, [parameter(Mandatory=$false,ParameterSetName="E")] [ValidateNotNullOrEmpty()] [Switch]$NoParameters ) try { if ($PSBoundParameters.ContainsKey('ParameterType')){ $ParameterType = $ParameterType.ToLower() $Body = @" {"parameters": [ { "value": {"$($ParameterType)":{ "value": "$($ParameterValue)"}}, "type": "$($ParameterType)", "name": "$($ParameterName)", "scope": "local" } ] } "@ } elseif ($PSBoundParameters.ContainsKey('Parameters')){ $Object = [PSCustomObject]@{ parameters = @() } foreach ($Parameter in $Parameters) { $Object.parameters += $Parameter } $Body = $Object | ConvertTo-Json -Depth 100 } else { $Body = @" {"parameters": [ ] } "@ } if ($PSBoundParameters.ContainsKey('ItemHref')){ $URI = ("$($ItemHref)executions/" -split "8281")[1] } else { $URI = "/vco/api/workflows/$($ID)/executions/" } $InvokeRequest = Invoke-vRORestMethod -Method POST -URI $URI -Body $Body -WebRequest -Verbose:$VerbosePreference [pscustomobject]@{ StatusCode = $InvokeRequest.StatusCode StatusDescription = $InvokeRequest.StatusDescription Execution = $InvokeRequest.Headers.Location } } catch [Exception]{ throw } } |