Novell trustee_database.xml in Excel konvertieren

Mit diesem Powershell können Sie die Trustee XML des Microfocus Novell Enterprise Servers in eine lesbare Form in eine Excel Datei konvertieren. Die Tiefe der expliziten Berechtigungen wird in der ersten Spalte ausgegeben. Sie soll helfen die Struktur besser zu verstehen.

Wir möchten darauf hinweisen, wenn Sie in Begriff sind, Ihren Microfocus/Novell Filer in die Microsoft Welt zu überführen, dass unbedingt einige Besonderheiten der Windows Welt berücksichtigt werden müssen.

Das Novell Microfocus Filesystem hat gegenüber dem Windows System einen entscheiden Vorteil. Es musste sich nur um die Rechte auf dem Berechtigungsendpunkt gekümmert werden. Das Filesystem hat selbständig nach dem Least-Privilege-Prinzip dafür gesorgt, dass der User zu diesem Verzeichnis browsen konnte. Dies ist unter Microsoft wesentlich umständlicher. Wenn man sauber Rechte setzen will, dann müssen auf dem kompletten Weg bis zu Berechtigungsendpunkt explizite Rechte für das Listing aufgebaut werden. Dies erzeugt ein Vielzahl von neuen notwendigen Gruppen und können schnell zu Problem werden.

Stark betroffen ist deswegen der Token-Count und der Token-Size Wert für die Kerberosanmeldung unter Windows.

Wir empfehlen deswegen

  1. Gehen Sie vor der Migration auf die Suche nach obsoleten Daten. Diese brauchen vermutlich gar nicht mehr übernommen werden. Vielleicht können sie gelöscht werden oder werden für den Notfall separiert.
  2. das Alter der Daten in der Migration zu berücksichtigen
    Es braucht keine expliziten Berechtigungen mehr auf Verzeichnissen, die ausschließlich alte Daten enthalten. Setzen Sie ein Tool wie migRaven ein, um die Berechtigungen und das Alter zu Analysieren und dann zu entscheiden.
    https://www.migraven.com/loesungen/analyse-daten/
  3. Jetzt können Sie die Struktur überdenken. Es lohnt sich die alten, gewachsenen Strukturen in Frage zu stellen. Wahrscheinlich können sie flacher aufgebaut werden. Das werden ihnen vor allem Ihren Kollegen danken, wenn sie kürzere Wege zu den Daten zurücklegen müssen. Das spart Zeit.

Falls Sie Unterstützung während der Migration brauchen, können wir Sie gern unterstützen. Es ist unser täglich Brot. Wir begleiten Migrationsprojekte rund um den Globus.

# Der Pfad zum übergeordneten Verzeichnis, in dem die XML-Dateien gespeichert sind
$strParentPath = Split-Path -Parent $MyInvocation.MyCommand.Definition
$directoryName = Split-Path -Leaf $strParentPath
$currentDate = Get-Date -Format "yyyy-MM-dd"
# Erstelle den Ausgabedateinamen mit Datum und Verzeichnisname
$excelFileName = "$currentDate-$directoryName-Trustees.xlsx"
$excelPath = Join-Path -Path $strParentPath -ChildPath $excelFileName

# Starten von Excel
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$workbook = $excel.Workbooks.Add()

