Public/Get-CbDeviceExport.ps1

<#
    .SYNOPSIS
    Exports CSV of devices matching search.
    Official Carbon Black documentation: https://developer.carbonblack.com/reference/carbon-black-cloud/platform/latest/devices-api/#export-devices-csv
     
    .PARAMETER Search
    Device value search query string
     
    .PARAMETER SortField
    Field to sort results on. Must be used in conjunction with -SortOrder parameter
   
    .PARAMETER SortOrder
    Specifies ascending or descending order for sorting
   
    .PARAMETER DeploymentType
    The device's deployment type, a classification that is determined by its lifecycle management policy
 
    .PARAMETER TargetPriority
    Device target priorities to match
 
    .PARAMETER PolicyID
    Carbon Black Cloud Policy ID to match
 
    .PARAMETER ADGroupID
    Search criteria for AD group ID
 
    .PARAMETER Status
    Device statuses to match
    
    .EXAMPLE
    Get-CbDeviceExport -Status "ACTIVE" -FilePath "C:\Example\Path\export.csv"
#>


function Get-CbDeviceExport {
    param (

        [ValidateSet("target_priority", "policy_name", "name", "last_contact_time", "av_pack_version", "login_user_name", "os_version", "sensor_version", "vm_name", "esx_host_name", "cluster_name", "vm_ip", "vulnerability_severity", "vulnerability_score")]
        [string]$SortField,

        [ValidateSet("ASC", "DESC")]
        [string]$SortOrder,

        [ValidateSet("ENDPOINT", "WORKLOAD")]
        [string]$DeploymentType,

        [ValidateSet("LOW", "MEDIUM", "HIGH", "MISSION_CRITICAL")]
        [string]$TargetPriority,

        [string]$Search,

        [int]$PolicyID,

        [int]$ADGroupID,

        [Parameter(Mandatory=$true)]
        [ValidateSet("PENDING", "REGISTERED", "UNINSTALLED", "DEREGISTERED", "ACTIVE", "INACTIVE", "ERROR", "ALL", "BYPASS_ON", "BYPASS", "QUARANTINE", "SENSOR_OUTOFDATE", "DELETED", "LIVE")]
        [string]$Status,

        [Parameter(Mandatory=$true)]
        [string]$FilePath

    )

    $queryString = "?status=$Status"

    if ($SortField) {$queryString += "?sort_field=$SortField"}
    if ($SortOrder) {$queryString += "?sort_order=$SortOrder"}
    if ($DeploymentType) {$queryString += "?deployment_type=$DeploymentType"}
    if ($TargetPriority) {$queryString += "?target_priority=$TargetPriority"}
    if ($Search) {$queryString += "?query_string=$Search"}
    if ($PolicyID) {$queryString += "?policy_id=$PolicyID"}
    if ($ADGroupID) {$queryString += "?ad_group_id=$ADGroupID"}

    $Parameters = @{
        UriPreOrgKey  = "/appservices/v6/orgs/"
        UriPostOrgKey = "/devices/_search/download$($queryString)"
        Method     = "Get"
    }

    $result = Invoke-CbMethod @Parameters

    $result | Out-File -FilePath $FilePath
}