Résolu Pb pour réutiliser des valeurs dans d'autres clés du même hashtable

Plus d'informations
il y a 10 mois 2 semaines #31636 par ageofempiresz
Mon réel besoin, je cherche un moyen de faire de la génération de fichiers par des templates, celui qui me parait bien est d'utiliser le module Poshstache dans Powershell Gallery. J'ai un hashtable qui regroupe des clés et des valeurs associés pour remplacer les variables positionnés dans les fichiers par des valeurs. Je précise que le hashtable devra faire des sous hashtable dans ce module poshtache permet de fouiner, j'ai fait quelques tests avec lui. Les entrées fournies (hostname, ip, netmask, gateway, fqdn, ou, domain, etc) sont dans un fichier plat et elles varient selon les plateformes que je dois gérer et à déployer. C'est un contexte en hors-ligne, donc pas d'accès à internet.
J'aimerais utiliser également cette hashtable dans des scripts ps1, pour optimiser et réduire le paquet de variables qui peuvent être supprimé ou en trop.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 mois 2 semaines #31640 par ericlm128
1)

Malheureusement, je voulais alimenter un tableau de hashtable pour mettre des OU et autres valeurs dedans dans le but de l'utiliser dans un template, mais je devrais utiliser des variables intermédiaires pour le faire. Dommage

Ce code n'utilise pas de variable "intermédiaires"
$tab = @{
name = "toto"
bob = "bricoleur"
}
$tab.test = $tab.name + " lol " + $tab.bob

2)
Malheureusement le module Poshstache ne semble pas gérer les "function" (fonctionnalité de la librairie Mustache dont ce sert le module)
Voir documentation officielle : mustache.github.io/mustache.5.html
Ceci aurait parfaitement répondu à ton besoin
Plus d'infos ici : www.codeproject.com/Articles/1000127/Mustache-Templates

3)
Le module ne prend pas aussi en charge les templates partiels
Plus d'infos ici : www.codeproject.com/Articles/1000127/Mustache-Templates

4)
Je te conseil de travailler comme ceci, qui me parait être la bonne logique
2 exemples de paramètres et 2 exemples de modèle
$param1 = @"
{
 "personne": {
    "nom": "DUPOND",
    "prenom": "Patrick"
  }
}
"@

$param2 = @{
    personne = @{
        nom = "DUPOND"
        prenom = "Patrick"
    }
}

$template1 = @"
{{#personne}}Mon nom est : {{nom}}
Mon prénom est : {{prenom}}
Mon nom complet est : {{nom}} {{prenom}}{{/personne}}
"@

$template2 = @"
Mon nom est : {{personne.nom}}
Mon prénom est : {{personne.prenom}}
Mon nom complet est : {{personne.nom}} {{personne.prenom}}
"@

ConvertTo-PoshstacheTemplate -InputString $template1 -ParametersObject $param1
ConvertTo-PoshstacheTemplate -InputString $template2 -ParametersObject $param1
ConvertTo-PoshstacheTemplate -InputString $template1 -ParametersObject $param2 -HashTable
ConvertTo-PoshstacheTemplate -InputString $template2 -ParametersObject $param2 -HashTable

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 mois 2 semaines - il y a 10 mois 2 semaines #31662 par ageofempiresz
Merci pour tes réponse.
1) Quand je disais des variables intermédiaires, je pensais à des variables simples qui sont déclaré avant et ensuite je déclare mon hashtable. ça fait pas très jolie, mais bon.
Je pensais ça
Code :
$NETBIOS = "TOTO"
$EXTENSION = "FR"
$OU = "OU=machines,DC=$NETBIOS,DC=$EXTENSION"

$tab = @{
extension = $EXTENSION
netbios = $NETBIOS
OU = $OU
}
$tab

Résultat :
Name                           Value
--------                       -------
extension                      FR
OU                             OU=machines,DC=TOTO,DC=FR
netbios                        TOTO  
                                                                                                                                                        

2) et 3) merci pour les liens je vais jeter un œil là-dessus. J'avais déjà regardé un peu la doc de mustache qui est plutôt bien faite.
4) le premier exemple j'avais déjà testé un exemple similaire. Le deuxième est intéressé cela évite de mettre une nouvelle {{#nom}}.
Dernière édition: il y a 10 mois 2 semaines par ageofempiresz.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 mois 2 semaines - il y a 10 mois 2 semaines #31664 par ericlm128
Je comprends bien l'exemple mais en pratique ton "TOTO", "FR" et "OU=machines,DC=$NETBIOS,DC=$EXTENSION" tu va allé les chercher dans des fichiers je suppose.
Tu va avoir besoin de code pour collecter ces données. Tu ne peux pas mettre tout ton code dans l'instanciation de l'objet, sinon ton script code va devenir difficilement lisible.

Si tes données ne sont pas collecté et son en dur dans le script tu peux faire comme tu le souhaitais. En ajoutant celle qui sont calculé automatiquement après.
$tab = @{
    extension = "FR"
    netbios = "TOTO"
}

# Ajout de propriétés calculés
$tab.OU = "OU=machines,DC=$($tab.netbios),DC=$($tab.extension)"

$tab
Dernière édition: il y a 10 mois 2 semaines par ericlm128.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 mois 2 semaines #31665 par ericlm128
Sinon tu fait comme ceci
$tab = @{}
$tab.extension = "FR"
$tab.netbios = "TOTO"
$tab.OU = "OU=machines,DC=$($tab.netbios),DC=$($tab.extension)"

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 mois 1 semaine #31669 par ageofempiresz
J'avais un exemple un peu différent. Je vais m'en inspiré. Merci pour l'idée.
Actuellement, il y a un mélange entre les variables simples et le fichier plat dans plein de scripts. Mes prédécesseurs avaient des notions basiques, mais pas structurer. C'est le travail que je suis en train de faire pour rendre plus lisible le code dans les scripts et gérer les cas d'erreurs.

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.058 secondes
Propulsé par Kunena