Public/Add-RadarrMovie.ps1

function Add-RadarrMovie
{
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true, ParameterSetName = 'IMDB')]
        [ValidatePattern('^(tt)?\d{5,9}$')]
        [String]$IMDBID,

        [Parameter(Mandatory = $true, ParameterSetName = 'TMDB')]
        [ValidatePattern('^\d{1,9}$')]
        [String]$TMDBID,

        [Parameter(Mandatory = $false)]
        [Switch]$Search
    )

    ####################################################################################################
    #Region Import configuration
    try
    {
        Import-Configuration -ErrorAction Stop
    }
    catch
    {
        throw $_
    }
    #EndRegion


    ####################################################################################################
    #Region Check if already in Radarr before attempting an addition
    Write-Verbose -Message "Checking if the movie already exists"
    try
    {
        if($IMDBID)
        {
            $Movie = Get-RadarrMovie -IMDBID $IMDBID -ErrorAction Stop
        }
        elseif($TMDBID)
        {
            $Movie = Get-RadarrMovie -TMDBID $TMDBID -ErrorAction Stop
        }

        if($Movie)
        {
            Write-Warning "Movie already exists in Radarr!"
            return
        }
    }
    catch
    {
        throw $_
    }
    #EndRegion


    ####################################################################################################
    #Region Search TMDB for the movie
    Write-Verbose -Message "Using Radarr lookup service to find the movie on TMDB"
    try
    {
        if($TMDBID)
        {
            $Movie = Search-RadarrMovie -TMDBID $TMDBID
        }
        elseif($IMDBID)
        {
            $Movie = Search-RadarrMovie -IMDBID $IMDBID
        }
    }
    catch
    {
        throw $_
    }
    #EndRegion


    ####################################################################################################
    # Append what we need to add to Radarr for monitoring:
    $Movie | Add-Member -MemberType NoteProperty -Name 'qualityProfileId' -Value 9 -Force
    $Movie | Add-Member -MemberType NoteProperty -Name 'profileId' -Value 9 -Force
    $Movie | Add-Member -MemberType NoteProperty -Name 'monitored' -Value $True -Force
    $Movie | Add-Member -MemberType NoteProperty -Name 'rootFolderPath' -Value $Config.RootFolderPath -Force
    #$Movie = $Movie | Select-Object * -ExcludeProperty alternateTitles,originalTitle
    #$MovieRefined = $Movie | Select-Object title,originalTitle,alternateTitles,sortTitle,overview,inCinemas,physicalRelease,images,website,year,hasFile,youTubeTrailerId,studio,rootFolderPath,qualityProfileId,profileId,monitored,minimumAvailability,isAvailable,folderName,runtime,cleanTitle,imdbId,tmdbId,titleSlug,certification,genres,tags,added,ratings,collection,status
    if($Search)
    {
        $Movie | Add-Member -MemberType NoteProperty -Name 'addOptions' -Value $([PSCustomObject]@{ searchForMovie = $true }) -Force
    }


    ####################################################################################################
    #Region Define the path, parameters, headers and URI
    try
    {
        $Data = $Movie | ConvertTo-Json -Depth 5
        $DataEncoded = ([System.Text.Encoding]::UTF8.GetBytes($Data))

        $Headers = Get-Headers
        $Path = '/movie'
        $Uri = Get-APIUri -RestEndpoint $Path
    }
    catch
    {
        throw $_
    }
    #EndRegion


    ####################################################################################################
    #Region make the main request
    Write-Verbose "Adding: $Uri"
    try
    {
        Invoke-RestMethod -Uri $Uri -Headers $Headers -Method Post -ContentType "application/json" -Body $DataEncoded -ErrorAction Stop
    }
    catch
    {
        throw $_
    }
    #EndRegion
}