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 »
- Configurez votre « scripts : » Emplacement du lecteur PowerShell
- Configurer votre invite de commande
- Tâches diverses
- Écrire à l’écran
- Inviter l’utilisateur à saisir
- Manipuler les dates
- Envoyer un email
- Sleep
- Lister un répertoire (de manière récursive)
- Tester si un fichier existe
- Lire les lignes du fichier dans un tableau
- Écrire dans un fichier
- Renommer un fichier
- Supprimer un fichier
- Travailler avec des expressions régulières
- Diviser et joindre des chaînes de caractères
- Saisissez une page web
- Lire et écrire dans le registre
- Comprendre les guillemets
- Chronométrer une commande
- Texte à la parole
- Accéder au presse-papiers de Windows
- Charger un assemblage .NET
- Exécuter du code créé au moment de l’exécution
- Exécuter un programme avec un espace dans son chemin
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