Functions/function-Test-BackupObject.ps1

function Test-BackupObject 
{
  <#
  .SYNOPSIS
    Check an Object is of type BackupOpbject
  .DESCRIPTION
         Check an Object is of type BackupOpbject. returns $true if it is, $false if not
  .EXAMPLE
  Test-BackupObject -BackupObject $BackupObject
  .Example
  $BackupObject | Test-BackupObject
  .Example
  Test-BackupObject $BackupObject
  .PARAMETER BackupObject
    object to test
  #>

    [CmdletBinding()]
  param
  (
    [Parameter(Mandatory=$True,
    ValueFromPipeline=$True,
    ValueFromPipelineByPropertyName=$True)]
    [object]$backupObject
  )
  Write-Verbose "Test-BackupObject - Entering"

  $properties = (
        'filename',
        'LastLSN',
        'BackupType',
        'StartDate',
        'FinishDate',
        'DatabaseName',
        'SQLVersion',
        'TotalSize',
        'Files',
        'RelocateFile',
        'Position'
  )
  if ($backupObject.gettype().name -ne "PSCustomObject"){
    Write-Verbose "Test-BackupObject - Wrong type of object, false"
    return $false
  }

  if ((($backupObject | Get-Member).count) -ne ($properties.count + 4)){
    Write-Verbose "Test-BackupObject - Wrong number of properties, false"
    return $false
  }
  $counter = 0  
  foreach ($property in $properties){
    if ($backupObject.$property -eq ''){
        $counter++
    }
  }
  if (($backupobject | Get-Member).count -ne $properties.count+4){
    Write-Verbose "Test-BackupObject - Not all properties matched, false"
    return $false
  }
  Write-Verbose "Test-BackupObject - Leaving"
  return $true
}