PowerShell Cookbook

C’est une liste d’éléments que mes collègues et moi avons trouvés utiles dans notre travail. Il n’est pas destiné à être encyclopédique, mais plutôt un endroit pour enregistrer les choses qu’un débutant trouverait utiles, en particulier les choses qui pourraient prendre beaucoup de temps à comprendre.

Cette page a été commencée avant que O’Reilly ne publie Windows PowerShell Cookbook par Lee Holmes. Je recommande le livre d’O’Reilly, mais cette page n’a aucun rapport avec lui.

Voir aussi les gotchas de PowerShell.

Outline

  • Démarrage/installation
    • Installer PowerShell
    • Installer la bibliothèque Community Extensions
    • Se débarrasser du message « l’exécution des scripts est désactivée »
    • Configurer votre « scripts : » Emplacement du lecteur PowerShell
    • Configurer votre invite de commande
  • Tâches diverses
    • Écrire à l’écran
    • Prompt la saisie de l’utilisateur
    • .

    • Manipuler des dates
    • Envoyer des emails
    • Sommeil
    • Lister un répertoire (récursivement)
    • Tester si un fichier existe
    • Lire les lignes d’un fichier dans un dans un tableau
    • Écrire dans un fichier
    • Renommer un fichier
    • Supprimer un fichier
    • Travailler avec des expressions régulières
    • Séparer et joindre des chaînes de caractères
    • Accueillir une page web web
    • Lire et écrire dans le registre
    • Comprendre les guillemets
    • Chronométrer une commande
    • Transformation de texte en parole
    • Accéder au presse-papiers de Windows
    • Charger un assemblage .NET assembly
    • Exécuter un code créé au moment de l’exécution
    • Exécuter un programme ayant un espace dans son chemin

Démarrage/installation

Installer PowerShell

Vous pouvez obtenir PowerShell à partir de :
https://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx

top

Installer la bibliothèque Community Extensions

La bibliothèque PowerShell Community Extensions (PSCX) est disponible ici :
https://www.codeplex.com/Wiki/View.aspx?ProjectName=PowerShellCX

C’est une collection utile de cmdlets et de fonctions. Elle installe un menu contextuel « PowerShell Here » dans WindowsExplorer qui ouvre une fenêtre de commande PowerShell dans le dossier sur lequel vous cliquez avec le bouton droit de la souris. De plus, PSCX fournit un exemple de fichier Profile.ps1.

Une fois que PSCX est installé, tapez man about_pscx pour voir un aperçu des cmdlets, des providers, etc. qui viennent avec PSCX.

haut

Se débarrasser du message « l’exécution des scripts est désactivée »

Le premier problème que vous êtes susceptible de rencontrer lors de l’exécution de scripts PowerShell ressemble à ceci :

PSH> .\myScript.ps1File D:\myScript.ps1 cannot be loaded. The fileD:\myScript.ps1 is not digitally signed. The script will not execute on thesystem. Please see "get-help about_signing" for more details..
At line:1 char:13 + .\myScript.ps1 <<<<

Cela est dû au paramètre de sécurité par défaut de PowerShell qui interdit l’exécution de scripts malveillants.

Vous pouvez modifier ce comportement en faisant ceci:

PSH> set-executionPolicy RemoteSigned

Maintenant, seuls les scripts provenant de sources distantes nécessiteront une signature numérique.

top

Configurez votre « scripts : » Emplacement du lecteur PowerShell

Une fois que vous avez écrit un certain nombre de scripts PowerShell, vous pourriez trouver utile de les rassembler en un seul endroit et de créer un PSDrive nommé scripts: pour les retrouver rapidement. Vous pourriez ajouter ce qui suit à votre profil PSCX pour créer un tel PSDrive.

New-PSdrive -name scripts -PSprovider filesystem -root C:\bin\PowerShellScripts

top

Configurer votre invite de commande

Pour configurer votre invite de commande, il suffit de créer une fonction nommée prompt et de la placer dans votre profil. Par exemple, ce qui suit provoquera l’affichage du répertoire de travail.

function prompt { "$pwd> " }

Notez que vous pourriez mettre n’importe quel code que vous voulez à l’intérieur de la fonction prompt et ce code sera exécuté chaque fois que vous appuyez sur retour.

top

Tâches diverses

Écrire à l’écran

