5
votes

Différence entre Azure CLI et PowerShell

Je pose cette question en tant qu'utilisateur Windows mais je vous demande de ne pas limiter la réponse pour Windows uniquement.

J'ai essayé d'exécuter des commandes Azure CLI dans Power-Shell et elles s'exécutent avec succès, mais pas l'inverse. Dans ce cas, pourquoi avons-nous 2 jeux de commandes séparés? Pourquoi ne pas simplement travailler sur Power-Shell? J'ai seulement essayé quelques commandes de base et elles fonctionnent toutes sauf les commandes de filtre | find ne fonctionne que sur CLI et | Select ne fonctionne que dans Power-Shell.

Je sais qu'Azure CLI est destiné à la prise en charge multiplateforme. Mais y a-t-il une différence pour l'utilisateur Windows? Y a-t-il des conséquences à exécuter la commande CLI sur Power-Shell?

Merci d'avance.


2 commentaires

Voyez si cela répond à votre question: stackoverflow.com/questions/45585000/azure-cli-vs-powershell ‌.


Est-ce que cela répond à votre question? Azure CLI vs Powershell?


4 Réponses :


4
votes

Voici mes opinions sur l'utilisation des deux. En aucun cas je ne dis que l'un est meilleur que l'autre. Ils ont tous deux leurs avantages et leurs inconvénients.


Azure CLI est un outil de ligne de commande multiplateforme pour gérer les ressources Azure, et il peut s'exécuter sous Windows, Mac et Linux. Cela signifie également qu'il peut s'exécuter sur Windows PowerShell. C'est plus flexible qu'Azure PowerShell car c'est un binaire et peut s'exécuter dans n'importe quel shell par défaut du système d' exploitation.

Y a-t-il des conséquences à exécuter la commande CLI sur Power-Shell?

La mise à jour peut être un peu pénible. Si vous souhaitez le mettre à jour sous Windows, vous devez réinstaller le MSI avec les instructions de Installer Azure CLI sur Windows . La mise à jour est plus facile sur d'autres plates-formes et me donne envie d'utiliser uniquement Azure PowerShell sur Windows PowerShell. Une solution consiste à utiliser WSL sur Windows, puis vous pouvez exécuter Azure CLI sur Linux à l'intérieur d'une machine Windows. Vous pouvez installer WSL sur le sous-système Windows pour le guide d'installation Linux pour Windows 10 . Je trouve la mise à jour du package azure-cli beaucoup plus facile sous Linux en utilisant apt-get que l'équivalent Windows. Vous pouvez jeter un œil à Installer Azure CLI avec apt pour savoir comment installer le package Azure CLI sur Linux.

Une autre différence est que vous devez chaîner plusieurs commandes avec Azure CLI, telles que az group list vs Get-AzResourceGroup d'Azure PowerShell. Vous ne pouvez pas non plus exécuter Get-Help avec les commandes Azure CLI comme vous le faites avec Azure PowerShell, ce qui change énormément la donne pour moi, car je trouve que le système d'aide PowerShell est très utile pour afficher des informations détaillées sur les applets de commande PowerShell. Les informations d'aide Azure CLI se trouvent avec az --help , mais ne sont pas aussi complètes que Get-Help .

L'achèvement des onglets ne fonctionne pas non plus dans Azure CLI lors de l'utilisation de Windows PowerShell. Cela rend également la saisie un peu pénible, une autre raison pour laquelle j'utilise WSL à l'intérieur de Windows. Vous pouvez consulter les autres alternatives à ce problème de prise en charge de la saisie semi - automatique dans la ligne de commande Windows GitHub.


Azure PowerShell, en revanche, est un ensemble de applets de commande PowerShell pour gérer les ressources Azure à partir de la ligne de commande et ne fonctionne que dans Windows PowerShell et PowerShell Core. Cela signifie également que si un autre système d'exploitation tel que Mac ou Linux exécute PowerShell Core, il peut également exécuter Azure PowerShell.

J'ai seulement essayé quelques commandes de base et elles fonctionnent toutes sauf les commandes de filtre | find ne fonctionne que sur CLI et | Select ne fonctionne que dans Power-Shell.

Select-Object ou le raccourci Select est une applet de commande PowerShell, elle ne fonctionne donc que sur les objets PowerShell. find peut rechercher une chaîne ou un fichier texte. En outre, si vous recherchez des données à partir d'Azure CLI, vous devez utiliser le paramètre --query au lieu de find , car find est limité à la recherche de chaînes dans le texte. Azure CLI utilise le langage de requête JMESPath pour rechercher des données dans la sortie JSON que vous recevez. Si vous êtes à l'aise avec ce langage de requête, la recherche de données à l'aide d'Azure CLI ne devrait pas poser trop de problème. En outre, vous pouvez également utiliser des commandes Azure CLI dans des scripts PowerShell, mais pas l'inverse.


