15Jul

Geek School: Apprenez à automatiser Windows avec PowerShell

Dans cette édition de Geek School, nous vous aidons à comprendre le puissant langage de script PowerShell intégré à Windows et extrêmement utile dans un environnement informatique.

Bien que cette série ne soit pas structurée autour d'un examen, l'apprentissage de PowerShell est l'une des choses les plus importantes que vous pouvez faire en tant qu'administrateur réseau, alors s'il y a une chose que vous voulez apprendre pour aider votre carrière informatique, c'est tout. De plus, c'est très amusant.

Introduction

PowerShell est l'outil d'automatisation le plus puissant que Microsoft a à offrir, et c'est à la fois un shell et un langage de script.

Veuillez noter que cette série est basée sur PowerShell 3, livré avec Windows 8 et Server 2012. Si vous utilisez Windows 7, veuillez télécharger la mise à jour de PowerShell 3 avant de continuer.

Découvrez la console et l'ISE

Il existe deux façons d'interagir directement avec PowerShell, la console et l'environnement de script intégré, également connu sous le nom d'ISE.L'ISE s'est considérablement améliorée par rapport à la version hideuse fournie avec PowerShell 2 et peut être ouverte en appuyant sur la combinaison clavier Win + R pour faire apparaître une boîte d'exécution, puis en tapant powershell_ise et en appuyant sur Entrée.

Comme vous pouvez le voir l'ISE arbore une vue divisée afin que vous puissiez rapidement scripter tout en étant capable de voir le résultat dans la moitié inférieure de l'ISE.La moitié inférieure de l'ISE, où les résultats de votre script sont imprimés, peut également être utilisé comme une invite REPL - tout comme l'invite de commande. Le v3 ISE a finalement ajouté le support pour intellisense dans le volet de script ainsi que la console interactive.

Vous pouvez également interagir avec PowerShell en utilisant la console PowerShell, ce que je vais utiliser pour la plupart de cette série. La console PowerShell se comporte à peu près comme l'invite de commande - vous entrez simplement des commandes et crache les résultats. Pour ouvrir la console Windows PowerShell, appuyez à nouveau sur la combinaison de touches Win + R pour ouvrir une boîte d'exécution et tapez powershell, puis appuyez sur Entrée.

Les invites REPL comme ceci sont géniales pour la gratification instantanée: vous entrez une commande et vous obtenez des résultats. Alors que la console n'offre pas intellisense, elle offre quelque chose appelé l'achèvement de tabulation qui fonctionne de la même manière - il suffit de commencer à taper une commande et appuyez sur tab pour faire défiler les correspondances possibles.

Utilisation du système d'aide

Dans les versions antérieures de PowerShell, les fichiers d'aide étaient inclus lors de l'installation de Windows. C'était une bonne solution pour la plupart mais nous a laissé un problème important. Lorsque l'équipe d'assistance de PowerShell a dû cesser de travailler sur les fichiers d'aide, les développeurs PowerShell étaient encore occupés à coder et à apporter des modifications. Cela signifie que lorsque PowerShell a été livré, les fichiers d'aide étaient incorrects car ils ne contenaient pas les modifications les plus récentes apportées au code. Pour résoudre ce problème, PowerShell 3 ne contient aucun fichier d'aide et inclut un système d'aide actualisable. Cela signifie avant de faire quoi que ce soit, vous voulez télécharger les derniers fichiers d'aide. Vous pouvez le faire en ouvrant une console PowerShell et en exécutant:

Update-Help

Félicitations pour l'exécution de votre première commande PowerShell! La vérité est que la commande Update-Help a beaucoup plus d'options que simplement l'exécuter, et pour les voir, nous allons vouloir voir l'aide pour la commande. Pour afficher l'aide d'une commande, transmettez simplement le nom de la commande pour laquelle vous souhaitez obtenir de l'aide sur le paramètre Name de la commande Get-Help, par exemple:

Get-Help -Nom Mise à jour -Aide

Vous vous demandez probablement comment interprétertout ce texte de toute façon, je veux dire pourquoi il y a deux tas d'informations dans la section de la syntaxe et pourquoi y a-t-il autant de parenthèses partout? Première chose en premier: la raison pour laquelle il y a deux blocs d'information dans la section de syntaxe est parce qu'ils représentent différentes manières d'exécuter la commande. Ce sont techniquement appelés ensembles de paramètres et vous ne pouvez en utiliser qu'un seul à la fois( vous ne pouvez pas mélanger les paramètres de différents ensembles).Dans la capture d'écran ci-dessus, vous pouvez voir que le jeu de paramètres supérieur a un paramètre SourcePath tandis que le bas ne le fait pas. La raison étant que vous utiliseriez le jeu de paramètres supérieur( celui qui inclut SourcePath) si vous étiez en train de mettre à jour vos fichiers d'aide d'une autre machine sur votre réseau qui les avait déjà téléchargés, sans avoir besoin de spécifier un chemin source. Je voulais juste récupérer les derniers fichiers de Microsoft.

