Accueil Blog (en) Tidbits PowerShell utiles pour vous aider à gagner du temps tous les jours - Partie 1

Tidbits PowerShell utiles pour vous aider à gagner du temps tous les jours - Partie 1

Si vous affirmez que vous ne connaissez aucun PowerShell, vous avez probablement tort. Si vous avez utilisé des outils de ligne de commande ou exploré des systèmes via une ligne de commande, vous connaissez un peu PowerShell car il est superposé au-dessus de la ligne de commande nue.
Robert Waite | Le 6 décembre 2022

Friandises PowerShell utiles pour vous faire gagner du temps tous les jours

Principes de base de PowerShell

Dans cette série de blogs, mon objectif est de vous convaincre d’apprendre PowerShell. J’espère atteindre un public plus large que les développeurs avec ce post. Si vous êtes un consultant ERP non-développeur, ce blog est également fait pour vous. En fait, PowerShell n’est pas un outil créé pour les développeurs, il était destiné à servir les administrateurs système et les consultants et leur permettre d’automatiser les tâches d’administration informatique. Mais il y a beaucoup de pouvoir que les développeurs peuvent également obtenir en connaissant et en utilisant PowerShell dans le développement quotidien.

Si vous affirmez que vous ne connaissez aucun PowerShell , vous avez probablement tort. Si vous avez utilisé des outils de ligne de commande ou exploré des systèmes via une ligne de commande, vous connaissez un peu PowerShell car il est superposé au-dessus de la ligne de commande nue. Nous allons donc commencer ce blog avec une navigation et une manipulation fondamentales du système de fichiers. Nous allons utiliser un cas d’utilisation réel pour automatiser la mise à jour d’une bibliothèque de référence afin de la repointer vers une version différente d’Acumatica Files

Cas d’utilisation : mettre à jour le dossier de bibliothèque de référence dll pour utiliser une version différente d’Acumatica

D’après mon expérience de travail avec de nombreux développeurs Acumatica différents, ils ont tous une façon différente de câblage des références Visual Studio jusqu’à une instance d’Acumatica. J’ai récemment appris d’une façon super lisse de faire cette tâche de mon collègue développeur MVP Stephan Belanger. La stratégie est simple. Les fichiers Dll sont copiés du répertoire Acumatica Bin dans un dossier du projet Visual Studio et les références sont à leur tour pointées vers ces fichiers. Ce que j’aime à propos de cette stratégie, c’est que le projet VS peut maintenant être construit sans avoir besoin d’une instance réelle d’Acumatica à pointer. Vous n’avez donc même pas besoin que le site Web soit chargé dans la solution. Cela se prêtera bien à tout processus de construction automatisé ou CI / CD. Tant que les dlls pour la version cible d’Acumatica sont dans ce dossier bibliothèque, vous êtes prêt à partir. Plus de références finagling chaque fois que vous avez l’intention de travailler sur une nouvelle version d’Acumatica. Tout ce que vous avez à faire est de mettre à jour les fichiers. Nous allons automatiser cela en utilisant des appels de ligne de commande fondamentaux, puis en les enchaîner dans un script PowerShell.

ISE contre l’invite de PowerShell

Il existe deux façons fondamentales d’engager PowerShell. Le premier est l’ISE ou (environnement de script intégré). Ou deux l’invite PowerShell. Généralement, vous utiliserez l’environnement de script intégré ISE pour développer, dépanner, et mettre à jour des scripts de PowerShell. Ensuite, vous utiliserez l’invite PowerShell pour utiliser et consommer des scripts et des services PowerShell. Une autre différence est ISE a le sens d’Intel et l’invite de PowerShell a quelque chose de semblable appelé tab. Chacun fait la même chose, mais de manières très différentes.

Friandises PowerShell utiles pour vous faire gagner du temps tous les jours

Remplissage de l’onglet

