SimpleAzureDevOps.psm1

$BaseUrl = $null
$Base64Auth = $null
$ApiVersion = "6.0"
$Headers = $null

function Connect-AzureDevOps
{
    [CmdletBinding()]
    param
    (
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string] $ServerURL,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string] $EmailAddress,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string] $PAT

    )

    $Script:BaseUrl = "https://vsrm.$($ServerURL)"
    $Script:Base64Auth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $EmailAddress, $PAT)))

    $Script:Headers = @{
        Authorization = "Basic {0}" -f $Base64Auth
    }

    return @{ "BaseUrl" = $BaseUrl ; "Base64Auth" = $Base64Auth }
}

function Get-AzureDevOpsReleaseStatus
{
    [CmdletBinding()]
    param
    (
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string] $ProjectName,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string] $ReleaseID
    )

    return Invoke-API -Param "$($ProjectName)/_apis/Release/releases/$($ReleaseID)" -Method GET
}

<#
function Get-AzureDevOpsDeploymentGroup
{
    [CmdletBinding()]
    param
    (
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string] $ProjectName,
 
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string] $ID
    )
 
    return Invoke-API -Param "$($ProjectName)/_apis/" -Method GET
}
#>


function New-AzureDevOpsRelease
{
    [CmdletBinding()]
    param
    (
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string] $ProjectName,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string] $DefinitionID
    )

    $body = @{
        definitionId = $DefinitionID
    }

    return Invoke-API -Param "$($ProjectName)/_apis/Release/releases" -Method POST -Body $body
}

function Set-APIVersion
{
    [CmdletBinding()]
    param
    (
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string] $Version
    )

    $Script:ApiVersion = $Version
}



function Invoke-API
{
    [CmdletBinding(DefaultParameterSetName = "Getters")]
    param
    (
        [Parameter(Mandatory=$true, ParameterSetName = "Getters")]
        [Parameter(Mandatory=$true, ParameterSetName = "Others")]
        [ValidateNotNullOrEmpty()]
        [string] $Param,

        [Parameter(Mandatory=$true, ParameterSetName = "Others")]
        [ValidateNotNullOrEmpty()]
        $Body,

        [Parameter(Mandatory=$true, ParameterSetName = "Getters")]
        [Parameter(Mandatory=$true, ParameterSetName = "Others")]
        [ValidateSet("GET", "POST", "PUT")]
        [string] $Method
    )

    $requestUri = $Script:BaseUrl + $Param

    $restMethodParam = @{
        Uri     = "$($requestUri)?api-version=$($ApiVersion)"
        Headers = $Script:Headers
        Method  = $Method
        ContentType = "application/json"
    }

    if ($Method -notmatch "GET") { $restMethodParam["Body"] = ($Body | ConvertTo-Json) }

    $response = Invoke-RestMethod @restMethodParam
    return $response
}