pages/cmdevice.ps1

New-UDPage -Url "/cmdevice/:resourceid/:propname" -Endpoint {
    param ($resourceid, $propname = "general")

    $compdata = @(Get-CmwtDbQuery -QueryName "cmdevicename" | Where-Object {$_.ResourceID -eq $resourceid} )
    if ($compdata.Count -gt 0) {
        $compname = [string]$compdata[0].ComputerName
    }
    else {
        $compname = "Unknown"
    }

    New-UDRow {
        New-UDColumn -Endpoint {
            $proplist = @("General","Hardware","Processors","Disks","Networking","Software","Processes","Services","SysEvents","AppEvents","Collections","ClientStatus")
            $bx = 1
            foreach($prop in $proplist) {
                $url = "cmdevice/$resourceid/$prop"
                New-UDButton -Id "b$bx" -Text $prop -OnClick { Invoke-UDRedirect -Url $url } -Flat
                $bx++
            }
        }
    }
    <#
    New-UDRow {
        New-UDInput -Title "" -Id 'form1' -Content {
            [string[]]$proplist = @("General","Hardware","Processors","Disks","Networking","Software","Processes","Services","SysEvents","AppEvents","Collections","ClientStatus")
            $defitem = $propname
            New-UDInputField -Type 'select' -Name 'prop' -Placeholder 'Property Group' -DefaultValue $defitem -Values $proplist
        } -Endpoint {
            param($prop)
            [string]$url = "cmdevice/$resourceid/$prop"
            Invoke-UDRedirect -Url $url
        }
    }
    #>

    New-UDRow {
        switch ($propname) {
            "general" {
                New-UDTable -Title "$compname - General" -Headers @("Property","Value") -Endpoint {
                    $cdata = Get-CmwtDbQuery -QueryName "cmdevice" | Where-Object {$_.ResourceID -eq $resourceid} | Select-Object -First 1
                    $mfr     = $cdata.Manufacturer
                    $model   = $cdata.Model
                    $osname  = $cdata.OSName
                    $adsite  = $cdata.ADSiteName
                    $linkmfr = New-UDElement -Tag "a" -Attributes @{ href="/cmfind/device/mfr/$mfr"} -Content { $mfr }
                    $linkmod = New-UDElement -Tag "a" -Attributes @{ href="/cmfind/device/model/$model"} -Content { $model }
                    $linkos  = New-UDElement -Tag "a" -Attributes @{ href="/cmfind/device/osname/$osname"} -Content { $osname }
                    $linkads = New-UDElement -Tag "a" -Attributes @{ href="/cmfind/device/adsitename/$adsite"} -Content { $adsite }
                    $Data = @(
                        [pscustomobject]@{ property = "Name"; value = [string]$cdata.Name }
                        [pscustomobject]@{ property = "ResourceID"; value = [string]$cdata.ResourceID }
                        [pscustomobject]@{ property = "Manufacturer"; value = $linkmfr }
                        [pscustomobject]@{ property = "Model"; value = $linkmod }
                        [pscustomobject]@{ property = "SerialNumber"; value = [string]$cdata.SerialNumber }
                        [pscustomobject]@{ property = "Client"; value = [string]$cdata.Client }
                        [pscustomobject]@{ property = "ClientVersion"; value = [string]$cdata.ClientVersion }
                        [pscustomobject]@{ property = "ADSiteName"; value = $linkads }
                        [pscustomobject]@{ property = "OSName"; value = $linkos }
                        [pscustomobject]@{ property = "OSBuild"; value = [string]$cdata.OSBuild }
                        [pscustomobject]@{ property = "UserName"; value = [string]$cdata.UserName }
                        [pscustomobject]@{ property = "LastHwScan"; value = [string]$cdata.LastHwScan }
                        [pscustomobject]@{ property = "LastDDR"; value = [string]$cdata.LastDDR }
                        [pscustomobject]@{ property = "LastPolicyReq"; value = [string]$cdata.LastPolicyReq }
                        [pscustomobject]@{ property = "LastMP"; value = [string]$cdata.LastMP }
                        [pscustomobject]@{ property = "IsVM"; value = [string]$cdata.IsVM }
                        [pscustomobject]@{ property = "ChassisType"; value = [string]($cdata.ChassisType -join ' ') }
                        [pscustomobject]@{ property = "LastHealthEval"; value = [string]$cdata.LastHealthEval }
                        [pscustomobject]@{ property = "SystemType"; value = [string]$cdata.SystemType }
                        [pscustomobject]@{ property = "Processors"; value = [string]$cdata.Processors }
                    )
                    $Data | Out-UDTableData -Property @("Property", "Value")
                }
            }
            "hardware" {
                # hardware inventory
                New-UDTable -Title "$compname - Client Status" -Headers @("Property","Value") -Endpoint {
                    $cdata = Get-CmwtDbQuery -QueryText "select Name0 as Name,Manufacturer0 as Manufacturer,Model0 as Model from v_GS_COMPUTER_SYSTEM where resourceid=$resourceid"
                    $Data = @(
                        [pscustomobject]@{ property = "Name"; value = [string]$cdata.Name }
                        [pscustomobject]@{ property = "Manufacturer"; value = [string]$cdata.Manufacturer }
                        [pscustomobject]@{ property = "Model"; value = [string]$cdata.Model }
                    )
                    $Data | Out-UDTableData -Property @("Property","Value")
                }
            }
            "processors" {
                New-UDGrid -Title "$compname - Processors" -Endpoint {
                    $dataset = Get-CmwtDbQuery -QueryName "cmprocessors" |
                        Where-Object {$_.ResourceID -eq $resourceid} |
                            Select-Object Name,Manufacturer,Bits,MaxClock,Cores,LogicalProcs,VMCapable
                    $dataset | Out-UDGridData
                }
            }
            "disks" {
                New-UDGrid -Title "$compname - Logical Disks" -Endpoint {
                    $dataset = Get-CmwtDbQuery -QueryName "cmlogicaldisks" |
                        Where-Object {$_.ResourceID -eq $resourceid} |
                            Select-Object Drive,Label,Description,Size,FreeSpace,Used,FileSystem,SerialNum
                    $dataset | Out-UDGridData
                }
            }
            "software" {
                # software inventory
                New-UDGrid -Title "$compname - Installed Software" -Endpoint {
                    $dataset = Get-CmwtDbQuery -QueryName "cmarpinstalls" |
                        Where-Object {$_.ResourceID -eq $resourceid} |
                            Select-Object ProductName,Publisher,Version,ProductCode,Platform
                    $dataset | Out-UDGridData
                }
            }
            "collections" {
                New-UDGrid -Title "$compname - Collections" -Endpoint {
                    $qcoll = "SELECT DISTINCT
ccm.CollectionID, coll.Name AS CollectionName, coll.Comment
FROM v_ClientCollectionMembers AS ccm INNER JOIN
v_Collection AS coll ON ccm.CollectionID = coll.CollectionID
WHERE (ccm.ResourceID = $resourceid) order by coll.Name"

                    $dataset = @(Get-CmwtDbQuery -QueryText $qcoll | Where-Object {$_.ResourceID -eq $resourceid})
                    $dataset | Out-UDGridData
                }
            }
            "clientstatus" {
                New-UDTable -Title "$compname - Client Status" -Headers @("Property","Value") -Endpoint {
                    $cdata = Get-CmwtDbQuery -QueryName "cmclienthealthsummary" |
                        Where-Object {$_.ResourceID -eq $resourceid} | Select-Object -First 1
                    $lasthw  = "$([string]$cdata.LastHW) ($([int]$cdata.HwInvAge) days ago)"
                    $lastsw  = "$([string]$cdata.LastSW) ($([int]$cdata.SwInvAge) days ago)"
                    $lastddr = "$([string]$cdata.LastDDR) ($((New-TimeSpan -Start $cdata.LastDDR -End $(Get-Date)).Days) days ago)"
                    $laston  = "$([string]$cdata.LastOnline) ($((New-TimeSpan -Start $cdata.LastOnline -End $(Get-Date)).Days) days ago)"
                    $lastpol = "$([string]$cdata.LastPolicyRequest) ($((New-TimeSpan -Start $cdata.LastPolicyRequest -End $(Get-Date)).Days) days ago)"
                    $Data = @(
                        [pscustomobject]@{ property = "Name"; value = [string]$cdata.ComputerName }
                        [pscustomobject]@{ property = "UserName"; value = [string]$cdata.UserName }
                        [pscustomobject]@{ property = "ClientState"; value = [string]$cdata.ClientStateDescription }
                        [pscustomobject]@{ property = "ActiveStatus"; value = [string]$cdata.ClientActiveStatus }
                        [pscustomobject]@{ property = "LastActive"; value = [string]$cdata.LastActiveTime }
                        [pscustomobject]@{ property = "ActiveDDR"; value = [string]$cdata.IsActiveDDR }
                        [pscustomobject]@{ property = "ActiveHW"; value = [string]$cdata.IsActiveHW }
                        [pscustomobject]@{ property = "ActiveSW"; value = [string]$cdata.IsActiveSW }
                        [pscustomobject]@{ property = "ActivePolicy"; value = [string]$cdata.ISActivePolicyRequest }
                        [pscustomobject]@{ property = "ActiveStatus"; value = [string]$cdata.IsActiveStatusMessages }
                        [pscustomobject]@{ property = "LastOnline"; value = $laston }
                        [pscustomobject]@{ property = "LastDDR"; value = $lastddr }
                        [pscustomobject]@{ property = "LastHWInv"; value = $lasthw }
                        [pscustomobject]@{ property = "LastSWInv"; value = $lastsw }
                        [pscustomobject]@{ property = "LastPolicyRequest"; value = $lastpol }
                        [pscustomobject]@{ property = "LastStatusMessage"; value = [string]$cdata.LastStatusMessage }
                        [pscustomobject]@{ property = "LastHealthEval"; value = [string]$cdata.LastHealthEvaluation }
                        [pscustomobject]@{ property = "LastResult"; value = [string]$cdata.LastResult }
                        [pscustomobject]@{ property = "LastEvaluation"; value = [string]$cdata.LastEval }
                        [pscustomobject]@{ property = "RemediationStatus"; value = [string]$cdata.ClientRemediationSuccess }
                        [pscustomobject]@{ property = "ExpectPolicyRequest"; value = [string]$cdata.ExpectedNextPolicyRequest }
                    )
                    $Data | Out-UDTableData -Property ("Property","Value")
                }
            }
            "networking" {
                New-UDGrid -Title "$compname - Network Adapters" -Endpoint {
                    $dataset = @(Get-CmwtDbQuery -QueryName "cmnetadapters" |
                        Where-Object {$_.ResourceID -eq $resourceid} |
                            Select-Object IPAddress,MAC,Mask,Gateway,DHCPEnabled,DNSDomain,DHCPServer)
                    $dataset | Out-UDGridData
                }
            }
            "processes" {
                New-UDGrid -Title "$compname - Processes" -Endpoint {
                    Get-Process -ComputerName $compname |
                        Select-Object ProcessName,Id,Path | Out-UDGridData
                }
            }
            "services" {
                New-UDGrid -Title "$compname - Services" -Endpoint {
                    Get-Service -ComputerName $compname | ForEach-Object {
                        [pscustomobject]@{
                            DisplayName = [string]$_.DisplayName
                            ServiceName = [string]$_.ServiceName
                            StartType   = [string]$_.StartType
                            Status      = [string]$_.Status
                        }
                    } | Out-UDGridData
                }
            }
            "sysevents" {
                New-UDGrid -Title "$compname - System Event Log" -Endpoint {
                    Get-WinEvent -Force -ComputerName $compname -LogName System -MaxEvents 50 -ErrorAction SilentlyContinue |
                        Select-Object TimeCreated,ID,ProviderName,Message | Out-UDGridData
                }
            }
            "appevents" {
                New-UDGrid -Title "$compname - Application Event Log" -Endpoint {
                    Get-WinEvent -Force -ComputerName $compname -LogName Application -MaxEvents 50 -ErrorAction SilentlyContinue |
                        Select-Object TimeCreated,ID,ProviderName,Message | Out-UDGridData
                }
            }
            default {
                New-UDCard -Title "$compname - VOID" -Content {"Invalid Property: $propname"}
            }
        } # switch
    } # row
}