Pour explorer l’achèvement de l’onglet permet d’ouvrir l’invite PowerShell et d’identifier le dossier de fichiers que nous souhaitons mettre à jour. Ouvrez le menu Démarrer et tapez PowerShell. Vous obtiendrez quelque chose comme l’image ci-dessus l’invite PowerShell est l’option sans suffixe ISE. Ouvrons cela. Il y a de fortes chances que vous connaissiez le DIR de commande DOS pour renvoyer une liste de répertoire. Nous pouvons rechercher notre cible en tapant DIR puis c:\ ou le lecteur qui détient le projet. Permet de taper la première lettre du répertoire suivant, puis appuyez sur la touche de tabulation. Vous verrez le premier commençant directement par cette lettre apparaître. Si vous n’êtes pas arrivé à votre désir directement puis appuyez sur l’onglet à nouveau et répétez jusqu’à ce que vous arrivez au répertoire suivant. Si vous êtes allé loin et que vous souhaitez aller dans le répertoire précédent, utilisez l’onglet Maj. Commencez à taper la ou les deux lettres suivantes, puis les onglets jusqu’à ce que vous arriviez à la partie suivante du chemin. C’est ainsi que fonctionne l’achèvement de l’onglet fondamental. C’est essentiellement de l’intelligence pour un système de ligne de commande non graphique. Tout ce que vous devez vous rappeler, ce sont ces deux choses. Il y a beaucoup de choses au-delà de la navigation du système de fichiers qui utilisent également l’achèvement de tabulation.

Tab = déplacer ensuite.

Onglet Maj = déplacer le précédent.

 

IntelliSense dans ISE

Ensuite, nous allons explorer comment cela fonctionne dans l’environnement de script intégré. Dans le menu Démarrer, ouvrons l’autre option PowerShell qui consiste à ouvrir l’ISE. En plus de compléter l’onglet, vous verrez également qu’une fenêtre IntelliSense s’ouvre qui vous aide à naviguer dans le système de fichiers. Identifions maintenant le dossier de fichiers.

Powershell-Partie1

Tout ce qui précède est des trucs d’interface de ligne de commande standard sur lequel PowerShell est construit. Nous pouvons maintenant ajouter une fonctionnalité que vous ne trouverez pas dans la seule ligne de commande. C’est-à-dire que nous pouvons charger les résultats dans une variable PowerShell. Tout ce que nous avons à faire est d’utiliser le $ char pour préfixer un nom de variable, puis d’utiliser le = char suivi de l’instruction que nous venons de courir. Au lieu de retyper la commande de trou il suffit d’appuyer sur la flèche vers le haut pour afficher la dernière commande. Maintenant, si vous appuyez sur votre touche d’accueil pour déposer votre curseur dans le début de la ligne. Maintenant, tapez $libFiles = puis entrez. Il semble que rien ne se soit passé, mais si vous tapez maintenant $libFiles vous verrez qu’il renverra les résultats qui ont été précédemment retournés dans la commande DIR seule.

Powershell-Partie1

Maintenant, ce que nous pouvons faire avec cette variable est de la mettre à travers une commande foreach , puis de faire quelque chose avec chacun des fichiers. Copions notre ligne qui contient l’affectation variable dans la partie d’éditeur de script de l’éditeur ISE. Après cette ligne, nous ajouterons le fichier foreach et nous renverrons simplement le nom du fichier à l’hôte. Vous remarquerez peut-être que vous ne recevez pas IntelliSense lorsque vous tapez $libFile.name. En effet, la variable n’a jamais été initialisée. Une astuce lors de ces foreach boucles il pour exécuter la boucle une fois et il suffit de retourner le fichier lui-même. Maintenant, si vous exécutez le script (utilisez F5 comme raccourci), vous pourrez interagir avec le dernier objet de la boucle. Il s’agit d’une fonctionnalité très puissante de PowerShell, qui permet d’interagir avec des objets lorsque vous créez un script. Cela ressemblera à ce qui suit.

Powershell-Partie1

Maintenant, ce que nous devons faire dans cette boucle est de trouver les dlls mis à jour qui doivent remplacer la liste chargée dans notre variable $libFiles. Ce que nous devons savoir maintenant, c’est où est le dossier bin des fichiers sources dont nous avons besoin. Tout ce que nous devons savoir à ce stade est le répertoire Acumatica et nous pouvons en déduire le bac. À ce stade, nous allons engager l’utilisateur du script pour entrer ces informations. Pour ce faire, nous ferons appel à la commande Read-Host.

Hôte de lecture

Le Read-Host est une commande très utile. J’aime particulièrement l’utiliser car je travaille sur un script inachevé et je refactorise généralement le Read-Host hors du script aux étapes futures du script. Essentiellement tout ce que Read-Host fait est de demander à un utilisateur final une valeur de chaîne. Les chaînes vides ou simplement appuyer sur Entrée est une entrée acceptable. Cela introduit également un mécanisme pour ajouter du retard dans un script afin d’attendre l’achèvement d’une tâche manuelle. J’aime utiliser cette technique dans les premières étapes de l’automatisation d’un processus de temps où je pourrais amener un utilisateur humain à effectuer temporairement une tâche manuelle tout en étant capable d’automatiser une partie du processus. Je vais souvent commencer un script avec seulement des lignes de lecture-hôte. Un pour chaque étape d’un processus que nous avons l’intention d’automatiser. Quelque chose comme ce qui suit.

