Dites bonjour à PowerShell

PowerShell est en développement depuis plus de dix ans. Microsoft continue d'investir dans son développement et son adoption. Ces investissements ont transformé la facilité et la robustesse avec lesquelles les développeurs et les administrateurs peuvent automatiser les tâches Windows..


Qu'est-ce que PowerShell??

PowerShell résout les problèmes d'administration et d'adaptabilité en intégrant de manière transparente le .NET Framework.

PowerShell est le framework d’automatisation des tâches de Microsoft, composé d’un shell de ligne de commande, d’un environnement de script intégré (ISE), d’un langage de script basé sur .NET Framework, d’une API vous permettant d’héberger PowerShell dans vos applications .NET. plate-forme d'automatisation. PowerShell fournit un accès complet à COM et WMI, vous permettant ainsi d'exécuter des tâches sur des systèmes Windows locaux et distants..

PowerShell est une nouvelle plate-forme d'automatisation en ce sens qu'elle résout les problèmes d'administration et d'adaptabilité en intégrant de manière transparente le .NET Framework. C'est bon pour les développeurs, les administrateurs, les testeurs et plus. Basé sur .NET, cet outil permet de réduire les coûts, tout en offrant aux développeurs et aux administrateurs un moyen simple et adapté aux entreprises d’automatiser, de mesurer et d’améliorer tous leurs processus..


Suivre

Dans cette introduction, je soulignerai une partie de la profondeur et de l'ampleur que PowerShell apporte à la table. Des choses comme le pipeline d’objets qui change le jeu, le REPL (lecture, évaluation, boucle d’impression), l’intégration .NET et plus encore..

Si vous utilisez Windows 7 ou 8, PowerShell est déjà installé. Téléchargez PowerShell v3 pour Windows 7 ici. Vous avez besoin de Windows 7 SP1 et le téléchargement fonctionne également pour Windows 2008 R2 SP1 et Windows 2008 SP2. Si vous utilisez Vista, XP ou Windows 2003, vous devez vous installer ici pour PowerShell v2..


À quoi ça sert? Absolument Tout!

Du déploiement de plusieurs ressources sur Azure à la gestion de vos versions de logiciel pour une intégration continue, en accédant à des services Web ou à des points de terminaison REST. PowerShell vous a couvert et fournit tellement plus.

  • Tranche et dés texte, XML, CSV et JSON avec facilité
  • Intégrez PowerShell pour fournir des fonctionnalités de script pour vos applications C #
  • Créez des applications graphiques cinq à dix fois plus rapidement avec moins de code
  • Tirez parti des capacités de PowerShell pour travailler avec Internet
  • Interagissez avec les DLL et créez des objets, affichez automatiquement les propriétés et les méthodes d'appel dans les sessions interactives en direct
  • Construire des langages et des vocabulaires spécifiques à un domaine (DSL) pour exprimer les solutions plus clairement
  • Travailler avec Microsoft Office via le COM (Component Object Model)
  • Fonctionnalités de PowerShell v3

Démarrer PowerShell

Qu'est-ce qu'une cmdlet? Une applet de commande est la pierre angulaire de PowerShell et s'exprime sous la forme d'une paire ver / nom, ce qui les aide à se décrire de manière autonome. Par exemple:

PS C: \> Get-Date dimanche, 26 mai 2013 08:46:16

PowerShell inclut des centaines d'applets de commande de base et vous pouvez écrire votre propre.

Mémoriser deux cmdlets

PowerShell facilite la découverte. Chaque fois que vous accédez à l'écran bleu de PowerShell et que vous ne savez pas quoi faire, utilisez Get-Command.

le Get-Command La cmdlet obtient toutes les commandes installées sur l'ordinateur, y compris les cmdlets, les alias, les fonctions, les flux de travail, les filtres, les scripts et les applications..

En essence, Get-Command vous montre tout ce que vous pouvez faire dans la session PowerShell en cours.

Get-Command

Get-Command prend en charge les caractères génériques. Disons que je veux voir toutes les applets de commande qui ont le verbe, Invoquer?

Get-Command Invoke *

Voici ce que je reçois après avoir appuyé sur entrer.

