Public/Get-CTXAPI_FailureReport.ps1


<#PSScriptInfo
 
.VERSION 1.2.2
 
.GUID 73cfd5d4-233b-4c97-bfad-0f280a0188dc
 
.AUTHOR Pierre Smit
 
.COMPANYNAME iOCO Tech
 
.COPYRIGHT
 
.TAGS api ctx
 
.LICENSEURI
 
.PROJECTURI
 
.ICONURI
 
.EXTERNALMODULEDEPENDENCIES
 
.REQUIREDSCRIPTS
 
.EXTERNALSCRIPTDEPENDENCIES
 
.RELEASENOTES
Created [06/10/2021_18:14] Initital Script Creating
Updated [06/10/2021_19:01] "Help Files Added"
Updated [07/10/2021_13:28] Script info updated for module
 
.PRIVATEDATA
 
#>




<#
 
.DESCRIPTION
"Reports on connection failures"
 
#>


Param()





#.ExternalHelp CTXCloudApi-help.xml
Function Get-CTXAPI_FailureReport {
<#
.SYNOPSIS
Reports on connection failures in the last x hours
 
.DESCRIPTION
Reports on connection failures in the last x hours
 
.PARAMETER APIHeader
Use Connect-CTXAPI to create headers
 
.PARAMETER MonitorData
Use Get-CTXAPI_MonitorData to create OData
 
.PARAMETER region
You Cloud region
 
.PARAMETER hours
Duration of the report
 
.PARAMETER FailureType
Type of failure to report on
 
.PARAMETER Export
Export format
 
.PARAMETER ReportPath
Export path
 
.EXAMPLE
Get-CTXAPI_FailureReport -MonitorData $MonitorData -FailureType Connection
 
.NOTES
General notes
#>

    [Cmdletbinding(DefaultParameterSetName = 'Fetch odata')]
    [OutputType([System.Object[]])]
    PARAM(
        [Parameter(Mandatory = $true, ParameterSetName = 'Fetch odata')]
        [ValidateNotNullOrEmpty()]
        [PSTypeName('CTXAPIHeaderObject')]$APIHeader,
        [Parameter(Mandatory = $false, ParameterSetName = 'Got odata')]
        [PSTypeName('CTXMonitorData')]$MonitorData,
        [Parameter(Mandatory = $false, ParameterSetName = 'Fetch odata')]
        [ValidateNotNullOrEmpty()]
        [ValidateSet('us', 'eu', 'ap-s')]
        [string]$region,
        [ValidateNotNullOrEmpty()]
        [Parameter(Mandatory = $false, ParameterSetName = 'Fetch odata')]
        [int]$hours = 24,
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [ValidateSet('Connection', 'Machine')]
        [string]$FailureType,
        [Parameter(Mandatory = $false)]
        [ValidateSet('Excel', 'HTML')]
        [string]$Export = 'Host',
        [Parameter(Mandatory = $false)]
        [ValidateScript( { (Test-Path $_) })]
        [string]$ReportPath = $env:temp

    )

    if ($Null -eq $MonitorData) { $mondata = Get-CTXAPI_MonitorData -APIHeader $APIHeader -region $region -hours $hours }
    else { $mondata = $MonitorData }

    $data = @()

    if ($FailureType -eq 'Machine') {
        $machines = Get-CTXAPI_Machines -APIHeader $APIHeader
        foreach ($log in $mondata.MachineFailureLogs) {
            $MonDataMachine = $mondata.Machines | Where-Object { $_.id -eq $log.MachineId }
            $APIMachine = $machines | Where-Object { $_.dnsname -like $MonDataMachine.DnsName }
            $data += [PSCustomObject]@{
                Name                     = $MonDataMachine.DnsName
                IP                       = $MonDataMachine.IPAddress
                OSType                   = $MonDataMachine.OSType
                FailureStartDate         = $log.FailureStartDate
                FailureEndDate           = $log.FailureEndDate
                FaultState               = $log.FaultState
                LastDeregistrationReason = $APIMachine.LastDeregistrationReason
                LastConnectionFailure    = $APIMachine.LastConnectionFailure
                LastErrorReason          = $APIMachine.LastErrorReason
                CurrentFaultState        = $APIMachine.FaultState

            }

        }
    }
    if ($FailureType -eq 'Connection') {
        foreach ($log in $mondata.ConnectionFailureLogs) {
            $session = $mondata.Session | Where-Object { $_.SessionKey -eq $log.SessionKey }
            $user = $mondata.users | Where-Object { $_.id -like $Session.UserId }
            $mashine = $mondata.machines | Where-Object { $_.id -like $Session.MachineId }
            $data += [PSCustomObject]@{
                UserName                   = $user.UserName
                FullName                   = $user.FullName
                DnsName                    = $mashine.DnsName
                IPAddress                  = $mashine.IPAddress
                CurrentRegistrationState   = $RegistrationState.($mashine.CurrentRegistrationState)
                FailureDate                = $log.FailureDate
                ConnectionFailureEnumValue    = $SessionFailureCode.($log.ConnectionFailureEnumValue)
            }
        }
    }



    if ($Export -eq 'Excel') { $data | Export-Excel -Path ($ReportPath + '\Failure_Audit-' + (Get-Date -Format yyyy.MM.dd-HH.mm) + '.xlsx') -AutoSize -AutoFilter -Show }
    if ($Export -eq 'HTML') { $data | Out-HtmlView -DisablePaging -Title 'Citrix Failures' -HideFooter -SearchHighlight -FixedHeader }
    if ($Export -eq 'Host') { $data }

} #end Function