Aller au contenu

VTOM : générer son référentiel dans un csv à partir d’un vtexport

Après avoir exécuté un vtexport sur votre serveur vtom, vous pouvez utiliser ce script en PowerShell ou en Python pour générer un référentiel au format CSV. Assurez-vous de remplacer le chemin du fichier vtexporté ainsi que l’emplacement du fichier de sortie. Nous vous proposons deux scripts, l’un en PowerShell et l’autre en Python, pour accomplir cette tâche.

#bibliogeek.fr
#██████╗ ██╗██████╗ ██╗     ██╗ ██████╗  ██████╗ ███████╗███████╗██╗  ██╗
#██╔══██╗██║██╔══██╗██║     ██║██╔═══██╗██╔════╝ ██╔════╝██╔════╝██║ ██╔╝
#██████╔╝██║██████╔╝██║     ██║██║   ██║██║  ███╗█████╗  █████╗  █████╔╝ 
#██╔══██╗██║██╔══██╗██║     ██║██║   ██║██║   ██║██╔══╝  ██╔══╝  ██╔═██╗ 
#██████╔╝██║██████╔╝███████╗██║╚██████╔╝╚██████╔╝███████╗███████╗██║  ██╗
╚═════╝ ╚═╝╚═════╝ ╚══════╝╚═╝ ╚═════╝  ╚═════╝ ╚══════╝╚══════╝╚═╝  ╚═╝
# Chemin du fichier INI
$iniFilePath = "E:\bibliogeek\fichier_vtexport.ini"

# Obtenir la date et l'heure actuelle et les formater pour les utiliser dans le nom du fichier de sortie
$currentDateTime = Get-Date -Format "yyyyMMdd_HHmmss"

# Chemin du fichier CSV de sortie avec le nom du fichier incluant la date et l'heure actuelle
$csvFilePath = "E:\bibliogeek\bibliogeek_${currentDateTime}.csv"

# Toutes les clés possibles, avec "Section" en première position
$allKeys = @("Section", "mode", "heure_debut", "heure_fin", "type_periodicite", "cyclique", "cycle", "periodicite", "mettre_application_en_erreur", "ne_pas_deplanifier", "attendre_avant_deplanification", "mepType", "queue", "bloquer_la_date", "rattrapage_type", "nombre_relances", "label_reprise", "duree_max", "status", "statusTime", "retenu", "demande", "script", "ressources", "position", "width", "height", "content", "parametres", "modjobs", "liens_vers", "liens_de")

# Vérifier si le fichier INI existe
if (-not (Test-Path -Path $iniFilePath -PathType Leaf)) {
    Write-Host "[ERREUR] Fichier INI introuvable au chemin spécifié."
    return
}

# Lire le fichier INI et le traiter
$iniContent = Get-Content -Path $iniFilePath
$csvData = @()
$currentSection = ""
$processSection = $false
$attributes = @{}

foreach ($key in $allKeys) {
    $attributes[$key] = ""
}

foreach ($line in $iniContent) {
    $trimmedLine = $line.Trim()

    if (-not [string]::IsNullOrWhiteSpace($trimmedLine)) {
        # Vérifier si la ligne est une section
        if ($trimmedLine -match "^\[(.+)\]$") {
            if ($processSection) {
                $attributes["Section"] = $currentSection
                $csvData += New-Object PSObject -Property $attributes
                $attributes.Clear()
                foreach ($key in $allKeys) {
                    $attributes[$key] = ""
                }
            }
            $currentSection = $matches[1]
            $processSection = $currentSection -match "^job:"
        } elseif ($processSection -and $trimmedLine -match "^([^=]+)=(.*)$") {
            $key = $matches[1].Trim()
            $value = $matches[2].Trim()
            $attributes[$key] = $value
        }
    }
}

# Ajouter le dernier élément si le fichier se termine par une section à traiter
if ($processSection) {
    $attributes["Section"] = $currentSection
    $csvData += New-Object PSObject -Property $attributes
}

# Organiser les données CSV selon l'ordre de $allKeys avant de les exporter
$orderedCsvData = $csvData | ForEach-Object { $_ | Select-Object $allKeys }
$orderedCsvData | Export-Csv -Path $csvFilePath -NoTypeInformation -Encoding UTF8

Write-Host "[INFO] Conversion terminée. Le fichier CSV a été sauvegardé à $csvFilePath"

import configparser
import csv
import os
from datetime import datetime

# Chemin du fichier INI
ini_file_path = "E:/bibliogeek/fichier_vtexport.ini"

# Obtenir la date et l'heure actuelle et les formater pour les utiliser dans le nom du fichier de sortie
current_datetime = datetime.now().strftime("%Y%m%d_%H%M%S")

# Chemin du fichier CSV de sortie avec le nom du fichier incluant la date et l'heure actuelle
csv_file_path = f"E:/bibliogeek/bibliogeek_{current_datetime}.csv"

# Toutes les clés possibles, avec "Section" en première position
all_keys = ["Section", "mode", "heure_debut", "heure_fin", "type_periodicite", "cyclique", "cycle", "periodicite",
            "mettre_application_en_erreur", "ne_pas_deplanifier", "attendre_avant_deplanification", "mepType", "queue",
            "bloquer_la_date", "rattrapage_type", "nombre_relances", "label_reprise", "duree_max", "status",
            "statusTime", "retenu", "demande", "script", "ressources", "position", "width", "height", "content",
            "parametres", "modjobs", "liens_vers", "liens_de"]

# Vérifier si le fichier INI existe
if not os.path.isfile(ini_file_path):
    print("[ERREUR] Fichier INI introuvable au chemin spécifié.")
    exit()

# Lire le fichier INI et le traiter
config = configparser.ConfigParser()
config.optionxform = str  # Préserve la casse des clés
config.read(ini_file_path, encoding='utf-8')

csv_data = []

for section in config.sections():
    if section.startswith("job:"):
        attributes = {key: "" for key in all_keys}
        attributes["Section"] = section
        for key in config[section]:
            if key in attributes:
                attributes[key] = config[section][key]
        csv_data.append(attributes)

# Écrire les données CSV
with open(csv_file_path, 'w', newline='', encoding='utf-8') as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=all_keys)
    writer.writeheader()
    writer.writerows(csv_data)

print(f"[INFO] Conversion terminée. Le fichier CSV a été sauvegardé à {csv_file_path}")

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *