Private/Get-CTX_VDAUptime.ps1


<#PSScriptInfo
 
.VERSION 1.0.1
 
.GUID 9134ee8e-5ab7-4162-a33a-d95fc24069f9
 
.AUTHOR Pierre Smit
 
.COMPANYNAME iOCO Tech
 
.COPYRIGHT
 
.TAGS Citrix
 
.LICENSEURI
 
.PROJECTURI
 
.ICONURI
 
.EXTERNALMODULEDEPENDENCIES
 
.REQUIREDSCRIPTS
 
.EXTERNALSCRIPTDEPENDENCIES
 
.RELEASENOTES
Created [06/04/2021_08:05] Initital Script Creating
Updated [06/04/2021_09:03] Script Fle Info was updated
 
#>
 



<#
 
.DESCRIPTION
Get vda uptime. Needs to be run from inside the client network
 
#Requires Modules ImportExcel
#>
 


Param()


Function Get-CTX_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 {
        try {
            $OSInfo = Get-CimInstance Win32_OperatingSystem -ComputerName $_.IPAddress
            $LastBootTime = $OSInfo.LastBootUpTime
            $Uptime = (New-TimeSpan -Start $lastBootTime -End (Get-Date))
            $SelectProps =
            'Days',
            'Hours',
            'Minutes',
            @{
                Name       = 'TotalHours'
                Expression = { [math]::Round($Uptime.TotalHours) }
            },
            @{
                Name       = 'LastBootTime'
                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
                LastBootTime      = $CompUptime.LastBootTime
                DayOfWeek         = $CompUptime.DayOfWeek
            }
        } catch {
            Write-Error "Unable to connect to $_.IPAddress"
        }
    }
    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