Functions/Start-ePoClientTask.ps1

Function Start-ePoClientTask 
{
    <#
        .SYNOPSIS
            Starts the specified client task on specified target system.
         
        .DESCRIPTION
            Starts the specified client task on specified target system. Requires the productId and taskId of the clienttask to run. Uses the
            clienttask.run api command.
         
        .PARAMETER ComputerName
            The name of the computer to start the client task on.
 
        .PARAMETER TaskId
            The id number of the client task to run.
 
        .PARAMETER ProductId
            The Product ID of the product to run with that task.
         
        .EXAMPLE
            Start-ePoClientTask -ComputerName "THATPC" -ProductId "VIRUSCAN8800" -TaskId "111"
             
            Starts a client task for a Full Scan - Normal priority on the computer named "THATPC"
             
        .EXAMPLE
            Get-ePoClientTask -Filter "Full scan - Normal Priority" | Start-ePoClientTask -ComputerName "THATPC"
         
            First uses the Get-ePoClientTask function to find the correct client task and then pipes the TaskId and ProductId to
            the Start-ePoClientTask function.
             
        .NOTES
            Added support for -Whatif
            TODO: Implement script wrapping this to start a virus scan on client as soon as Malware alert is triggered.
             
    #>

    [CmdletBinding(SupportsShouldProcess=$true)]
    param
    (
        [Parameter(Mandatory=$True,
        ValueFromPipeline=$True, ValueFromPipelinebyPropertyName=$true)]
        [string]$ComputerName,
        [Parameter(Mandatory=$True,
        ValueFromPipelinebyPropertyName=$true)]
        $TaskId,
        [Parameter(Mandatory=$True,
        ValueFromPipelinebyPropertyName=$true)]
        $ProductId
            
    )
    Begin
    {
        If(!($epoServer))
        {
            Write-Warning "Connection to ePoServer not found. Please run Connect-ePoServer first."
            break
        }     
    }
    Process 
    {
        Write-Verbose "Sending command clienttask.run to ePo API with parameters names=$($ComputerName)&productId=$($ProductId)&taskId=$($TaskId)"
        $results = Invoke-ePoCommand -Command "clienttask.run" -Parameters "names=$($ComputerName)&productId=$($ProductId)&taskId=$($TaskId)"
        $props = @{ResultStatus=$results.result
                    ComputerName=$ComputerName
                    }
        If($PSCmdlet.ShouldProcess("$ComputerName","Outputting run result object"))
        {        
            New-Object -TypeName psobject -Property $props
        }
    }
    End{}
}