Private/ComputerStats/_GetInstalledUpdates.ps1

function _GetInstalledUpdates {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        $Identity
    )

    begin {
        $ScriptBlock = { $Session = New-Object -ComObject 'Microsoft.Update.Session'
            $Searcher = $Session.CreateUpdateSearcher()

            $historyCount = $Searcher.GetTotalHistoryCount()

            $Searcher.QueryHistory(0, $historyCount) | Select-Object Title, Description, Date, @{name = 'Operation'; expression = { switch ($_.operation) {
                        1 {
                            'Installation'
                        }; 2 {
                            'Uninstallation'
                        }; 3 {
                            'Other'
                        }
                    }
                }
            }
        }
    }

    process {
        if (!(Test-Connection -ComputerName $Identity -Count 1 -Quiet)) {
            $MessageSplat = @{
                MessageText  = "Unable to contact $Identity. Please verify its network connectivity and try again."
                MessageIcon  = 'Hand'
                ButtonType   = 'OK'
                MessageTitle = 'Error'
            }
            _ShowMessageBox @MessageSplat
            Break
        }

        if ($Identity -eq $env:COMPUTERNAME) {
            $Output = Invoke-Command -ScriptBlock $ScriptBlock
        }
        else {
            try {
                # TODO use session splat or created session from _NewSession
                $Session = New-PSSession @SessionSplat -ComputerName $Identity -ErrorAction Stop
            }
            catch {
                $MessageSplat = @{
                    MessageText  = "Unable to create session on $Identity. Please verify your access and try again."
                    MessageIcon  = 'Hand'
                    ButtonType   = 'OK'
                    MessageTitle = 'Error'
                }
                _ShowMessageBox @MessageSplat
                Break
            }

            $Output = Invoke-Command -Session $Session -ScriptBlock $ScriptBlock
        }
    }

    end {
        return $Output
    }
}