Public/Get-CTXAPI_VDAUptime.ps1


<#PSScriptInfo
 
.VERSION 1.0.1
 
.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
 
.PRIVATEDATA
 
#>
 



<#
 
.DESCRIPTION
Uses Registration date to calculate uptime

#Requires �Modules ImportExcel
 
#>
 

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 = 3)]
        [ValidateNotNull()]
        [ValidateNotNullOrEmpty()]
        [switch]$ExportToExcel = $false,
        [Parameter(Mandatory = $false, Position = 4)]
        [ValidateScript( { (Test-Path $_) })]
        [string]$ReportPath = 'c:\temp\'
    )
    $Complist = @()
    Get-CTXAPI_Machines -CustomerId $CustomerId -SiteId $SiteId -ApiToken $apitoken | ForEach-Object {
        $lastBootTime = [Datetime]::ParseExact($_.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           = $_.DnsName
            AgentVersion      = $_.AgentVersion
            MachineCatalog    = $_.MachineCatalog.Name
            DeliveryGroup     = $_.DeliveryGroup.Name
            InMaintenanceMode = $_.InMaintenanceMode
            IPAddress         = $_.IPAddress
            OSType            = $_.OSType
            ProvisioningType  = $_.ProvisioningType
            SummaryState      = $_.SummaryState
            FaultState        = $_.FaultState
            Days              = $CompUptime.Days
            TotalHours        = $CompUptime.TotalHours
            OnlineSince       = $CompUptime.OnlineSince
            DayOfWeek         = $CompUptime.DayOfWeek
        }
    }
    if ($ExportToExcel -eq $true) {
        [string]$ExcelReportname = $ReportPath + '\VDAUptime-' + (Get-Date -Format yyyy.MM.dd-HH.mm) + '.xlsx'
        $complist | Export-Excel -Path $ExcelReportname -WorksheetName machines -AutoSize -AutoFilter
    } else { $Complist }

} #end Function