{"id":59,"date":"2024-04-22T20:22:41","date_gmt":"2024-04-22T18:22:41","guid":{"rendered":"https:\/\/kev-it.fr\/?p=59"},"modified":"2024-04-22T20:22:42","modified_gmt":"2024-04-22T18:22:42","slug":"creer-son-module-powershell","status":"publish","type":"post","link":"https:\/\/kev-it.fr\/index.php\/2024\/04\/22\/creer-son-module-powershell\/","title":{"rendered":"Cr\u00e9er son module PowerShell"},"content":{"rendered":"\n<p>Est-ce vous avez d\u00e9j\u00e0 eu l&rsquo;impression de passer votre temps \u00e0 r\u00e9utiliser les m\u00eame fonctions custom que vous avez cr\u00e9\u00e9es dans chacun de vos scripts ? <\/p>\n\n\n\n<p>Et l\u00e0, vous vous posez la question terrible : <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>la version la plus r\u00e9cente\/aboutie de ma fonction est dans quelle script ? <\/li>\n\n\n\n<li>Quels scripts (combien) dois-je mettre \u00e0 jour pour corriger un bug dans cette fonction que j&rsquo;utilise tout le temps ?<\/li>\n<\/ul>\n\n\n\n<p>Et bien cela signifie qu&rsquo;il est temps pour vous de cr\u00e9er votre propre module PowerShell !<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Qu&rsquo;est-ce qu&rsquo;un module PowerShell ?<\/h2>\n\n\n\n<p>Pour faire simple, un module PowerShell est un ensemble de cmd-let regroup\u00e9es autour d&rsquo;un th\u00e8me, d&rsquo;un produit ou d&rsquo;un usage. Le module s&rsquo;installe dans l&rsquo;arborescence de PowerShell afin d&rsquo;\u00eatre utilisable depuis n&rsquo;importe quel prompt ou script PowerShell.<\/p>\n\n\n\n<p>Les modules PowerShell sont souvent compil\u00e9s sous forme de DLL, mais il peuvent aussi \u00eatre \u00e9crits en PowerShell. Leur installation peut \u00eatre manuelle, mais en g\u00e9n\u00e9ral ils sont publi\u00e9s sur la <a href=\"https:\/\/www.powershellgallery.com\/\">PowerShell Gallery<\/a>  afin de permettre leur installation automatiquement avec la cmd-let \u00ab\u00a0Install-Module\u00a0\u00bb.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Comment cr\u00e9er son module PowerShell ?<\/h2>\n\n\n\n<p>En fait, rien de plus simple \ud83d\ude42<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>On cr\u00e9\u00e9 un fichier de script PowerShell au format PSM1 dans lequel on va placer nos cmd-let qui ne sont autre que des fonctions \u00e9crites en PowerShell<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\nfunction get-test1 {\n    return &quot;test1&quot;\n}\nfunction get-test2 {\n    return &quot;test2&quot;\n}\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li>On cr\u00e9\u00e9 un fichier de description au format PSD1 dans lequel on d\u00e9crit le module et les cmd-let qui seront accessible dans le module (on peut en masquer certaines pour usage interne)<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n@{\n# Module de script ou fichier de module binaire associ\u00e9 \u00e0 ce manifeste\nRootModule = 'testmodule.psm1'\n\n# Num\u00e9ro de version de ce module.\nModuleVersion = '1.0.1'\n\n# ID utilis\u00e9 pour identifier de mani\u00e8re unique ce module\nGUID = 'aaaaaaaa-bbbb-cccc-ddddd-eeeeeeeeeeee'\n\n# Auteur de ce module\nAuthor = 'Kevin Oster'\n\n# Soci\u00e9t\u00e9 ou fournisseur de ce module\nCompanyName = 'Kev-IT'\n\n# D\u00e9claration de copyright pour ce module\nCopyright = '(c) 2024 Kevin. All rights reserved.'\n\n# Description de la fonctionnalit\u00e9 fournie par ce module\nDescription = 'test module'\n\n# Version minimale du moteur Windows PowerShell requise par ce module\nPowerShellVersion = '5.0'\n\n# Fonctions \u00e0 exporter \u00e0 partir de ce module. Pour de meilleures performances, n\u2019utilisez pas de caract\u00e8res g\u00e9n\u00e9riques et ne supprimez pas l\u2019entr\u00e9e. Utilisez un tableau vide si vous n\u2019avez aucune fonction \u00e0 exporter.\nFunctionsToExport = 'get-test1','get-test2'\n}\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Comment l&rsquo;utiliser ?<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">M\u00e9thode 1 : en mode manuel<\/h3>\n\n\n\n<p>Aller dans le r\u00e9pertoire des modules PowerShell de votre profil utilisateur (%USERPROFILE%\\Documents\\WindowsPowerShell\\modules) et cr\u00e9ez un r\u00e9pertoire au nom de votre module. Placez-y les fichiers du module.<br>Ensuite vous pouvez l&rsquo;utiliser d\u00e8s que vous l&rsquo;aurez import\u00e9 avec la commande<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\nimport-module &lt;my-module-name&gt;\n<\/pre><\/div>\n\n\n<p>C&rsquo;est rapide et efficace, mais pas forc\u00e9ment pratique pour l&rsquo;industrialisation &#8230;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">M\u00e9thode 2 : via la PowerShell Gallery<\/h3>\n\n\n\n<p>Premi\u00e8re \u00e9tape : cr\u00e9er un compte sur la PowerShell Gallery et cliquez sur \u00ab\u00a0Sign in\u00a0\u00bb. Il faudra utiliser un compte Microsoft personnel ou un compte Entra ID d&rsquo;entreprise.<\/p>\n\n\n\n<p>Seconde \u00e9tape : cr\u00e9er une cl\u00e9 d&rsquo;API \u00e0 partir de votre compte pour uploader le module. Pour cela, il suffit d&rsquo;aller dans la rubrique <a href=\"https:\/\/www.powershellgallery.com\/account\/apikeys\">API Keys<\/a> de votre compte et cr\u00e9er une cl\u00e9.<\/p>\n\n\n\n<p>Troisi\u00e8me \u00e9tape : uploader votre module PowerShell \u00e0 l&rsquo;aide de la commande suivante<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\nPublish-Script -Path &lt;scriptPath&gt; -NuGetApiKey &lt;apiKey&gt;\n<\/pre><\/div>\n\n\n<p>Et finalement, vous pouvez installer votre script depuis n&rsquo;importe quelle machine avec la commande<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ninstall-module -name modulename\n<\/pre><\/div>\n\n\n<p>Note : vous pouvez m\u00eame utiliser votre module depuis un Runbook Azure Automation en installant votre module depuis le portal Azure sur votre Automation Account \ud83d\ude42 Elle est pas belle la vie ?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Est-ce vous avez d\u00e9j\u00e0 eu l&rsquo;impression de passer votre temps \u00e0 r\u00e9utiliser les m\u00eame fonctions custom que vous avez cr\u00e9\u00e9es dans chacun de vos scripts ?<br \/>\nEt bien cela signifie qu&rsquo;il est temps pour vous de cr\u00e9er votre propre module PowerShell !<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[8,10],"class_list":["post-59","post","type-post","status-publish","format-standard","hentry","category-dev","tag-powershell","tag-tips"],"_links":{"self":[{"href":"https:\/\/kev-it.fr\/index.php\/wp-json\/wp\/v2\/posts\/59","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kev-it.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kev-it.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kev-it.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kev-it.fr\/index.php\/wp-json\/wp\/v2\/comments?post=59"}],"version-history":[{"count":3,"href":"https:\/\/kev-it.fr\/index.php\/wp-json\/wp\/v2\/posts\/59\/revisions"}],"predecessor-version":[{"id":64,"href":"https:\/\/kev-it.fr\/index.php\/wp-json\/wp\/v2\/posts\/59\/revisions\/64"}],"wp:attachment":[{"href":"https:\/\/kev-it.fr\/index.php\/wp-json\/wp\/v2\/media?parent=59"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kev-it.fr\/index.php\/wp-json\/wp\/v2\/categories?post=59"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kev-it.fr\/index.php\/wp-json\/wp\/v2\/tags?post=59"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}