Public/Start-AppVeyorProjectBuild.ps1

Function Start-AppVeyorProjectBuild {

    [CmdletBinding()]
    [OutputType(
        [AppVeyorBuild]
    )]

    Param (
        [Parameter(
            Mandatory = $true,
            ValueFromPipelineByPropertyName = $true
        )]
        [String]
        $AccountName,

        [Parameter(
            Mandatory = $true,
            ValueFromPipelineByPropertyName = $true
        )]
        [Alias(
            'Slug'
        )]
        [String]
        $ProjectName,

        [Parameter(
            Mandatory = $true,
            ParameterSetName = 'LatestBuild',
            ValueFromPipelineByPropertyName = $true
        )]
        [Parameter(
            Mandatory = $true,
            ParameterSetName = 'CommitId',
            ValueFromPipelineByPropertyName = $true
        )]
        [String]
        $Branch,

        [Parameter(
            ParameterSetName = 'LatestBuild'
        )]
        [HashTable]
        $EnvironmentVariable = $null,

        [Parameter(
            ParameterSetName = 'CommitId'
        )]
        [String]
        $CommitId,

        [Parameter(
            ParameterSetName = 'GitHubPullRequest'
        )]
        [Int]
        $GitHubPullRequestId
    )

    Process {
        $body = @{
            'accountName' = $AccountName
            'projectSlug' = $ProjectName 
        }

        switch ($PSCmdlet.ParameterSetName) {
            'LatestBuild' {
                $body.Add('branch', $Branch)

                if (-null -ne $EnvironmentVariable) {
                    $body.Add('environmentVariables', $EnvironmentVariable)
                }
            }

            'CommitId' {
                $body.Add('branch', $Branch)
                $body.Add('commitId', $CommitId)
            }

            'GitHubPullRequest' {
                $body.Add('pullRequestId', $GitHubPullRequestId)
            }
        }

        [AppVeyorBuild]::new(
            (Invoke-AppVeyorApi -Method 'POST' -RestMethod 'builds' -Body (ConvertTo-Json -InputObject $body))
        )
    }
}