Scripts/ProtectionJob/New-CohesityGenericProtectionJob.ps1

function New-CohesityGenericProtectionJob {
    <#
        .SYNOPSIS
        Create a new protection job.
        .DESCRIPTION
        The New-CohesityGenericProtectionJob function is used to create a protection job.
        .NOTES
        Published by Cohesity
        .LINK
        https://cohesity.github.io/cohesity-powershell-module/#/README
        .EXAMPLE
        New-CohesityGenericProtectionJob -ProtectionJobObject $protectionJobObject
        Create a protection job by explicitly constructing the protection job object,
        Construct the object as follows,
        $protectionJobObject = [Cohesity.Model.ProtectionJob]::new()
        $protectionJobObject.Name = "job-rds4"
        $protectionJobObject.Environment = [Cohesity.Model.ProtectionJob+EnvironmentEnum]::KRDSSnapshotManager
        $protectionJobObject.PolicyId = "6572875819740094:1631076508923:3"
        $protectionJobObject.viewBoxId = 4
        $protectionJobObject.parentSourceId = 731
        $sourceIds = New-Object Collections.Generic.List[long]
        $sourceIds.Add(4791)
        $protectionJobObject.sourceIds = $sourceIds
        $protectionJobObject.startTime = [Cohesity.Model.TimeOfDay]::new(13,52)
        $protectionJobObject.timezone = "America/Los_Angeles"
 
        .EXAMPLE
        For reference, another example available in link below.
        eg; https://www.postman.com/cohesity/workspace/cohesity/request/14330502-4ebd5a6e-a772-4d7e-a23b-2dd335670d0e
    #>

    [CmdletBinding(SupportsShouldProcess = $True, ConfirmImpact = "High")]
    Param(
        [Parameter(Mandatory = $true)]
        # Specifies the object for the protection job.
        [Cohesity.Model.ProtectionJob]$ProtectionJobObject
    )

    Begin {
        $session = CohesityUserProfile
        $server = $session.ClusterUri
        $token = $session.Accesstoken.Accesstoken
    }

    Process {
        if (-not $ProtectionJobObject.Environment) {
            Write-Output "Please specify the environment."
            return
        }
        if ($PSCmdlet.ShouldProcess("Generic Protection Job")) {

            $environment = $ProtectionJobObject.environment.ToString()
            $environment = "k" + $environment.Substring(1, $environment.Length - 1)
            # ConvertTo-Json of environment to string gives the enum number, therefore converting back to PSCustomObject
            $pJobJson = $ProtectionJobObject | ConvertTo-Json -Depth 100
            $pJobObject = $pJobJson | ConvertFrom-Json
            $pJobObject.environment = $environment

            $url = $server + '/irisservices/api/v1/public/protectionJobs'
            $headers = @{'Authorization' = 'Bearer ' + $token }
            $payloadJson = $pJobObject | ConvertTo-Json -Depth 100
            $resp = Invoke-RestApi -Method Post -Uri $url -Headers $headers -Body $payloadJson
            if (201 -eq $Global:CohesityAPIStatus.StatusCode) {
                Start-CohesityProtectionJob -Id $resp.Id | Out-Null
                $resp
            }
            else {
                Write-Output "Protection job : Failed to create job"
                Write-Output $Global:CohesityAPIError
            }
        }
    }
    End {
    }
}