Nom du type de commande Nom du module ----------- ---- ---------- Fonction Invoke-AsWorkflow PSWorkflowUtility Fonction Invoke-Background ShowUI Fonction Invoke-BrowserControl AutoBrowse Fonction Invoke-Line isepack Fonction Invoke -Line PowerShellPack Fonction Invoke-Office365 Fonction Pipeworks Fonction Invoke-Pester Fonction Invoke-WebCommand Pipeworks Cmdlet Invoke-CimMethod CimCmdlets Cmdlet Invoke-Command Microsoft.PowerShell.Core Cmdlet Invoke-CimMethod Invocation-Exécution Microsoft.PowerShell.h Cmdlet Invoke-Item Microsoft.PowerShell.Management Cmdlet Invoke-RestMethod Microsoft.PowerShell.Utility Cmdlet Invoke-TroubleshootingPack DépannagePack Cmdlet Invoke

Quelles sont les applets de commande se terminant par le nom Item?

Get-Command * -Item

Notez que vous commencez à voir d’autres verbes, comme Effacer, Nouveau, Supprimer et Définir..

Nom du type de commande Nom du module ----------- ---- ---------- Cmdlet Clear-Item Cmdlet Microsoft.PowerShell.Management Cmdlet Copy-Item Cmdlet Microsoft.PowerShell.Management Get-Item Microsoft.PowerShell.Management Cmdlet Invoke-Item Cmdlet Microsoft.PowerShell.Management Déplacement-Item Microsoft.PowerShell.Management Cmdlet Nouvel-Item Microsoft.PowerShell.Management Cmdlet Supprimer-Item Microsoft.PowerShell.Management Cmdlet Renommer-Item Microsoft.PowerShell.d Cmdlet Set-Item Microsoft.PowerShell.Management

Ensuite, j'utiliserai quelques applets de commande pour résumer ce qui est disponible dans ma session sur l'une de mes boîtes lorsque je lance la console PowerShell..

Get-Command | Groupe CommandType -NoElement | Triez le nombre - Décroissant

J'appelle Get-Command, groupez-le et triez-le. Ici, je peux voir que j'ai plus de 1000 cmdlets avec lesquels travailler. J'utilise PowerShell v3 avec des modules supplémentaires installés; votre kilométrage peut donc varier.

Nom du compte ----- ---- 2487 Fonction 1184 Cmdlet 38 Alias ​​1 Filtre

De quels modules proviennent ces applets de commande? Nous pouvons répondre à cette question de la manière suivante:

Get-Command -CommandType Cmdlet | Groupe NomModule -NoElement | Triez le nombre - Décroissant

Je peux accomplir beaucoup de choses avec PowerShell.

Nom du compte ----- ---- 379 ShowUI 164 Hyper-V 157 Azure 92 Microsoft.PowerShell.Utility 82 Microsoft.PowerShell.Management 78 WebAdministration 55 Microsoft.PowerShell.Core 22 Dim 18 International 17 PKI 16 PSScheduledJob 13 Microsoft. WSMan.Management 12 CimCmdlets 10 Microsoft.PowerShell.Security 9 TrustedPlatformModule 8 BitsTransfer 8 MsDtc 6 Pipeworks 6 Kds 5 AppLocker 5 SecureBoot 5 Microsoft.PowerShell.Diagnostics 4 NetSecurity 4 Appx 3 WindowsError 2

Obtenir de l'aide

Obtenir de l'aide fait exactement cela, il affiche une aide pour la cmdlet sur laquelle vous voulez en savoir plus. Non seulement il est facile d’obtenir de l’aide, il est également facile de créer / inclure de l’aide pour les applets de commande / fonctions avancées que vous développez, un sujet pour un autre article. Avoir de l'aide à portée de main est un gain de temps considérable.

Get-Help Invoke-Command

Voici une version abrégée de la sortie.