Utilisez Write-Host pour écrire la sortie. Vous pouvez éventuellement spécifier -foregroundcolor pour colorer la sortie. Par exemple, les erreurs et les avertissements peuvent être mis en évidence en rouge.

Exemple:

Write-Host "Hello world" -foregroundcolor red

top

Inviter l’utilisateur à saisir

Utiliser Read-Host.

Exemple:

$a = Read-Host "Enter your name"Write-Host "Hello" $a

top

Manipuler les dates

Le cmdlet get-date renvoie un objet DateTime. Sans argument, elle renvoie l’heure et la date actuelles. Avec un argument de type chaîne, pas besoin de guillemets, il analyse la chaîne en une date.

Exemple : Trouver le nombre de jours et d’heures depuis le bicentenaire des États-Unis.

(get-date) - (get-date 7/4/1976)

Vous pouvez également couler des chaînes de caractères en objet DateTime en utilisant le cast .

top

Envoyer un email

Utiliser la cmdlet Send-SmtpMail des extensions communautaires PowerShell.

Exemple:

Send-SmtpMail -SmtpHost wotan.mdacc.tmc.edu -from [email protected] -to [email protected] -body "hello world"

top

Sleep

Utiliser la cmdlet Start-Sleep. Prend des secondes par défaut, mais dispose d’une option -milliseconds.

Exemple:

Write-Host "hello"; Start-Sleep 5; Write-Host "world"

top

Lister un répertoire (de manière récursive)

Vous pouvez utiliser la commande dir, qui est en réalité un alias de Get-ChildItem. Pour lister un répertoire de manière récursive, il suffit d’ajouter l’option -recurse.

Exemple:

dir f:\bin -recurse

top

Tester si un fichier existe

Utiliser test-path.

top

Lire les lignes du fichier dans un tableau

Utiliser get-content.

Exemple:

$a = (get-content foo.txt)

top

Écrire dans un fichier

Utiliser Out-File. A moins que vous ne vouliez une sortie Unicode, spécifiez -encoding ASCII

Exemple:

$foo | out-file -encoding ASCII foo.txt

top

Renommer un fichier

Utiliser Rename-Item ou son alias ren.

top

Supprimer un fichier

Utiliser Delete-Item ou son alias del.

top

Travailler avec des expressions régulières

Voir Expressions régulières dans PowerShell et Perl.

top

Diviser et joindre des chaînes de caractères

Les chaînes de caractères ont une méthode split. L’argument de split() est une chaîne de caractères contenant les caractères à scinder. La fonction ::split est plus générale. Son premier argument est la chaîne de caractères à scinder, et son second argument est une expression régulière sur laquelle il faut scinder.

Exemple:

$a.split("`t ")

séparera la chaîne $a en un tableau de chaînes de caractères, en la scindant partout où il y a une tabulation ou un espace.

Exemple:

$a = "123,456,apple"; ::split($a, ",(?!\d)")

séparera $a sur les virgules non suivies de chiffres. Ainsi, le fractionnement renverrait « 123,456 » et « apple ».

Si la chaîne que vous fractionnez est un chemin d’accès Windows, vous pouvez utiliser la commande spécialisée Split-Path.

Pour joindre un tableau en une seule chaîne, utilisez la méthode ::join. Le premier argument est le caractère de séparation et le second est le tableau.

Exemple:

$a = 1, 2, 3;#note: this is an array, not a string$b = ::join("*", $a)

Maintenant $b contient « 1*2*3 ».

top

Saisissez une page web

Utilisez soit le Get-Url de PSCX ou l’objet net.webclient de .NET. Le premier est plus succinct mais le second permet plus d’options.

Exemple:

$w = Get-Url "https://www.w3.org"

$w = (new-object net.webclient).DownloadString("https://www.w3.org")

Le code (new-object net.webclient) crée un objet .NET WebClient avec de nombreuses méthodes utiles. Par exemple, vous pouvez appeler DownladFile pour enregistrer directement sur le disque plutôt que dans une chaîne de caractères. Il existe également des méthodes UploadData et UploadFile.

top

Lire et écrire dans le registre

Vous pouvez naviguer dans le registre comme vous le feriez dans le système de fichiers, bien qu’il y ait quelques détails à connaître.

