Netz-Weise Logo

Weisheiten - der Netz-Weise Blog

Hier finden Sie Tipps und Tricks für vor, während und nach der Schulung.
3 Minuten Lesezeit (612 Worte)

Details von GPO-Backups anzeigen mit Powershell

Wenn Sie ein Gruppenrichtlinienbackup erstellen, wird für jede GPO ein eigener Sicherungsordner angelegt. Der Sicherungsordner trägt allerdings nicht den Namen der GPO, sondern es wird für jede Sicherung eine eigene GUID erstellt.

Wenn Sie die Sicherung in der Domäne wiederherstellen möchten, in der Sie die Sicherung angelegt haben, ist das nicht problematisch, da die GPMC Ihnen über "Manage Backups" auf den Container "Group Policy Objects" die Details Ihrer Backups anzeigt. Wenn Sie die Backups allerdings auf eine andere Domäne übertragen wollen, fehlen Ihnen diese Informationen. Vor allem bei umfangreichen Backups hilft dann nur eine gute Dokumenation oder die folgenden beiden Funktionen, die einen Backup-Ordner einlesen und die relevanten Informationen auslesen können.

ConvertFrom-GPVersion konvertiert die 32-Bit Versionsnummern der Computer- bzw. Benutzerkonfiguration in einen dezimalen Versionswert. Sie wird von Get-GPOBackupInfoFromXML verwendet, um die korrekte Version der User-bzw. Computerkonfiguration zu berechnen. Beide Funktionen sind auch Bestandteil des aktuellen GPHelper-Powershellmoduls

function ConvertFrom-GPVersion

{

  <#

      .SYNOPSIS

      Converts the Group Policy Version-Number into a Computer-/User Version Number

      .EXAMPLE

      ConvertFrom-GPVersion -VersionNumber 65537

      converts the 32-Bit Represenation of the Version-Number into a 16-Bit Value

      .NOTES

      Group-Policys Version-Number for Computer- and Userversion are represented in one 32-Bit Value. This Function converts

      the number back into a 16-Bit Value.

  #>

 

  [CmdletBinding()]

  param(

    [Parameter(Mandatory=$true)]

    [ValidateRange(0,4294967295)]

    [int]$VersionNumber

  )

 

  [regex]$regex = '(\d{16})?'

 

  If ( $VersionNumber -lt [int]65536 )

  {

    $VersionBinary = ([convert]::ToString($VersionNumber,2)).padleft(16,'0')

    Write-Verbose -Message $VersionBinary

    [convert]::ToUInt64($VersionBinary,2)

  }

  Else

  {

    $VersionBinary = ([convert]::ToString($VersionNumber,2)).padleft(32,'0')

    Write-Verbose -Message $VersionBinary

    $Versions =$regex.Matches($VersionBinary) | Select-Object -ExpandProperty Value -skip 1 -First 1

    [convert]::ToUInt64($Versions,2)

  }

}

function Get-GPOBackupInfoFromXml {

  <#

      .SYNOPSIS

      Gets the relevant Information about GPO-Backups from a Powershell Backup Directory

      .DESCRIPTION

      If you want to find out which backups are in a dedicated Group Policy Backup Folder

      and when they are 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(

    [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-GPVersion -VersionNumber ( $backupinfo.GroupPolicyBackupScheme.GroupPolicyObject.GroupPolicyCoreSettings.UserVersionNumber.InnerText.ToString())

        MachineVersion = ConvertFrom-GPVersion -VersionNumber ( $backupinfo.GroupPolicyBackupScheme.GroupPolicyObject.GroupPolicyCoreSettings.MachineVersionNumber.InnerText.ToString())

        Comment = $comment

      }

      $GPO = New-Object -TypeName PSCustomObject -Property $GPOProperties

      $GPO

    }

  }

ODBC Datenquellen einrichten - 32 Bit, 64 Bit oder...
Die Existenz einer OU testen mit Powershell

Ähnliche Beiträge

 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Bereits registriert? Hier einloggen
Montag, 20. Mai 2024

Sicherheitscode (Captcha)