Sommaire

Si vous traitez avec plusieurs plates-formes ou souhaitez écrire des scripts avec d'autres qui utilisent différentes plates-formes, l'utilisation d'Azure CLI est un bon choix. Cependant, si vous traitez principalement avec des systèmes Windows et travaillez avec d'autres qui le font également, utiliser Azure PowerShell est une bonne idée. Si vous êtes comme moi et que vous devez utiliser différentes plates-formes, alors installer les deux est une bonne idée. Si vous souhaitez toujours utiliser Azure PowerShell sur différentes plates-formes de système d'exploitation, vous avez besoin de PowerShell Core.

Pour des tâches simples, telles que la recherche rapide de ressources dans Cloud Shell ou l'écriture de scripts rapides, Azure CLI est bon à utiliser et moins verbeux qu'Azure PowerShell. Si vous utilisez déjà beaucoup bash, cela vous semblera plus naturel et l'ajout de commandes Azure CLI à des scripts existants sera une tâche simple. Comme d'autres l'ont également dit, rien ne vous empêche d'ajouter des commandes Azure CLI aux scripts PowerShell, ce qui vous permet de désérialiser la sortie JSON à l'aide de ConvertFrom-Json dans un PSCustomObject .

Pour les tâches plus complexes, Azure PowerShell est préférable, car il est beaucoup plus facile de travailler avec des objets .NET / des principaux POO que d'analyser le texte JSON fourni à partir d'Azure CLI. C'est l'une des raisons pour lesquelles j'essaie d'utiliser Azure PowerShell lorsque je le peux.

Azure CLI a l'avantage d'être idempotent , de sorte que l'exécution de la même commande sur les ressources ne nécessitera aucune vérification de null comme dans Azure PowerShell. Si cela devient un problème, vous pouvez exécuter des modèles ARM dans Azure PowerShell, qui sont idempotents.


Mise à jour

Comme @AimusSage l'a utilement souligné dans les commentaires, PowerShell 7.0 a récemment été publié, remplaçant le nom PowerShell Core ou PowerShell 6.x. Pour en savoir plus, consultez Announcing PowerShell 7.0 .

Une autre idée

Si vous souhaitez gérer les principaux POO à partir d'Azure PowerShell, mais que vous utilisez quelque chose de plus facile à utiliser pour les administrateurs système Linux, vous pouvez envisager d'utiliser le SDK Azure pour Python . J'ai utilisé cela dans le passé lorsque je voulais exécuter des scripts dans un hôte Linux, mais que je ne voulais pas utiliser Azure CLI ou installer PowerShell.


1 commentaires

Pour ajouter à cela, ils ont récemment publié PowerShell 7, abandonnant le nom Core. Voir aussi [cet article de blog] ( devblogs.microsoft.com/powershell/announcing-powershell-7-0 ‌)



-1
votes

la réponse existante est une façon stupide de regarder cette question. et trompeur.

La plus grande différence est qu'azure cli est un binary (qui peut fonctionner sur différentes plates-formes) et Powershell est un shell qui fonctionne sur toutes les plates-formes. Azure Powershell est un ensemble de modules Powershell, tout le reste en découle.

find ne peut pas fonctionner dans le cli, car il n'y in the cli pas in the cli , car ce n'est pas un shell. find fonctionne parfaitement dans Powershell sous Windows, car il s'agit d'un binary dans le système d'exploitation Windows, alors que select est une applet de commande dans Powershell et ne fonctionnera donc pas en ligne de commande sous Windows (ou bash sous Linux).

En outre, si vous recherchez des données à partir d'Azure CLI, vous devez utiliser le paramètre --query au lieu de find

cela est également discutable, le langage de requête JMESPath est trop compliqué sans raison particulière et je ne sais pas comment Azure Cli est réellement compatible avec la documentation officielle de JMESPath. Je préfère utiliser Powershell pour exécuter des commandes Azure Cli et analyser simplement la sortie JSON avec Powershell. De toute évidence, vous n'êtes peut-être pas aussi à l'aise avec Powershell que moi et vous ne trouverez peut-être pas cela pratique.


7 commentaires

pour les raisons indiquées dans la réponse. vous ne spécifiez pas en fait la différence principale entre ceux-ci explicitement et c'est un gros problème. quant à l'analyse de la sortie - il y a de nombreuses raisons de le faire, il y a des choses que vous pouvez faire avec Azure Cli uniquement (et vice versa) et en faisant vraiment combien il est difficile d'ajouter | ConvertFrom-Json ? En outre, pourquoi apprendre un autre outil lorsque vous pouvez utiliser un outil existant (qui est commodément plus flexible que les requêtes JMESPath). Exemple: trouvez tous les vms avec une balise spécifique et tous avec un sku et une balise spécifiques et enregistrez-les dans 2 variables différentes en 1 requête cli