Pour répondre à la deuxième question, il y a une certaine syntaxe que les fichiers d'aide suivent et que voici:

  • Les crochets entourant un nom de paramètre et son type indiquent qu'il s'agit d'un paramètre facultatif et que la commande fonctionnera sans problème.
  • Les crochets entourant le nom des paramètres signifient que les paramètres sont des paramètres positionnels.
  • La chose à droite d'un paramètre dans les parenthèses inclinées vous indique le type de données attendu par le paramètre.

Alors que vous devriez apprendre à lire la syntaxe du fichier d'aide, si vous n'êtes jamais sûr d'un paramètre particulier, ajoutez -Full à la fin de votre commande get help et faites défiler jusqu'à la section paramètres, où il vous en dira un peu plus surchaque paramètre.

Get-Help -Nom Mise à jour-Aide -Full

La dernière chose que vous devez savoir sur le système d'aide est comment vous pouvez l'utiliser pour découvrir des commandes, ce qui est vraiment très facile. Vous voyez, le PowerShell accepte les caractères génériques presque partout, donc les utiliser avec la commande Get-Help vous permet de découvrir facilement les commandes. Par exemple, je suis à la recherche de commandes qui traitent des services Windows:

Get-Help -Name * service *

Bien sûr, toutes ces informations peuvent ne pas être utiles, mais croyez-moi, prenez le temps et apprenez comment utiliserle système d'aide. Il est très pratique, même pour les scripteurs avancés qui font cela depuis des années.

Sécurité

Ce ne serait pas une bonne introduction sans mentionner la sécurité.La plus grande inquiétude pour l'équipe PowerShell est que PowerShell devient le dernier et le plus grand point d'attaque pour les kiddies de script. Ils ont mis en place quelques mesures de sécurité pour s'assurer que cela ne se produise pas, alors jetons un coup d'oeil à eux.

La forme de protection la plus élémentaire vient du fait que l'extension de fichier PS1( l'extension utilisée pour désigner un script PowerShell) n'est pas enregistrée avec un hôte PowerShell, elle est en fait enregistrée avec Notepad. Cela signifie que si vous double-cliquez sur un fichier, il s'ouvrira avec le bloc-notes au lieu de fonctionner.

Deuxièmement, vous ne pouvez pas exécuter de scripts à partir du shell en tapant simplement le nom du script, vous devez spécifier le chemin d'accès complet au script. Donc, si vous voulez exécuter un script sur votre lecteur C, vous devrez taper:

C: \ runme.ps1

Ou si vous êtes déjà à la racine du lecteur C, vous pouvez utiliser ce qui suit:

. \ Runme.ps1

Enfin, PowerShell a quelque chose appelé les politiques d'exécution, qui vous empêchent d'exécuter tout ancien script. En fait, par défaut, vous ne pouvez pas exécuter de scripts et vous devez modifier votre stratégie d'exécution si vous souhaitez être autorisé à les exécuter. Il existe 4 règles d'exécution notables:

  • restreint: Il s'agit de la configuration par défaut dans PowerShell. Ce paramètre signifie qu'aucun script ne peut être exécuté, quelle que soit sa signature. La seule chose qui peut être exécutée dans PowerShell avec ce paramètre est une commande individuelle.
  • AllSigned: Ce paramètre autorise l'exécution de scripts dans PowerShell. Le script doit avoir une signature numérique associée d'un éditeur approuvé.Il y aura une invite avant d'exécuter les scripts auprès des éditeurs approuvés.
  • RemoteSigned : Ce paramètre permet l'exécution de scripts, mais nécessite que le script et les fichiers de configuration téléchargés depuis Internet disposent d'une signature numérique associée provenant d'un éditeur approuvé.Les scripts exécutés à partir de l'ordinateur local n'ont pas besoin d'être signés. Il n'y a aucune invite avant d'exécuter le script.
  • non restreint: Ceci permet l'exécution de scripts non signés, y compris tous les scripts et fichiers de configuration téléchargés depuis Internet. Cela inclura les fichiers d'Outlook et de Messenger. Le risque ici est l'exécution de scripts sans signature ni sécurité.Nous avons recommencé que vous jamais nous ce cadre.

Pour voir à quoi correspond votre politique d'exécution actuelle, ouvrez une console PowerShell et tapez:

Get-ExecutionPolicy

Pour ce cours et la plupart des autres circonstances, la stratégie RemoteSigned est la meilleure, alors allez-y et changez votre politique.

Remarque: Cela doit être fait à partir d'une console PowerShell élevée.

Set-ExecutionPolicy RemoteSigned

C'est tout pour les gens de l'époque, à demain pour encore plus de plaisir avec PowerShell.

Avertissement: Le terme approprié pour une commande PowerShell est une cmdlet, et à partir de maintenant nous utiliserons cette terminologie correcte. Il m'a semblé plus approprié de les appeler des commandes pour cette introduction.

Si vous avez des questions, vous pouvez me tweeter @taybgibb, ou simplement laisser un commentaire.