dakhama-mehdi / Modern_ActiveDirectory

Modern Active Directory
MIT License
59 stars 11 forks source link

encore amélio #6

Open Rapidhands opened 1 year ago

Rapidhands commented 1 year ago

re Medhi J'ai regardé le code (ex ici function_HTMLMultiPage.ps1). Dans ton code tu as 100 les mêmes cmdlets (Ok), mais avec 100 fois les mêmes paramètres (ex. New-HTMLText -Text $userinactive -Alignment justify -FontSize 25 -FontWeight bold ) tu aurais tout intérêt à te simplifier le code en utilisant en début de script un plat pour définir les valeurs par défaut de ces cmdlets dans la variable PSDefaultParameterValues. Ainsi, tu n'aurais qu'à saisir a cmdlet et sans paramètre spécifié cela appliquerait ceux du PDDefaultParameterValues. De plus,si tu veux en changer 1, tu n'as à le changer qu'une seule fois dans la variable et tu n'as pas à te coltiner tout le code.

un exemple de splat pour cela:

$PSDefaultParameterValues = @{
                                    '*:Encoding' = 'UTF8'
                                    'Install-Module:Scope' = 'CurrentUser'
                                    'Test-Connection:Count' = '1' 
                                    'Export-Csv:NoTypeInformation' = $true
                                    'Export-Csv:delimiter' = ";"
                                    'ConvertTo-Csv:NoTypeInformation' = $true
                                    'Get-WinEvent:LogName'='System'
                                    }

cordialement Olivier

dakhama-mehdi commented 1 year ago

Oui, le code HTML est a revoir et peu bcp etre amélioré et simplifié, au départ je l'ai construis au millimètre fallait calcule la largeur, hauteur ne pas décalé et hop on revoit tout, j'étais aussi beaucoup aidé par le développeur du module qui a revu lui aussi pas mal de chose. Je vais essayer de réduire cela dans des sous fonctions mais je sais pas si ca marchera ou pas, car il a une méthode native

Rapidhands commented 1 year ago

Prends un fichier .ps1 quelconque, comme celui cité en exemple. Au début du script ajoute et défini $PSDefaultParameterValue. Il y a une aide sur le technet sur ça, mais l'exemple que je t'ai mis explique bien :

Une fois que tu as fait cela, recherche les paramètres en question et fait le ménage. Là ou tu avais et 3-4 paramètres, tu n'auras que puisque ladite cmdlet aura comme paramètre par défaut ce que tu as définis. Et si jamais pour une ligne particulière tu as besoin de passer une valeur différente, là tu l'écris. Ca simpligie énormément le codage ... et ça donne des lignes plus courtes. Je vais prendre un simple exemple : Test-Connection. Par défaut cela te fait 4 pings. Dans mon shell, je fais : $PSDefaultParameterValues = @{'Test-Connection:Count' = '1'} puis Test-Connection 8.8.8.8 Et là, je n'ai qu'un seul ping, car le default a été paramétré. Bien entendu je ne fais pas cela dans mon shell, mais je mets cela plutôt dans mon profil. Dans ton script, tu mets qq chose équivalent en début de script, et après, le reste c'est juste les cmdlets et quelquefois un ou deux paramètres avec des valeurs spécifiques au besoin.

Quand je code, dès que je m'aperçois que je dois mettre x fois un paramètre avec la même valeur, je défini cela en PSDefaultParameterValue (cela ne s'applique qu'au script ou au shell si c'est dans $Profile). et après, cela me facilite la frappe, je n'ajoute que les paramètres avec des valeurs spécifiques.

dakhama-mehdi commented 1 year ago

Le code HTML est un appel d'une fonction d'un autre module, peut etre que je tenterai une function qui me retourne la ligne entiere et je lui envoie que les parametres, mais je ne pense pas que le module html à été pensé comme ça, j'ai déja tenté des modifications mais toujours déformer en résultat.

Rapidhands commented 1 year ago

ce n'est pas ça dont je te parle. Tu passes - et tu n'as pas le choix- xx fois les mêmes cmdlets, mais dans 95% du temps avec les mêmes paramètres et les mêmes valeurs. Mets ces paramètres et ces valeurs dans le $PSDefaultParameterValue et tu n'auras pas besoin de les écrire, et ça rend le code plus lisible. Si tu ne sais pas ce qu'est cette variable dont je parle, c'est une variable prédéfinie, une recherche sur Internet t'en dira plus