Functions/Find-ePoDetectedSystem.ps1

Function Find-ePoDetectedSystem 
{
    <#
        .SYNOPSIS
            Finds a system using the ePo API.
         
        .DESCRIPTION
            Sends the command specified to the McAfee EPO server. Connect-ePoServer has to be run first,
            as this function uses the epoServer global variable created by that functions connection to the server. Uses the Invoke-ePoCommand
         
        .PARAMETER Filter
            The search string to use for finding the detected system. This can be the DNS Name, Domain, NetBIOS information, User or IPv4 or IPv6 address.
            Defaults to a space which returns all of the detected systems.
             
        .EXAMPLE
            $CurrentPC = Find-ePoDetectedSystem -Filter $env:computername
            $CurrentPC
         
            Retruns the output of the system.find API command with a search paramter for the current computer.
             
        .EXAMPLE
            $FoundSystems = Find-ePoDetectedSystem -Filter "Mark"
             
            Returns an object of the results of the system.find search for systems with Mark as their user.
 
        .EXAMPLE
            $DomainFoundDetectedSystems = Find-ePoDetectedSystem -Filter "contonoso.com"
            $DomainFoundDetectedSystems
 
            Finds all of the detectedsystems with contonoso.com as their domain.
             
        .EXAMPLE
            Find-ePoDetectedSystem -Verbose
 
            Finds all of the detecedsystems.
 
        .NOTES
            Added support for Whatif
    #>

    [CmdletBinding(SupportsShouldProcess=$true)]
    param
    (
        [Parameter(Mandatory=$False,
        ValueFromPipeline=$True, ValueFromPipelinebyPropertyName=$true)]
        [string]$Filter = " "
    )
    Begin
    {
        If(!($epoServer))
        {
            Write-Warning "Connection to ePoServer not found. Please run Connect-ePoServer first."
            break
        }  
    }
    Process 
    {
        $results = Invoke-ePoCommand -Command "detectedsystem.find" -Parameters "searchText=$($Filter)"
        If($PSCmdlet.ShouldProcess("$Filter","Creating output object for detectedsystem.find command results found using filter"))
        {         
            $FoundSystems = @()
            ForEach($Computer in $results.result.list.row)
            {
                $props = @{ComputerName = ($Computer | Select -ExpandProperty RSDDetectedSystems.NetbiosName)
                        HostID = ($Computer | Select -ExpandProperty RSDDetectedSystems.HostID)
                        AgentGUID = ($Computer | Select -ExpandProperty RSDDetectedSystems.AgentGUID)
                        AgentVersion = ($Computer | Select -ExpandProperty RSDDetectedSystems.AgentVersion)
                        Comments = ($Computer | Select -ExpandProperty RSDDetectedSystems.Comments)
                        DetectedSourceName = ($Computer | Select -ExpandProperty RSDDetectedSystems.DetectedSourceName)
                        DeviceType = ($Computer | Select -ExpandProperty RSDDetectedSystems.DeviceType)
                        DNSName = ($Computer | Select -ExpandProperty RSDDetectedSystems.DnsName)
                        Domain = ($Computer | Select -ExpandProperty RSDDetectedSystems.Domain)
                        Exception = ($Computer | Select -ExpandProperty RSDDetectedSystems.Exception)
                        ExceptionCategory = ($Computer | Select -ExpandProperty RSDDetectedSystems.ExceptionCategory)
                        FriendlyComputerName = ($Computer | Select -ExpandProperty RSDDetectedSystems.FriendlyName)
                        Ignored = ($Computer | Select -ExpandProperty RSDDetectedSystems.Ignored)
                        Inactive = ($Computer | Select -ExpandProperty RSDDetectedSystems.Inactive)
                        IPv6 = ($Computer | Select -ExpandProperty RSDDetectedSystems.IPV6)
                        LastAgentCommunication = (Get-Date ($Computer | Select -ExpandProperty RSDDetectedSystems.LastAgentCommunication))
                        LastDetectedTime =  (Get-Date ($Computer | Select -ExpandProperty RSDDetectedSystems.LastDetectedTime))
                        LastReportingSensor = ($Computer | Select -ExpandProperty RSDDetectedSystems.LastReportingSensor)
                        MACAddress = ($Computer | Select -ExpandProperty RSDDetectedSystems.MAC)
                        Managed = ($Computer | Select -ExpandProperty RSDDetectedSystems.Managed)
                        Description = ($Computer | Select -ExpandProperty RSDDetectedSystems.NetbiosComment)
                        NewDetection = ($Computer | Select -ExpandProperty RSDDetectedSystems.NewDetection)
                        OrganizationName = ($Computer | Select -ExpandProperty RSDDetectedSystems.OrgName)
                        OSFamily = ($Computer | Select -ExpandProperty RSDDetectedSystems.OSFamily)
                        OS = ($Computer | Select -ExpandProperty RSDDetectedSystems.OSPlatform)
                        OSVersion = ($Computer | Select -ExpandProperty RSDDetectedSystems.OSVersion)
                        Rogue = ($Computer | Select -ExpandProperty RSDDetectedSystems.Rogue)
                        RogueAction = ($Computer | Select -ExpandProperty RSDDetectedSystems.RogueAction)
                        RogueState = ($Computer | Select -ExpandProperty RSDDetectedSystems.RogueState)
                        ServerName = ($Computer | Select -ExpandProperty RSDDetectedSystems.ServerName)
                        Users = ($Computer | Select -ExpandProperty RSDDetectedSystems.Users)

                 
                }
                $FoundSystems += New-Object -TypeName PSObject -Property $props
            }
            $FoundSystems
        }
    }
    End{}
}