Powershell-Partie1

Il ne se passe rien dans le script ci-dessus autre que d’inviter un utilisateur à effectuer une tâche manuelle. À l’heure actuelle, nous cherchons à automatiser l’étape 6. Une fois que c’est en place, nous pourrions remplacer cette ligne par notre script de travail et nous aurons alors un script semi-automatisé qui a un processus manuel à est, mais est néanmoins gagner un certain degré de temps sur un nombre incalculable de fois que ce processus doit être répété. Je trouve souvent que je n’ai pas beaucoup de temps pour terminer un script. Mais si j’ai l’habitude de rendre le script ci-dessus légèrement plus automatisé à chaque exécution avec le peu de temps dont je dispose. Ensuite, la réalité est qu’à long terme, cette automatisation libérera encore plus de temps pour affiner et faire moins de travail manuel sur chaque itération.

Pour en revenir à notre objectif d’automatiser la mise à jour des dll, nous ajouterons ces lignes au début du script.

Powershell-Partie1

Nous avons un bloc do while où la commande Test-Path va valider si la valeur entrée est bonne. Nous pouvons voir que la ligne Read-Host invitera l’utilisateur et chargera la valeur dans une variable. La ligne après met en forme la valeur d’entrée dans une chaîne qui doit pointer vers le répertoire bin. L’invite se répétera jusqu’à ce qu’une entrée valide soit entrée. C’est un moyen super facile d’obtenir l’entrée d’un utilisateur. Il existe des moyens plus élégants de le faire. Étant donné que nous avons toute la puissance de .NET dans PowerShell, nous pouvons même faire apparaître des boîtes de dialogue modales qui vous aideront à la sélection. Nous recherchons juste les bases de ce blog. Mais nous allons entrer dans un sujet plus avancé qui comprend l’octroi d’une entrée d’interface graphique dans un futur blog de cette série. Nous avons ce dont nous avons besoin, alors nous allons passer à la prochaine partie.

Maintenant que nous savons où se trouvent les dlls sources, nous pouvons maintenant mettre à jour notre boucle pour faire le travail que nous recherchons. Compte tenu de l’intractabilité de l’invite PowerShell, nous pouvons l’utiliser pour explorer la partie suivante. Au fur et à mesure que nous trouvons des pièces qui fonctionnent, nous pouvons utiliser la touche flèche vers le haut pour obtenir la dernière commande, puis l’ajouter à la partie script. Si vous utilisez la complétion de l’onglet ou l’intelligence sur la variable $labile, vous pouvez déterminer que nous allons avoir besoin des valeurs de nom complet et de nom. Chargeons-les dans des variables comme celle-ci.

Powershell-Partie1

Nous pouvons ensuite concaténer le dossier source et la destination en tant que tels et maintenant nous connaissons le chemin de destination et le chemin source du fichier qui doit être copié.

Powershell-Partie1

Pas de retour à des trucs de ligne de commande de base, nous pouvons utiliser la commande copy pour faire le travail.

Quelque chose comme ça:

Powershell-Partie1

Mais nous pouvons ajouter quelques noms de paramètres PowerShell pour rendre ce que cela fait un peu plus compréhensible.

Powershell-Partie1

Une fois que nous testons que ceci fonctionne pour la commande simple nous pouvons maintenant utiliser la baisse toutes les lignes de travail dans le script. Au lieu d’utiliser la touche flèche vers le haut pour chacun d’eux, nous pouvons utiliser le Get-History ou simplement hist pour obtenir toutes les commandes que nous avons entrées dans cette session. Get-History est un autre outil utile lors de la création de scripts car il éliminera la nécessité de retaper les éléments que vous avez explorés à l’aide de l’invite PowerShell. Il suffit de couper et coller pour obtenir ces lignes dans la boucle de foreach . Notre résultat final est le suivant.

Powershell-Partie1

Exécutez le script et voyons si nous obtenons les résultats dont nous avons besoin. Si vous voyez tous les fichiers comme la version souhaitée, cela a réussi.

Fonctions

