Public/Get-MSPBackupSessionErrorList.ps1

Function Get-MSPBackupSessionErrorList {
    <#
        .Synopsis
            Get session errors of MSP Backup
        .Description
            Get session errors of MSP Backup. This function is a wrapper around the clienttool.exe file used to manage MSP Backups.
            It shows the session error list of a given backup type.
        .Parameter DataSource
            Datasource to show errors for. Possible values are BareMetalRestore, Exchange, FileSystem, MySql,
            NetworkShares, Oracle, SystemState, VMware, VirtualDisasterRecovery, VssHyperV, VssMsSql or VssSharePoint.
        .Parameter Limit
            Maximum number of items to return, default is 1
        .Example
            Get-MSPBackupSessionErrorList -DataSource FileSystem
 
            This will show any errors of the last FileSystem backup-session
        .Link
            about_functions_advanced
        .Link
            about_CommonParameters
    #>

    [CmdletBinding()]
    Param(
        [Parameter(
            Mandatory = $True,
            HelpMessage = "Valid options are: 'BareMetalRestore', 'Exchange', 'FileSystem', 'MySql', 'NetworkShares', 'Oracle', 'SystemState', 'VMware', 'VirtualDisasterRecovery', 'VssHyperV', 'VssMsSql', 'VssSharePoint'"
        )]
        [ValidateSet('BareMetalRestore', 'Exchange', 'FileSystem', 'MySql', 'NetworkShares', 'Oracle', 'SystemState', 'VMware', 'VirtualDisasterRecovery', 'VssHyperV', 'VssMsSql', 'VssSharePoint')]
        [String]$DataSource,
        [Parameter()]
        [Int]$Limit = 1
    )
    Begin {
        If (-not $PSBoundParameters.ContainsKey('Verbose')) {
            $VerbosePreference = $PSCmdlet.SessionState.PSVariable.GetValue('VerbosePreference')
        }
        If (-not $PSBoundParameters.ContainsKey('ErrorAction')) {
            $ErrorActionPreference = $PSCmdlet.SessionState.PSVariable.GetValue('ErrorActionPreference')
        }

        Write-Verbose ('{0}:: Function started' -f $MyInvocation.MyCommand)
        Write-Verbose ('{0}:: ErrorAction={1} ErrorActionPreference={2}' -f $MyInvocation.MyCommand, $ErrorAction, $ErrorActionPreference)

        $stdOutTempFile = [System.IO.Path]::GetTempFileName()
        $stdErrTempFile = [System.IO.Path]::GetTempFileName()
    }
    Process {
        Write-Verbose ('{0}:: Collecting session errors for {1}' -f $MyInvocation.MyCommand, $DataSource)
        Foreach ($Source in $DataSource) {
            $SessionErrorList = & $Script:CmdPath -machine-readable control.session.error.list -limit $Limit -no-header -delimiter ';' -datasource $DataSource
            If ($null -ne $SessionErrorList) {
                $SessionErrorList = $SessionErrorList.Split(";")
                Write-Verbose ('{0}:: Generating session data for {1}' -f $MyInvocation.MyCommand, $DataSource)
                [array]$Hash += $(New-CustomPSObject "DateTime", "Path", "Content" "$($SessionErrorList[0])", "$($SessionErrorList[1])", "$($SessionErrorList[2])")
            } Else {
                Write-Verbose ('{0}:: No session data found for {1}' -f $MyInvocation.MyCommand, $DataSource)
                $Hash = $null
            }
        }
    }
    End {
        Write-Output $hash
        Write-Verbose ('{0}:: Function ended' -f $MyInvocation.MyCommand)
    }
}