1
0
Bifurcation 0
miroir de https://github.com/PAPAMICA/Wiki-Tech.io.git synchronisé 2024-11-07 10:10:26 +01:00
Wiki-Tech.io/Scripting/Powershell.html
2021-05-09 15:49:34 +00:00

118 lignes
7,3 Kio
HTML
Brut Annotations Historique

Ce fichier contient des caractères Unicode ambigus.

Ce fichier contient des caractères Unicode qui peuvent être confondus avec d'autres caractères. Si vous pensez que c'est intentionnel, vous pouvez ignorer cet avertissement. Utilisez le bouton Échappe pour les dévoiler.

<!--
title: Powershell
description:
published: true
date: 2021-05-09T15:49:32.990Z
tags:
editor: ckeditor
dateCreated: 2021-05-08T14:42:07.092Z
-->
<h1>Définition</h1>
<p>PowerShell est un langage script fondé sur la programmation orientée objet. Le logiciel PowerShell &nbsp;est l'interpréteur de l’interface en ligne de commande de l'environnement de développement Windows PowerShell.</p>
<p>&nbsp;</p>
<h2>Les commandes ou applets de commande (cmdlet)</h2>
<p>elles sont composées d’une paire de la forme “verbe ”-“nom” destiné à en faciliter la mémorisation.</p>
<p>exemple :</p>
<pre><code class="language-plaintext">get-service</code></pre>
<p>get = verbe</p>
<p>service = nom</p>
<p>&nbsp;</p>
<h2>Les variables</h2>
<p>Une variable PowerShell est un emplacement de stockage provisoire en mémoire destiné à recueillir une valeur, un objet ou une collection d’objets.<br>Les variables sont généralement nommées, et leurs noms sont toujours précédés d’un symbole “$“<br>Les variables sont automatiquement “typées” lors de l’affectation de valeur (si elles ne sont pas déclarées au préalable.)</p>
<p>exemple :</p>
<pre><code class="language-plaintext">$variable = une valeur </code></pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>Le pipeline</h2>
<p>Le pipeline, symbolisée par le caractère “<strong>|</strong>” (<strong>AltGr</strong> + <strong>6</strong>) permet d'exécuter plusieurs commandes à la suite.</p>
<p>exemple :&nbsp;</p>
<pre><code class="language-plaintext">get-process | Sort-Object CPU</code></pre>
<p>Dans ce cas précis, la commande <code>sort-object</code> tri les processus par utilisation de Cpu</p>
<p>&nbsp;</p>
<h2>L' aide</h2>
<p>Sous PowerShell la commande <code>get-help</code> permet d'afficher la fonction et des exemples d'une commande.</p>
<pre><code class="language-plaintext">get-help &lt;la commande&gt;</code></pre>
<p>Mais avant d'utiliser cette commande il faut faire une mise à jour de l'aide de PowerShell avec la commande</p>
<pre><code class="language-plaintext"> update-help</code></pre>
<p>cette commande permet d'avoir une aide manière très générale si on souhaite obtenir plus d'information on peut ajouter l'option<code> -detailed</code></p>
<pre><code class="language-plaintext">get-help &lt;la commande&gt; -detailed</code></pre>
<p>On peut aussi lister des exemples d'utilisation d'une commande avec l'option <code>-examples</code></p>
<pre><code class="language-plaintext">get-help &lt;la commande&gt; -examples</code></pre>
<p>Il arrive parfois que l'aide renvoyée sous PowerShell ne soit pas complète malgré un <code>update-help.</code></p>
<p>Pour cela il y a possibilité d'aller consulter directement l'aide en ligne avec l'option<code> -online&nbsp;</code></p>
<pre><code class="language-plaintext">get-help &lt;la commande&gt; -online</code></pre>
<p>&nbsp;</p>
<p>Si je veux de l'aide sur la syntaxe d'une commande, PowerShell indique par “<strong>[ ]</strong>” si le paramètre est obligatoire.</p>
<p>par exemple si je veux de l'aide sur la syntaxe de commande <code>get-childitem</code>&nbsp;</p>
<pre><code class="language-plaintext">get-help get-childitem</code></pre>
<p>on peut constater dans la capture que certains paramètres sont obligatoires.</p>
<figure class="image image_resized" style="width:88.82%;"><img src="/capture4.png"></figure>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>La commande <code>get-help</code> permet également de rechercher une commande si, par exemple, je souhaite trouver une commande qui gère les services.</p>
<pre><code class="language-plaintext">get-help service</code></pre>
<p>voici ce que renvoie la commande, on peut voir les commandes qui contiennent le mot service.</p>
<figure class="image image_resized" style="width:86.32%;"><img src="/capture1.png"></figure>
<p>&nbsp;</p>
<p>Une autre fonction de l'aide permet d'avoir des informations sur un sujet précis.</p>
<p>pour lister ces sujet je vais utiliser l'option<code> about_*</code>&nbsp;</p>
<pre><code class="language-plaintext">get-help about_*</code></pre>
<p>Par exemple, si je veux de l'aide au sujet de pipeline</p>
<pre><code class="language-plaintext">get-help about_pipeline</code></pre>
<p>voici ce que renvoie la commande</p>
<figure class="image image_resized" style="width:84.46%;"><img src="/capture3.png"></figure>
<p>&nbsp;</p>
<h2>Les providers</h2>
<p>&nbsp;</p>
<p>Dans PowerShell, &nbsp;les providers permettent d'accéder par exemple à la base de registre, aux fichiers système à l'environnement etc…</p>
<ul>
<li>Base de Registre {HKLM, HKCU}</li>
<li>Alias {alias}</li>
<li>Environnement {env}</li>
<li>FileSystem {C,D,E,F}</li>
<li>Function {Function}</li>
<li>variable {Variable}</li>
</ul>
<p>L'avantage c'est que je vais pouvoir parcourir ces éléments comme si c'était un répertoire.</p>
<p>Exemple, si je veux parcourir la base de registre il suffit de taper <code>cd hklm :</code> et je me retrouve dans la base de registre et je peux la parcourir comme si c'était un filesystem et revenir dans mon arborescence Windows avec un <code>cd c:</code>.</p>
<figure class="image"><img src="/capture5.png"></figure>
<p>J'ai ensuite la possibilité de créer ou de consulter des entrées dans la base de registre comme si c'était un filesystem et utiliser les commandes de base&nbsp;</p>
<p>exemple avec la commande <code>get-childitem</code> ,je vais pouvoir consulter tout la base de registre de mon hkey local machine</p>
<figure class="image"><img src="/capture6.png"></figure>
<p>&nbsp;</p>
<h2>Création d'un menu sous Powershell</h2>
<p>Voici un exemple de menu qu'il est possible de faire avec la méthode suivante :</p>
<figure class="image"><img src="/capture2.png"></figure>
<p>&nbsp;</p>
<h2>Principe de fonctionnement</h2>
<p>Nous avons besoin de déclarer une variable qui va servir en quelque sorte de bouton “allumé” ou “éteins” : <code>$continue = $true</code></p>
<p>Avec cette variable j'utilise une boucle pour permettre de laisser en permanence l'affichage :&nbsp;</p>
<pre><code class="language-plaintext">while (true){
&lt;le menu avec des write-host&gt;
}</code></pre>
<p>Puis une seconde variable pour stocker mon choix avec <code>$choix = read-host “faire un choix”</code></p>
<p>Suivant l'état de ce choix le script sortira de la boucle <code>while</code> et cela provoquera soit une action du script soit une sortie du script avec switch ($choix).</p>
<p>Pour sortir du script si je fait le choix <i>x</i>’ le script passe la variable <code>$continue</code> à <code>false</code> ce qui aura pour effet d'arrêter la boucle while.</p>
<p>le <code>switch </code>va permettre d'indexer les choix ,de les lister et d'exécuter les commandes.</p>
<p>la commande <code>default </code>permet de renvoyer un message d'avertissement si je rentre un choix qui n'est pas dans le menu.</p>
<p>&nbsp;</p>
<h2>Exemple</h2>
<pre><code class="language-plaintext">$continue = $true
while (continue){
write-host “----------------------MON TITRE -----------------------”
write-host “1. mon action 1”
write-host "2. mon action 2"
write-host "x. exit"
write-host"-------------------------------------------------------------------"
$choix = read-host “faire un choix :”
switch ($choix){
1{commande de mon action 1}
2{commande de mon action 2}
x’ {$continue= $false}
default {Write-Host "Choix invalide"-ForegroundColor Red}
}
}
</code></pre>
<p>&nbsp;</p>