Nous pouvons affiner ce script un peu mieux en encapsulant ce qui est nécessaire dans une fonction. Et au lieu d’avoir un répertoire LibFiles statique et une invite Read-Host, nous pouvons les configurer en tant que paramètres car ce sont les deux éléments d’information nécessaires pour cette tâche. Dans la section param(), nous définirons deux variables et définirons leur type comme System.IO.FileInfo. La magie de définir cela comme le type de variable au lieu de simplement la chaîne par défaut est que lorsque vous utilisez cette fonction à l’invite PowerShell, il saura que vous recherchez un chemin. À son tour, vous obtenez toute l’awesomeness IntelliSense ou de complétion d’onglet qui rend les choses plus faciles

Powershell-Partie1

Maintenant, une ligne comme celle-ci automatisera ce qui était autrefois un processus manuel. Si ce processus est répété des centaines de fois par an, le retour sur investissement dans le temps passé à créer ce script se paiera rapidement de lui-même.

Powershell-Partie1

Résumé de ce que nous avons appris

 L’intention de ce blog est d’utiliser un outil de ligne de commande « copier » commun pour automatiser le processus de copie manuelle de ces fichiers. Nous avons appris que tout ce que vous pouvez faire dans une ligne de commande, vous pouvez le faire dans les scripts PowerShell. Il vaut la peine de savoir comment effectuer une tâche à partir de la ligne de commande, car vous pourriez vous faire gagner beaucoup de temps en incorporant ce que vous savez sur la ligne de commande dans un script PowerShell. Nous en avons appris un peu plus sur les deux différents outils pour engager PowerShell appelé l’invite PowerShell et le PowerShell ISE (Integrated Scripting Environment). Read-Host est un outil puissant pour introduire des retards contrôlés, inviter les utilisateurs à obtenir des informations ou inviter les utilisateurs à effectuer une étape manuelle qui sera ensuite entièrement automatisée. Tab Completion et IntelliSense aident à enregistrer les frappes et vous permettent d’explorer des objets de manière interactive. Nous avons appris à utiliser test-path pour affirmer qu’un chemin existe et l’avons incorporé dans une boucle do while pour valider une entrée de lecture-hôte. Nous ne sommes pas entrés dans la création de fonctions en détail, mais nous avons conclu le blog en convertissant notre script en une fonction. Nous avons créé des paramètres du type System.IO.FileInfo qui, à son tour, nous aide à utiliser la complétion d’onglets et IntelliSense lors de la saisie des chemins de source et de destination nécessaires.

Jusqu’à la prochaine

Nous allons automatiser davantage le processus d’initialisation d’une bibliothèque d’extension Acumatica en une fonction. L’élément suivant que nous voulons automatiser est de rediriger la solution pour envoyer la bibliothèque d’extension dll au répertoire bin de l’instance Acumatica cible. Nous allons entrer dans powershell plus fondamental et comment il peut être utilisé pour charger des fichiers CSV de formulaire de données ou XML. Notre objectif sera de mettre à jour les fichiers XML du projet et de la solution afin de rediriger où les choses iront pendant le processus de construction.

Joyeux script!

 

Auteur du blog

Robert est le développeur Acumatica en chef chez APS Payments, une société DE REMBOURSEMENT, un fournisseur de premier plan de solutions de paiement intégrées B2B omnicanal. La passion de Robert pour la programmation a commencé à l’école primaire en faisant des projets sur l’Apple IIe, et il a vérifié tous les livres de bibliothèque qu’il pouvait sur le sujet pour apaiser son appétit vorace pour apprendre à coder. Robert a commencé à travailler avec un logiciel de plate-forme ERP en 2003, où il a automatisé les tâches de distribution sur une application d’écran vert appelée PICK, qu’il a ensuite remplacée par Sage 100. Depuis lors, il a étendu son expertise à de nombreux autres systèmes ERP, y compris Acumatica. Avant de rejoindre APS Payments, Robert a travaillé pour Accounting Systems, Inc. (ASI Focus), où il était développeur de logiciels ERP. En dehors de la programmation, Robert est passionné par la danse, où vous le trouverez passer beaucoup de temps à la recherche de toute occasion de West Coast Swing, Hustle, Salsa, ainsi que de nombreux autres styles de danse. Dans ses temps libres, il aime souder ensemble des drones de course et des projets de domotique IoT. Robert fait du bénévolat dans un espace de création d’une école secondaire locale et a donné des cours sur la programmation d’Arduinos et d’autres conseils de développement IoT comme le Raspberry Pi.

Recevez des mises à jour de blog dans votre boîte de réception.