PowerShell Script to Close Tickets Using a Certain Date

Below is a sample PowerShell script to close tickets using a certain date:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

#Max number of advistories to pull

$global:QueryLimit = 20

function QueryData ($URL, $Header)

{

    # Get First Page of results (20 items)

    $result = @()

    $results = @()

    try

    {

        $result = Invoke-RestMethod ($URL) -Method Get -Headers $Header

        $results = $result.results

        if ($result.results)

        {

            $results = $result.results

        }

        else

        {

            $results = $result

        }

    }

    catch

    {

        Write-host ("Error QueryData1 " + $URL + " " +  $_.Exception.Message + " " + $_.Exception.ItemName) -ForegroundColor Red

    }

    #Get the next pages of results, if any

    while (![string]::IsNullOrWhiteSpace($result.next))

    {

        try

        {

            $result = Invoke-RestMethod $result.next -Method Get -Headers $Header

            $results += $result.results

            if ($results.count -gt $global:QueryLimit)

            {

                break;

            }

        }

        catch

        {

            Write-host ("Error QueryData2 " + $URL + $result.next + " " +  $_.Exception.Message + " " + $_.Exception.ItemName) -ForegroundColor Red

            return $results

        }

    }

    return $results

}

function PostData ($URL, $Header, $Body)

{

    try

    {

        $result = Invoke-RestMethod $URL -Method Post -Headers $Header -Body $Body

    }

    catch

    {

        Write-host ("Error PostData " + $URL + " " +  $_.Exception.Message + " " + $_.Exception.ItemName) -ForegroundColor Red

    }

}

function ChangeTicketStatuses ($URL, $Header)

{

    $Collection = QueryData $URL $Header

    foreach ($Ticket in $Collection)

    {

        [datetime] $TicketDate = $Ticket.created

        [datetime] $CompareDate = Get-Date "9/13/2017 12:00 AM"

        if ($TicketDate -lt $CompareDate)

        {

            Write-Host "Changing status of Ticket" $Ticket.id "to 3" -ForegroundColor Red

            $Ticket

            

            # Change Status to 3 (Closed)

            $Body = '{"priority":null,"queue":null,"assigned_to":null,"comment":null,"ticket":[' + $Ticket.id + '],"status":3}'

            PostData ("https://api.app.flexerasoftware.com/api/tickets/edit/") $WebServiceHeader $Body

        }

        else

        {

            Write-Host "Leaving Ticket" $Ticket.id "Alone" $Ticket.created -ForegroundColor Green

        }

    }

    

}

$WebServiceHeader = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"

$WebServiceHeader.Add("Content-Type", 'application/json')

$WebServiceHeader.Add("Authorization", "Token YOURTOKENHERE" )

ChangeTicketStatuses  "https://api.app.flexerasoftware.com/api/tickets/" $WebServiceHeader