Chaque ruche du registre est comme un lecteur. Ainsi, par exemple, pour explorer HKEY_CURRENT_USER, vous pouvez cd HKCU: et ensuite utiliser cd pour descendre dans l’arbre. Utilisez Get-ItemProperty pour lire et Set-ItemProperty pour écrire. Vous pouvez également utiliser Remove-ItemProperty pour supprimer.

Exemple:

Les commandes ci-dessous listeront le contenu du nœud de registre qui configure le shell cmd.exe. En définissant CompletionChar à 9, nous activons la complétion de la tabulation.

cd HKCU:\Software\Microsoft\Command ProcessorGet-ItemProperty .Set-ItemProperty . -name CompletionChar -Value 9

Cet article de TechNet entre dans les détails.

top

Comprendre les guillemets

PowerShell dispose de quatre types de guillemets : les guillemets ordinaires simples et doubles, et les guillemets ici-strings simples et doubles. À l’intérieur des guillemets doubles et des doubles here-strings, les noms de variables sont remplacés par leurs valeurs et les séquences d’échappement PowerShell sont interprétées. Dans les guillemets simples et les here-strings simples, les noms de variables ne sont pas développés et les séquences d’échappement ne sont pas interprétées. Par exemple, l’extrait de code

 $a = "bar" 'foo`t$a', "foo`t$a"

produira la sortie

 foo`t$a foo bar

parce qu’à l’intérieur du guillemet double, `t se développe en une tabulation et $a se développe en « bar ».

Les here-strings de PowerShell sont comme des here-documents en Perl. À l’intérieur d’une here-string, les guillemets doubles et simples ne sont pas spéciaux mais cités littéralement. De plus, les sauts de ligne sont préservés.

Une here-string commence par @" ou @' et se termine par les mêmes symboles dans l’ordre inverse. Il doit y avoir un saut de ligne après le marqueur d’ouverture et avant le marqueur de fermeture.

Exemple

 $a = "bar" $b = @" foo "baz" 'qux' $a "@ $b

produit

 foo "baz" 'qux' bar

et

 $a = "bar" $b = @' foo "baz" 'qux' $a '@ $b

produit

 foo "baz" 'qux' $a

Notez qu’il ne doit pas y avoir d’espace blanc après la citation ouvrant une chaîne ici. Sinon, vous obtiendrez le message « Unrecognized token in source text. »

Bien qu’elles se ressemblent, les here-strings de PowerShell et les chaînes verbatim de C# sont assez différentes. Le tableau suivant résume les différences.

.

C# verbatim strings PowerShell here-strings
Peut contenir des sauts de ligne Doit contenir des sauts de ligne
Variété de guillemets doubles uniquement Variétés de guillemets simples et doubles
Commence par @ » Commence par @ » (ou @’) plus un retour à la ligne
Fermet par «  Fermet par un retour à la ligne suivi de « @ (ou ‘@)
Ne peut pas contenir de guillemets doubles non…échappés Peut contenir des guillemets
Désactive les séquences d’échappement C# ‘@ désactive les séquences d’échappement PowerShell mais « @ ne le fait pas

top

Chronométrer une commande

Utiliser Measure-Command pour chronométrer la durée d’exécution d’une tâche.

top

Texte à la parole

Utiliser Out-Speech de PSCX.

top

Accéder au presse-papiers de Windows

Utiliser les cmdlets PSCX Get-Clipboard et Out-Clipboard pour lire et écrire dans le presse-papiers.

top

Charger un assemblage .NET

Vous pouvez appeler LoadWithPartialName. Par exemple, pour charger l’assemblage pour l’API Team Foundation Server, vous exécuterez

::LoadWithPartialName("Microsoft.TeamFoundation.Client")

Voir aussi Resolve-Assembly de PSCX.

top

Exécuter du code créé au moment de l’exécution

La commande Invoke-Expression est analogue à eval en Perl ou JavaScript. Invoke-Expression $str exécute le code contenu dans la chaîne $str.

top

Exécuter un programme avec un espace dans son chemin

Mettez des guillemets autour du chemin et collez une esperluette devant. Par exemple,

& "C:\Program Files\WinEdt Team\WinEdt\WinEdt.exe"

lancera l’exécutable WinEdt.exe qui a deux espaces dans son chemin complet.

Notez que vous ne pouvez pas omettre l’esperluette. Contrairement à cmd.exe, PowerShell ne suppose pas que toutes les chaînes de caractères sont des commandes. Sans l’esperluette, un chemin cité est juste une chaîne de caractères.

top

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.