NAME Get-Process SYNOPSIS Obtient les processus en cours d'exécution sur l'ordinateur local ou un ordinateur distant. SYNTAX Get-Process [[-Name] ] [-Nom de l'ordinateur ] [-FileVersionInfo []] [-Module []] [] Get-Process [-ComputerName ] [-FileVersionInfo []] [-Module []] -Id  [] Get-Process [-ComputerName ] [-FileVersionInfo []] [-Module []] -InputObject  [] DESCRIPTION L'applet de commande Get-Process obtient les processus sur un ordinateur local ou distant… 

Plus facile encore; il existe un commutateur pour cela sur la cmdlet Get-Help qui vous emmène ici.

Get-Help Get-Process -Online

Vous voulez juste voir des exemples d'utilisation de la cmdlet? Utilisez le -Exemples commutateur. De plus, vous pouvez copier et coller des exemples directement dans la console et les exécuter..

Get-Help Get-Process - Exemples

C'est aussi simple que ça.

NAME Get-Process SYNOPSIS Obtient les processus en cours d'exécution sur l'ordinateur local ou un ordinateur distant. -------------------------- EXEMPLE 1 ---------------------- ---- PS C: \> Get-Process Cette commande permet d'obtenir une liste de tous les processus en cours d'exécution sur l'ordinateur local. Pour obtenir une définition de chaque colonne, voir la section "Remarques supplémentaires" de la rubrique d'aide de Get-Help. -------------------------- EXEMPLE 2 ---------------------- ---- PS C: \> Get-Process winword, explorer | format-list *

PowerShell fonctionne facilement avec les services Web

Le W3C définit un "service Web" comme:

[…] Un logiciel conçu pour prendre en charge l'interaction interopérable de machine à machine sur un réseau. Il possède une interface décrite dans un format pouvant être traité par une machine (en particulier WSDL). D'autres systèmes interagissent avec le service Web de la manière décrite dans sa description à l'aide de messages SOAP, généralement acheminés via HTTP avec une sérialisation XML conjointement avec d'autres normes relatives au Web..

PowerShell simplifie le travail des Webservices en utilisant le New-WebServiceProxy cmdlet. Changer la $ zipcode, lancez-le et obtenez les dernières infos météo.

$ zipCode = "96826" $ svc = New-WebServiceProxy http://wsf.cdyne.com/WeatherWS/Weather.asmx $ result = $ svc.GetCityForecastByZIP ($ zipCode) # Transformez les résultats $ result.ForecastResult | ForEach [PSCustomObject] @ City = $ result.City State = $ result.State Date = $ _. Date.ToString ("d") Description = $ _. Desciption DaytimeHigh = $ _. Temperatures.DaytimeHigh

Résultat

Je stocke l'objet proxy dans $ svc puis appelez le GetCityForecastByZIP méthode, capturant les résultats en $ résultat. En parcourant le tableau ForecastResult, je transforme l'enregistrement sur les données. Notez que le Ville et DayHigh sont à différents niveaux dans la hiérarchie.

La technique que j'utilise crée des paires clé / valeur pour la table de hachage. @ est la syntaxe PowerShell pour une nouvelle table de hachage. En utilisant [PSCustomObject] est un PowerShell accélérateur, ce qui me permet, entre autres, de créer un objet personnalisé à partir d'une table de hachage.

le Weather.asmx le service Web a renvoyé un XML hiérarchique. Dans une poignée de commandes PowerShell, j'ai remodelé les données et les ai formatées (la Date) à ma guise. Pour cet exemple, j'ai choisi de laisser PowerShell l'imprimer. Une fois que j'ai les données dans ma session PowerShell, je suis maintenant connecté à l'écosystème PowerShell et je peux facilement diriger ce tableau d'objets personnalisés vers d'autres applets de commande pour le transférer vers un autre service Web, générer du HTML, le sauvegarder dans un fichier, créer un CSV déposer ou exporter vers une base de données SQL.

Ville État Date Description DaytimeHigh ---- ----- ---- ----------- ----------- Honolulu HI 22/05/2013 Averses 76 Honolulu HI 23/05/2013 Partiellement nuageux 76 Honolulu HI 24/05/2013 Partiellement nuageux 77 Honolulu HI 25/05/2013 Partiellement nuageux 77 Honolulu HI 26/05/2013 Partiellement nuageux 77 Honolulu HI 25/05/2013 Partiellement nuageux 77 Honolulu HI 28/05/2013 Partiellement nuageux 77

Travailler avec CSV, JSON et XML

Le découpage et le découpage de formats de texte est un point fort de PowerShell. Ici, je vais convertir trois formats courants en un objet PowerShell. Pour le CSV et JSON, je vais utiliser le bon ConvertFrom- * cmdlets, et pour le XML, je vais utiliser le accélérateur qui prend XML et crée un XMLDocument.

# Use CSV $ csv = "Nom, Age'r'nJohn, 10" | ConvertFrom-Csv $ csv Nom Age ---- --- John 10 # Utilisez JSON $ json = "Nom: 'Tom', Age: 20" | ConvertFrom-Json $ json Nom Age ---- --- Tom 20 # Utilisez XML $ xml = ([xml] [/ xml] "Harry30") .data.record $ xml Nom Age ---- --- Harry 30 # Combinez les trois $ csv, $ json, $ xml Nom Age ---- --- John 10 Tom 20 Harry 30 # Ajoutez le âges $ csv, $ json, $ xml |% $ sum = 0 $ sum + = $ _. age $ sum 60

Nous avons donc pris trois formats hétérogènes et, à la fin, avons effectué une agrégation sur l'un des champs. J'aurais pu récupérer chacun de ces flux de données à différents endroits, le CSV d'un partage réseau, le JSON pour une requête REST et le XML d'un service Web. Comme je le disais, c’est un bon point pour PowerShell.


Recherche sur Twitter

Utilisons l'API REST de recherche de Twitter en ligne de commande. Je construis l'URL que vous pouvez utiliser dans votre navigateur, puis j'utilise l'applet de commande PowerShell Invoke-RestMethod. Il envoie une demande au service REST et détermine si la réponse est XML ou JSON. Ici, je demande une réponse JSON afin, Invoke-RestMethod convertit les résultats en un tableau d'objets PowerShell. Je les conduis au Sélectionner cmdlet (un alias du verbe-nom Select-Object) en choisissant seulement trois champs. Pensez à cela comme une projection, semblable à LINQ ou SQL.

$ query = "PowerShell" $ url = "http://search.twitter.com/search.json?q=$query" (Invoke-RestMethod $ url) .results | Sélectionnez created_at, from_user_name, text

Résultat

C'est si facile. Découvrez une vidéo que j'ai faite pour la version 2: "PowerShell, ShowUI et l'API Twitter". Une mini application Twitter WPF dans une poignée de PowerShell.

created_at from_user_name text ---------- -------------- ---- sam., 25 mai 2013 vitor pombeiro @brunomlopes a falar sobre Powershell "à minha maneira" sam. , 25 mai 2013 Jeffery Hicks Saviez-vous que l'ISE #PowerShell dispose d'options de démarrage? Samedi, 25 mai 2013 Pat Richard @mwjcomputing Ouais - avait toujours utilisé $ MyInvocation.MyCom sam, 25 mai 2013 Rob Fairman "Script #PowerShell pour effacer les journaux d'événements de Windows" depuis Sam, 25 mai 2013 Jim Priestley Automatisation du déploiement de SharePoint dans Windows #Azure usin sam, 25 mai 2013 VT Technology RT @jangwoo_park: «@ VTTechnology: Export Multiple Virtua sam, 25 mai 2013 Aryan Nava Utilisation de PowerShell pour afficher le site créé le précédent Sam, 25 mai 2013 Aryan Nava PowerShell Astuces pour SQL Server http://t.co/lVW2AY5BYZ sam. 25 mai 2013 Tech Cloud privé Le passage au cloud privé, partie 3 - L'infrastruc Sam, 25 mai 2013 Dr Tom Shinder Le voyage vers le cloud privé, partie 3 â € “ «The Infrastruc Sat, 25 mai 2013 Jacob Daniels RT @tech_faq: Windows Server Manager est basé sur Windows Sat, 25 mai 2013, CodeCruiser 10 Conseils pour SQL Server PowerShell Scripter http: // t.

Compiler C # à la volée dans PowerShell

PowerShell est un langage interprété. Donc, il y aura une pénalité. Ce n’est pas une préoccupation majeure, mais vous aurez parfois besoin de la rapidité d’un langage compilé. PowerShell vous permet de compiler C # à la volée en mémoire dans votre session PowerShell, en utilisant le -TypeDéfinition paramètre sur le Add-Type cmdlet. Noter la ici-chaîne identifié par le @ "" @. Ils sont super utiles pour citer du texte. Je vous encourage à explorer plus avec Add-Type et les règles de citations de PowerShell.

Add-Type -TypeDefinition @ "public class TestInline public long Fibonacci (long n) long a = 0; long b = 1; pour (long idx = 0; idx < n; idx+=1)  long temp = a; a = b; b = temp + b;  return a;   "@ $obj = New-Object TestInline 1… 10 | ForEach  $obj.Fibonacci($_) 

Interaction avec les DLL

Maintenant, disons que je ne vous ai pas donné le code source - juste la DLL compilée. Aucun problème: Add-Type a un -Chemin paramètre.

Add-Type -Path. \ FibLib.dll $ obj = Nouvel objet TestInline 1… 10 | ForEach $ obj.Fibonacci ($ _)

Portez une attention particulière à cela. En utilisant Add-Type Cette méthode permet d’envelopper facilement une DLL .NET provenant de n’importe qui, s’ils n’ont pas déjà fourni d’interface PowerShell. Cela est vrai que la DLL provienne de Microsoft, DELL, Citrix ou d'un autre développeur..


En clôture

Donc ça le fait pour le moment. Souhaitez-vous voir plus de contenu spécifique à Powershell sur Nettuts +? Faites-nous savoir ci-dessous!