Crescendo, inarrêtable Powershell 3/3

Niveau : ★★★★☆

3 ème et dernière partie pour cet article sur Powershell Crescendo.
Partie 1 : https://thierrybtblog.wordpress.com/2023/02/24/crescendo-inarretable-powershell-1-2/
Partie 2 : https://thierrybtblog.wordpress.com/2023/03/17/crescendo-inarretable-powershell-2-3/

Si dans la seconde partie, la commande choisie présentait peu de paramètres, c’est une commande plus complète qui est utilisée dans cette dernière partie. Je n’ai pas trouvé mieux que l’outil Azcmagent (pour AzureConnectedMachineAgent) qui est présenté dans la doc officielle Powershell Crescendo (https://learn.microsoft.com/fr-fr/powershell/utility-modules/crescendo/get-started/research-tool?view=ps-modules/?WT.mc_id=AZ-MVP-5003759).

Voici quelques exemples un peu plus avancés pour « porter » cette commande et en faire une nouvelle commande Powershell. Avec des sous commandes sans paramètres puis des sous commandes avec paramètres.

Une fois l’outil installé, il est lancé dans sa version originale pour afficher les commandes dont il dispose.

Voilà un outil très intéressant puisqu’il propose un ensemble de commandes (Check, Config, Connect …etc). Et que ces commandes sont exploitées pour certaines avec des paramètres de sous commandes.

Je ne reviens pas sur la façon dont est traitée la commande pour être transformée en Applet Powershell, c’est à revoir dans la partie deux de l’article.

L’outil Azcmagent est plus complet que la commande PS de la partie précédente, il est donc possible d’aller plus loin.
Le fichier Json qui a permis de générer le nouveau module est disponible dans la documentation à cette adresse : https://learn.microsoft.com/fr-fr/powershell/utility-modules/crescendo/get-started/create-new-cmdlet?view=ps-modules#completing-the-crescendo-command-configuration/?WT.mc_id=AZ-MVP-5003759
Cette page est utilisée pour tous les exemples de cette 3 ème partie.
Attention, le Json fourni pour la création du premier module comporte une coquille, le code ne fonctionnera pas en l’état. Il faut retirer la « , » en jaune qui ferme le bloc Platform.



Et pour rappel, toutes les commandes de création se feront dans une fenêtre avec élévation de privilèges, sans cela, la création du module fonctionne mais avec des erreurs qui empêcheront de faire fonctionner le module.

Cette nouvelle commande affiche donc les informations demandées. J’utilise ici sur un poste de travail, il n’y a donc rien de concret à afficher au travers d’un agent qui n’est pas présent. Cela ne change rien à l’esprit de la démo.


Le module suivant est encore un peu plus complet puisqu’il comporte des paramètres de sous commandes et c’est donc une nouvelle fois le code de la documentation qui est utilisé.

Cette partie de paramètres est en jaune dans l’exemple.

Une remarque, il y a deux Get dans ce fichier de configuration.
Mais ce sont deux choses très très différentes. Ci-dessus, en rouge, le verbe utilisé par Powershell, en jaune, le paramètre de la commande originale qu’il faut convertir en paramètre Powershell.
Pour bien comprendre cette différence, retour à la commande de départ, non Powershell, azcmagent.exe config --help.

C’est donc bien le paramètre get de la commande azcmagent.exe config qui va être porté sur Powershell.

Il faut utiliser le Json de la doc, mais … attention, il y a … une nouvelle coquille dans cette doc 😉
Le bloc Parameters est déclaré deux fois ce qui n’est pas possible… Il faut retirer dans le Json la partie en rouge.

Puis créer et importer ce nouveau module avec paramètre Get. Il est rendu obligatoire dans le Json ("Mandatory": true,) et attend une propriété lorsqu’il est utilisé.

Reste à renseigner un propriété (ici proxy.url) pour avoir un retour pour cette toute nouvelle commande Powershell.

Il reste un petit soucis d’affichage pour lequel je ne passe pas trop de temps à trouver de quoi il vient. Peut-être la langue Française ou ma version de Powershell.

Dernière modification pour le Json, l’ajout d’exemples dans la commande d’aide. Cette partie n’est pas traitée dans la doc. Je trouve que cet ajout est particulièrement intéressant et peut simplifier l’utilisation de commandes complexes ou mal documentées. Je vais même aller plus loin, je pense que cet ajout peut même justifier de porter certaines commandes uniquement pour cette raison !
Voici le code à ajouter avant de supprimer et de régénérer le module (suppression des fichiers PSM1 et PSD1).

"Examples": [
                {
                "Command": "Get-AzCmAgentConfigProperty -Property proxy.url",
                "Description": "Affiche la propriétés proxy.url",
                "OriginalCommand": "azcmagent.exe config get proxy.url"
                }
            ]

Puis voici la façon dont cette aide est appelée par la commande Powershell. Rien de spécifique ici, toutes les commandes d’aide Powershell se traite de la même façon, l’ajout du paramètre -Examples filtre le retour d’affichage.

Get-Help Get-AzCmAgentConfigProperty -Examples

Voilà qui termine cette troisième partie de documentation Powershell Crescendo. Encore un peu jeune avec notamment quelques coquilles de documentation, le module peut se révéler utile dans certains cas.
Si vous avez des exemples ou des remarques sur cette série d’articles, n’hésitez pas à commenter pour venir discuter de ce sujet !

PS : Pour un schéma exhaustif du Crescendo, direction le Git du projet à cette adresse : https://github.com/PowerShell/Crescendo/blob/master/Microsoft.PowerShell.Crescendo/schemas/2022-06/?WT.mc_id=AZ-MVP-5003759