foreach ($file in Get-ChildItem $strParentPath -Filter "*.xml") {
    # Lesen der Datei mit expliziter UTF-8-Codierung
    $fileContent = Get-Content -Path $file.FullName -Encoding UTF8 -Raw
    $doc = [xml]$fileContent

    $sheetName = "$directoryName-$($file.BaseName)"
    # Begrenze die Länge des Blattnamens auf 31 Zeichen
    if ($sheetName.Length -gt 31) {
        $sheetName = $sheetName.Substring(0, 31)
    }
    $sheet = $workbook.Worksheets.Add()
    $sheet.Name = $sheetName

    # Kopfzeile hinzufügen
    $sheet.Cells.Item(1, 1).Value2 = "Tiefe"
    $sheet.Cells.Item(1, 2).Value2 = "Pfad"
    $sheet.Cells.Item(1, 3).Value2 = "Trustee Name"
    $sheet.Cells.Item(1, 4).Value2 = "Trustee ID"
    $sheet.Cells.Item(1, 5).Value2 = "Rechte"
    $row = 2

    foreach ($fileElement in $doc.metadata.trusteeInfo.file) {
        $path = $fileElement.path.'#cdata-section'
        $strPath = [string]$path
        $strPath = $strPath -replace "/", "\"
        $arrFields = $strPath.Split('\', [System.StringSplitOptions]::RemoveEmptyEntries)
        $strCount = $arrFields.Count - 1

        foreach ($trustee in $fileElement.trustee) {
            $name = $trustee.name.'#cdata-section'
            $id = $trustee.id
            $rights = $trustee.rights.value

            # Daten in das Arbeitsblatt eintragen
            $sheet.Cells.Item($row, 1).Value2 = "$strCount"
            $sheet.Cells.Item($row, 2).Value2 = $path
            $sheet.Cells.Item($row, 3).Value2 = $name
            $sheet.Cells.Item($row, 4).Value2 = $id
            $sheet.Cells.Item($row, 5).Value2 = $rights

            $row++
        }
        # Falls kein Trustee vorhanden ist, nur Tiefe und Pfad eintragen
        if ($fileElement.trustee -eq $null -or $fileElement.trustee.Count -eq 0) {
            $sheet.Cells.Item($row, 1).Value2 = "$strCount"
            $sheet.Cells.Item($row, 2).Value2 = $path
            $row++
        }
    }
}

# Speichern und Schließen
$workbook.SaveAs($excelPath)
$excel.Quit()

# Aufräumen
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
Remove-Variable excel

Write-Host "Excel-Datei wurde erstellt: $excelPath"


#Variante 2
# in dieser Version werden alle Ergebnisse aus allen Trustee Dateien in einer Excel in einem Blatt zusammengefasst.
# Das gibt noch mal eine bessere Option für die Auswertung der Daten.

# Der Pfad zum übergeordneten Verzeichnis, in dem die XML-Dateien gespeichert sind
$strParentPath = Split-Path -Parent $MyInvocation.MyCommand.Definition
$directoryName = Split-Path -Leaf $strParentPath
$currentDate = Get-Date -Format "yyyy-MM-dd"
# Erstelle den Ausgabedateinamen mit Datum und Verzeichnisname
$excelFileName = "$currentDate-$directoryName-Trustees.xlsx"
$excelPath = Join-Path -Path $strParentPath -ChildPath $excelFileName

# Starten von Excel
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$workbook = $excel.Workbooks.Add()
$sheet = $workbook.Worksheets.Add()
$sheet.Name = "Alle Trustee-Informationen"

# Kopfzeile hinzufügen
$sheet.Cells.Item(1, 1).Value2 = "Tiefe"
$sheet.Cells.Item(1, 2).Value2 = "Pfad"
$sheet.Cells.Item(1, 3).Value2 = "Trustee Name"
$sheet.Cells.Item(1, 4).Value2 = "Trustee ID"
$sheet.Cells.Item(1, 5).Value2 = "Rechte"
$sheet.Cells.Item(1, 6).Value2 = "Server"
$sheet.Cells.Item(1, 7).Value2 = "Volume"
$row = 2

foreach ($file in Get-ChildItem $strParentPath -Filter "*.xml" -Recurse) {
    $fileContent = Get-Content -Path $file.FullName -Encoding UTF8 -Raw
    $doc = [xml]$fileContent
    $serverName = Split-Path -Leaf (Split-Path -Parent $file.FullName)

    foreach ($fileElement in $doc.metadata.trusteeInfo.file) {
        $path = $fileElement.path.'#cdata-section'
        $strPath = [string]$path
        $strPath = $strPath -replace "/", "\"
        $arrFields = $strPath.Split('\', [System.StringSplitOptions]::RemoveEmptyEntries)
        $strCount = $arrFields.Count - 1

        foreach ($trustee in $fileElement.trustee) {
            $name = $trustee.name.'#cdata-section'
            $id = $trustee.id
            $rights = $trustee.rights.value

            # Daten in das Arbeitsblatt eintragen
            $sheet.Cells.Item($row, 1).Value2 = "$strCount"
            $sheet.Cells.Item($row, 2).Value2 = $path
            $sheet.Cells.Item($row, 3).Value2 = $name
            $sheet.Cells.Item($row, 4).Value2 = $id
            $sheet.Cells.Item($row, 5).Value2 = $rights
            $sheet.Cells.Item($row, 6).Value2 = $serverName
            $sheet.Cells.Item($row, 7).Value2 = $file.Name

            $row++
        }
        # Falls kein Trustee vorhanden ist, nur Tiefe und Pfad eintragen
        if ($fileElement.trustee -eq $null -or $fileElement.trustee.Count -eq 0) {
            $sheet.Cells.Item($row, 1).Value2 = "$strCount"
            $sheet.Cells.Item($row, 2).Value2 = $path
            $sheet.Cells.Item($row, 6).Value2 = $serverName
            $sheet.Cells.Item($row, 7).Value2 = $file.Name
            $row++
        }
    }
}

# Speichern und Schließen
$workbook.SaveAs($excelPath)
$excel.Quit()

# Aufräumen
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
Remove-Variable excel

Write-Host "Excel-Datei wurde erstellt: $excelPath"

Permanentlink zu diesem Beitrag: https://help.migraven.com/novell-trustee-database-xml-in-csv-konvertieren-migration-vorbereiten/

1 Ping

  1. […] Novell trustee_database.xml in CSV konvertieren […]

Schreibe einen Kommentar

Deine Email-Adresse wird nicht veröffentlicht.