Public/Cloud/Invoke-BitbucketCloudPipeline.ps1

Function Invoke-BitbucketCloudPipeline {
    param(
        [Parameter(Mandatory=$false)] $Session = (Get-BitbucketSession),
        [Parameter(Mandatory=$false)] [String] $Workspace = $Session.Workspace,
        [Parameter(Mandatory=$true)] [String] $Repository,
        [Parameter(Mandatory=$false)] [String] $Pipeline,
        [Parameter(Mandatory=$false)] [String] $Commit,
        [Parameter(Mandatory=$false)] [String] 
            [ValidateSet ('custom','pull-request','branch')] $Trigger='branch',
        [Parameter(Mandatory=$false)] [String] $Branch = "master",
        [Parameter(Mandatory=$false)] [HashTable] $Arguments = @{}
        )

    $payload = [PSCustomObject]@{
        target = @{
            type="pipeline_ref_target"
            ref_type="branch"
            ref_name=$Branch
            selector=@{}
            commit=@{}
        }
        variables=($Arguments.Keys |% {
            @{ 
                key=$_; 
                value=$Arguments[$_]
                secured=$false
            }
        })
    }
    if ($Commit){
       $payload.target.commit=@{
            hash="$Commit"
            type="commit"
        }
    }

    if($Trigger -in ('custom','pull-request')){
        $payload.target.selector=@{
            type=$Trigger.ToLower()
            pattern=$Pipeline
        }
    }

    if($VerbosePreference){
        Write-Host "Trigger: $Trigger"
        $payload |ConvertTo-Json
    }
    
    return ($payload |ConvertTo-Json| Invoke-RestMethod `
        -Method POST `
        -Uri "$($Session.Server)/$($Session.Version)/repositories/${Workspace}/${Repository}/pipelines/" `
        -Headers @{ Authorization = $Session.Authorization} `
        -ContentType "application/json")
}