J'aime les deux réponses. D'un point de vue technique, @ 4c74356b41 mentionne le caus racine: l'un est un binaire, l'autre n'est pas - cela entraîne un tas de conséquences que vous décrivez tous les deux de différentes manières. Il y a une partie de celui-ci qui génère cette discussion - quel est le meilleur pour une tâche spécifique? ou pire encore: lequel est le meilleur pour moi? ... toutes les réponses sont correctes pour certains scénarios pour une personne (c'est pourquoi j'ai voté pour les deux)


Je ne mentionne pas lequel est le meilleur, car il n'y a pas de réponse à cela, mais ce qui est important, c'est la distinction binaire \ shell. De plus, certaines opérations ne sont possibles que dans l'un et pas dans l'autre, ce qui est également une raison valable d'être forcé d'utiliser Powershell ou cli


Bien sûr, si vous avez un tel cas de niche, alors oui. S'il s'agit d'Azure, vous pouvez toujours simplement appeler l'API ordinaire, ce n'est pas mieux que d'installer PS / Cli, mais parfois vous êtes également obligé parce que votre entreprise vous bloque l'accès, faites-le. Mon point est que si vous voulez trouver un cas de coin où techniquement vous êtes forcé d'utiliser l'un ou l'autre, vous le trouverez. Il y a un autre aspect qui est: "quelles connaissances votre équipe possède déjà? Est-ce que cela a du sens d'apprendre cette grande nouveauté? Ou est-ce que je ferais mieux d'investir ailleurs?"


eh bien, la réponse existante ne le mentionne pas non plus. mais la personne affirme qu'il n'y a aucune raison valable d'utiliser PowerShell avec azure cli, ce qui est évidemment absurde (il a déjà supprimé le commentaire).


lorsque vous avez besoin de fonctionnalités uniquement disponibles dans azure powershell pour une chose et une disponible dans cli pour une autre


pourquoi devrais-je chercher des éléments non disponibles dans l'un et disponibles pour l'autre? Je sais avec certitude que PowerShell manque la plupart des commandes az aks , mais j'utilise principalement powreshell, pas cli, donc je n'ai aucune idée de ce qui manque à cela, mais il manque évidemment quelque chose. tous les outils azure manquent certains des appels API. probablement plus facile de regarder le sdk python pour comprendre ce qu'il manque par rapport au powershell, car cli manquerait cela à coup sûr



0
votes

J'aime les réponses précédentes, je veux juste ajouter un point de vue différent pour les gens du monde de l'entreprise qui sont obligés d'en choisir un:

Dans ce cas, pourquoi avons-nous 2 jeux de commandes séparés? Pourquoi ne pas simplement travailler sur Power-Shell?

Reformulation: Az CLI et Az PowerShell appellent simplement le même ensemble d'API, les API Azure. Ceci est important car théoriquement et éventuellement vous pourrez tout faire dans les deux sens

Alors pourquoi Microsoft a-t-il créé et maintient deux façons de faire la même chose?

Ceux de Martin Fowler ont dit: mais rappelez-vous, les compétences de l'équipe l'emporteront sur tout choix de monolithe / microservice

Si vous modifiez le monolithe / microservice par PowerShell / Bash, cela répond à la question.

Je crois qu'il y a des gens avec des décennies de développement de systèmes utilisant Bash, et il y a d'autres équipes qui sont de gros utilisateurs de PowerShell. Microsoft ne veut pas qu'ils aient à apprendre un tout nouveau langage de programmation pour pouvoir utiliser Azure.

Sommaire:

Si votre équipe est familière avec PowerShell, utilisez PowerShell et faites autant de choses que possible avec PowerShell natif. De cette façon, vous bénéficiez d'éléments tels que la gestion des erreurs, les concepts de POO, les paramètres d'environnement, la parallélisation, etc.

Si votre équipe est composée d'administrateurs Linux, de gros utilisateurs de jenkins, avec des millions de lignes de Bash pour automatiser d'autres choses déjà là, et travaillant avec Bash toute leur vie, optez pour la CLI et maintenez la cohérence dans tous les outils déjà construits


1 commentaires

c'est vrai, c'est pourquoi je n'ai jamais précisé lequel est le meilleur (car aucun ne l'est vraiment), ils sont différents



0
votes

J'ai remarqué lors de la formation MS Azure (AZ-900 fondamentaux et AZ-303 Azure Architect) que les exercices sont effectués dans Azure CLI .

Cela ne veut pas dire que c'est mieux, mais si vous voulez passer les examens, cela vaut peut-être la peine de vous familiariser avec. Pour mémoire, je suis un gars de PowerShell.


0 commentaires