Public/Providers.ps1

function New-TMProvider {
    <#
    .SYNOPSIS
        Creates a Provider in TransitionManager.
 
    .DESCRIPTION
        Creates a Provider either from a Provider name or from a prebuilt
        Provider object.
 
    .PARAMETER TMSession
        A TMSession object or session name to use for the request. Defaults to
        `'Default'`.
 
    .PARAMETER Name
        The Provider name to create when using the `ByName` parameter set.
 
    .PARAMETER Provider
        The Provider object to create when using the `ByObject` parameter set.
 
    .PARAMETER PassThru
        Switch indicating that the created Provider should be returned.
 
    .EXAMPLE
        New-TMProvider -Name 'ServiceNow' -PassThru
 
        Creates a Provider named `ServiceNow` and returns it.
 
    .EXAMPLE
        $Provider = [pscustomobject]@{ name = 'CMDB' }
        New-TMProvider -Provider $Provider -PassThru
 
        Creates a Provider from a prepared object and returns it.
 
    .NOTES
        Choose the parameter set that matches whether you already have a Provider
        object prepared.
    #>

    [CmdletBinding(DefaultParameterSetName = 'ByName')]
    [OutputType([TMProvider[]])]
    param(
        [Parameter(Mandatory = $false)]
        [psobject] $TMSession = 'Default',
        [Parameter(
            Mandatory = $true,
            ParameterSetName = 'ByName',
            Position = 0)]
        [string] $Name,
        [Parameter(Mandatory = $true,
            ParameterSetName = 'ByObject',
            Position = 0)]
        [psobject] $Provider,
        [Parameter(Mandatory = $false)]
        [switch] $PassThru
    )

    $TMSession = Get-TMSession $TMSession

    if ($PSCmdlet.ParameterSetName -eq 'ByName') {
        $Provider = [TMProvider]::new($Name)
    }

    $ProviderCheck = Get-TMProvider -Name $Provider.name
    if ($ProviderCheck) {
        Write-Verbose 'The Provider already exists'
        return $PassThru.IsPresent ? $ProviderCheck : $null
    }

    $bodyParams = @{
        name        = $Provider.name
        description = $Provider.description
        comment     = $Provider.comment
        project     = $TMSession.UserContext.Project.Id
    }

    $Response = Invoke-TMRestMethod -Api provider -Method Post -BodyParams $bodyParams
    if ($PassThru.IsPresent) {
        return ,[TMProvider]::new($Response)
    }
}


function Get-TMProvider {
    <#
    .SYNOPSIS
        Gets Providers from TransitionManager.
 
    .DESCRIPTION
        Retrieves Provider records from TM and optionally filters them by name.
 
    .PARAMETER TMSession
        A TMSession object or session name to use for the request. Defaults to
        `'Default'`.
 
    .PARAMETER Name
        The Provider name to retrieve.
 
    .PARAMETER ResetIDs
        Switch indicating that identifiers on the returned objects should be
        refreshed or normalized during retrieval.
 
    .EXAMPLE
        Get-TMProvider -Name 'ServiceNow'
 
        Retrieves the Provider named `ServiceNow`.
 
    .NOTES
        This function resolves the session by calling `Get-TMSession`.
    #>

    [OutputType([TMProvider[]])]
    param(
        [Parameter(Mandatory = $false)][PSObject]$TMSession = 'Default',
        [Parameter(Mandatory = $false)][String]$Name,
        [Parameter(Mandatory = $false)][Switch]$ResetIDs
    )

    $TMSession = Get-TMSession $TMSession

    $Response = Invoke-TMRestMethod -Api provider -Method Get
    [TMProvider[]]$Providers = @($Response | ForEach-Object { [TMProvider]::new($_) } | Sort-Object -Property 'Name')

    if ($ResetIDs) {
        foreach ($Provider in $Providers) {
            $Provider.Id = $null
        }
    }

    if ($Name) {
        return ,@($Providers | Where-Object { $_.Name -eq $Name })
    } else {
        return ,$Providers
    }

}