Get-GPOBackupInfoFromXml.ps1

function Get-GPOBackupInfoFromXml {
  <#
      .SYNOPSIS
      Gets Information about GPO-Backups from a GPO Backup Directory.
 
      .DESCRIPTION
      If you want to find out which backups are in a dedicated Group Policy Backup Folder
      and when they were taken, this functions returns all the relevant Information.
 
      .EXAMPLE
      Get-GPOBackupInfoFromXml -backuppath c:\gpobackup
      Parses all backup.xml-files in the directory and returns Infomation about the Backups.
  #>


  [CmdletBinding()]
  param(
    # The Path cotaining the GPO-Backups
    [parameter(mandatory=$true,
               position=0,
               ValueFromPipelineByPropertyName=$true)]
    [ValidateScript({ Test-path -Path $_ -PathType Container })]
    [Alias('Fullname')]
    [string]$backuppath
  )

  process {  $backupfiles = get-childitem -Path $backuppath\backup.xml -Recurse

    Foreach ( $BackupFileItem in $backupfiles )
    {  
      [xml]$backupinfo = get-content -Path $BackupFileItem.Fullname -ReadCount 0 -Encoding UTF8
      $comment = Get-Content -Path ( join-path -Path $BackupFileItem.Directory.FullName -ChildPath 'DomainSysvol\gpo\GPO.cmt' ) -ErrorAction SilentlyContinue -Encoding Unicode
      $gpoProperties = [ordered]@{
        BackupTime = ( get-date -Date $BackupFileItem.CreationTime -Format g )
        name = $backupinfo.GroupPolicyBackupScheme.GroupPolicyObject.GroupPolicyCoreSettings.DisplayName.InnerText
        GPOGUID = $backupinfo.GroupPolicyBackupScheme.GroupPolicyObject.GroupPolicyCoreSettings.ID.InnerText
        BackupGUID = $BackupFileItem.Directory.Name
        Options = $backupinfo.GroupPolicyBackupScheme.GroupPolicyObject.GroupPolicyCoreSettings.Options.InnerText
        UserVersion = (ConvertFrom-GphGpVersion -VersionNumber ( $backupinfo.GroupPolicyBackupScheme.GroupPolicyObject.GroupPolicyCoreSettings.UserVersionNumber.InnerText.ToString())).UserVersion
        MachineVersion = (ConvertFrom-GphGpVersion -VersionNumber ( $backupinfo.GroupPolicyBackupScheme.GroupPolicyObject.GroupPolicyCoreSettings.MachineVersionNumber.InnerText.ToString())).ComputerVersion
        Comment = $comment
      }
      $GPO = New-Object -TypeName PSCustomObject -Property $GPOProperties
      $GPO
    }
  } 
}