Public/Get-CTXAPI_VDAUptime.ps1


<#PSScriptInfo
 
.VERSION 1.0.3
 
.GUID bc970a9f-0566-4048-8332-0bceda215135
 
.AUTHOR Pierre Smit
 
.COMPANYNAME iOCO Tech
 
.COPYRIGHT
 
.TAGS Citrix
 
.LICENSEURI
 
.PROJECTURI
 
.ICONURI
 
.EXTERNALMODULEDEPENDENCIES
 
.REQUIREDSCRIPTS
 
.EXTERNALSCRIPTDEPENDENCIES
 
.RELEASENOTES
Created [06/04/2021_11:17] Initital Script Creating
Updated [20/04/2021_10:43] Script Fle Info was updated
Updated [22/04/2021_11:42] Script Fle Info was updated
Updated [05/05/2021_14:33] 'Update Manifest'
 
.PRIVATEDATA
 
#>
 

#Requires -Module ImportExcel
#Requires -Module PSWriteHTML
#Requires -Module PSWriteColor




<#
 
.DESCRIPTION
Uses Registration date to calculate uptime
 
#>
 

Param()

Function Get-CTXAPI_VDAUptime {
    PARAM(
        [Parameter(Mandatory = $true, Position = 0)]
        [ValidateNotNullOrEmpty()]
        [string]$CustomerId,
        [Parameter(Mandatory = $true, Position = 1)]
        [ValidateNotNullOrEmpty()]
        [string]$SiteId,
        [Parameter(Mandatory = $true, Position = 2)]
        [ValidateNotNullOrEmpty()]
        [string]$ApiToken,
        [Parameter(Mandatory = $false, Position = 5)]
        [ValidateSet('Excel', 'HTML')]
        [string]$Export = 'Host',
        [Parameter(Mandatory = $false, Position = 6)]
        [ValidateScript( { (Test-Path $_) })]
        [string]$ReportPath = $env:temp)

try{
    $Complist = @()
    $machines = Get-CTXAPI_Machines -CustomerId $CustomerId -SiteId $SiteId -ApiToken $apitoken 
    
    foreach ($machine in $machines){
        if ($null -eq $machine.LastDeregistrationTime) {$lastBootTime = Get-Date -Format 'M/d/yyyy h:mm:ss tt'}
        else {$lastBootTime = [Datetime]::ParseExact($machine.LastDeregistrationTime, 'M/d/yyyy h:mm:ss tt', $null)}

        $Uptime = (New-TimeSpan -Start $lastBootTime -End (Get-Date))
        $SelectProps =
        'Days',
        'Hours',
        'Minutes',
        @{
            Name       = 'TotalHours'
            Expression = { [math]::Round($Uptime.TotalHours) }
        },
        @{
            Name       = 'OnlineSince'
            Expression = { $LastBootTime }
        },
        @{
            Name       = 'DayOfWeek'
            Expression = { $LastBootTime.DayOfWeek }
        }
        $CompUptime = $Uptime | Select-Object $SelectProps
        $Complist += [PSCustomObject]@{
            DnsName           = $machine.DnsName
            AgentVersion      = $machine.AgentVersion
            MachineCatalog    = $machine.MachineCatalog.Name
            DeliveryGroup     = $machine.DeliveryGroup.Name
            InMaintenanceMode = $machine.InMaintenanceMode
            IPAddress         = $machine.IPAddress
            OSType            = $machine.OSType
            ProvisioningType  = $machine.ProvisioningType
            SummaryState      = $machine.SummaryState
            FaultState        = $machine.FaultState
            Days              = $CompUptime.Days
            TotalHours        = $CompUptime.TotalHours
            OnlineSince       = $CompUptime.OnlineSince
            DayOfWeek         = $CompUptime.DayOfWeek
        }
    }
}catch{Write-Warning "Date calculation failed"}
    if ($Export -eq 'Excel') { $complist | Export-Excel -Path ($ReportPath + '\VDAUptime-' + (Get-Date -Format yyyy.MM.dd-HH.mm) + '.xlsx') -AutoSize -AutoFilter -Show }
    if ($Export -eq 'HTML') { $complist | Out-GridHtml -DisablePaging -Title 'Citrix Uptime' -HideFooter -FixedHeader }
    if ($Export -eq 'Host') { $complist }

} #end Function