Functions/BuildResult/Get-BambooResult.ps1

<#
.SYNOPSIS
    Gets build results for all or for a single Bamboo Plan.
.DESCRIPTION
    If -PlanKey is specified it filters for only those build results.
    By default it returns the latest build results.
.PARAMETER BuildKey
    Optional - Key for the exact Bamboo build to get the build results
.PARAMETER PlanKey
    Optional - Key for the Bamboo Plans to filter build results
.PARAMETER Build
    Optional - Parameter to specify the build in question, by default it
    always returns the latest build and the valid values are:
        LATEST - to return the latest build info
        ALL - to return all build results
        BUILD-Number - to return an exact build result by its id
.EXAMPLE
    Get-BambooResult

    key state lifeCycleState buildStartedTime buildCompletedDate
    --- ----- -------------- ---------------- ------------------
    PSB-BB-23 Successful Finished 2015-10-07T00:30:09.800+13:00 2015-10-07T00:30:13.344+13:00
    TPRJ-TPLN-11 Successful Finished 2015-10-07T00:30:13.598+13:00 2015-10-07T00:30:15.426+13:00

.EXAMPLE
    Get-BambooResult -BuildKey PSB-BB-22

    key state lifeCycleState buildStartedTime buildCompletedDate
    --- ----- -------------- ---------------- ------------------
    PSB-BB-22 Successful Finished 2015-10-07T00:26:17.977+13:00 2015-10-07T00:26:20.480+13:00

.EXAMPLE
    Get-BambooResult -PlanKey PSB-BB -All

    key state lifeCycleState buildStartedTime buildCompletedDate
    --- ----- -------------- ---------------- ------------------
    PSB-BB-23 Successful Finished 2015-10-07T00:30:09.800+13:00 2015-10-07T00:30:13.344+13:00
    PSB-BB-22 Successful Finished 2015-10-07T00:26:17.977+13:00 2015-10-07T00:26:20.480+13:00
    PSB-BB-21 Successful Finished 2015-10-07T00:24:39.928+13:00 2015-10-07T00:24:41.778+13:00
#>

function Get-BambooResult {
    [CmdletBinding(DefaultParameterSetName="ListAll")]
    param(
        [Parameter(ParameterSetName="ByBuildKey")]
        [ValidatePattern('\w+-\w+-\d+')]
        [string]$BuildKey,

        [Parameter(ParameterSetName="ByPlanKey")]
        [Parameter(ParameterSetName="ListExact")]
        [Parameter(ParameterSetName="ListLatest")]
        [Parameter(ParameterSetName="ListAll")]
        [ValidatePattern('\w+-\w+')]
        [string]$PlanKey,

        [Parameter(ParameterSetName="ListExact")]
        [ValidatePattern('\d+|latest|all')]
        [string]$Build='latest',

        [Parameter(ParameterSetName="ListLatest")]
        [switch]$Latest,

        [Parameter(ParameterSetName="ListAll")]
        [switch]$All
    )

    $resource = 'result'

    # List results by PlanKey
    if ($PlanKey) {
        if ($All) { $Build = 'all' }
        if ($Latest) { $Build = 'latest' }

        $resource = "result/$PlanKey"
        if ($Build -and $Build -ne 'all') {
            $resource="$($resource)-$Build"
        }
    }

    # Get exact BuildKey
    if ($BuildKey) {
        $resource = "result/$BuildKey"
    }

    Invoke-BambooRestMethod -Resource $resource  -Expand 'results.result' |
    Expand-BambooResource -ResourceName 'result' |
    Add_ObjectType -TypeName 'PsBamboo.Build'
}