
Sommaire
Introduction
Ce petit article sans prétention, s’adresse aux débutants et peut être aussi à ceux qui souhaitent affuter leur connaissances de Powershell.
La compétence ne s’acquiert qu’avec la pratique et l’idée présentée ici consiste simplement à vous inciter d’utiliser Powershell au quotidien, en abandonnant d’anciennes habitudes, tout en y apportant quelques petites touches personnelles.
Cette démonstration s’appuie sur un système Windows 10 x64 ou Server 2016/19 mais peut être extrapolée à d’autres versions.
Accès rapide à la console
Commencez par modifier le menu rapide via [⊞ Win] + [X] ou clic droit sur l’icône du menu “Démarrer“


Pour cela, allez dans le menu “Paramètres“

Puis entrez “Powershell” dans la zone de saisie et cliquez sur l’option “Remplacer l’invite de commandes ….“

Puis activez l’option via le bouton bascule.

Le changement doit être immédiat

Et maintenant, pour ouvrir rapidement une console Powershell en mode admin, il vous suffit d’utiliser la combinaison des touches
[Win]+[X] puis [A]
Il vous restera à valider l’élévation de privilèges UAC et c’est tout 😀
Voilà, vous êtes paré pour remiser l’invite de commande tradionnel au placard et utiliser la console Powershell au quotidien …
En cas de difficultés avec la syntaxe d’une ancienne commande, préfixez la simplement par “cmd /c …“
Les alias
Comme je le précise souvent dans mes formations, les alias sont à utiliser avec parcimonie pour les débutants. En effet, ils peuvent vite s’avérer de faux-amis, et peuvent freiner le changement d’anciennes habitudes.
Il sera plus rapide d’utiliser “ls” ou “dir” au lieu de “get-childitem” mais au niveau des commutateurs, la réalité vous rattrape, et vous devrez alors “penser” en logique Powershell. Les habitudes sont tenaces, mais dans ce cas, profitez-en pour apprendre de nouveaux alias tels que “gci“. 😀
Vous pouvez énumérer les nombreux alias via “get-alias” ou bien énumérer le contenu du lecteur dédié “alias:” (PSDrive). La encore, en mode script, il est préférable d’éviter l’usage des alias ou profit des commandes complètes, qui améliorent naturellement la lisibilité du code. En revanche, ils sont parfaitement appropriés à la console ainsi qu’a l’écriture des “one-liner” (enchainement de commandes au sein d’un ou plusieurs pipelines)
Hormis les alias ressemblant aux commandes traditionnelles, quelques uns d’entre eux deviennent rapidement incontournables au sein de la console.
Les aides mémoire
help | Get-Help | Sollicite l’aide Powershell intégrée |
gcm | Get-Command | Informe du l’origine d’une commande |
gm | Get-Member | Informe sur le type et la composition d’un objet |
gmo | Get-Module | Affiche les modules chargés et/ou disponibles |
gal | Get-Alias | Enumère les alias (= “gcm -CommandType alias” ou “ls alias: “) |
La crème des pipelines
% | Foreach-Object | Boucle de traitement d’une collection |
? | Where-Object | Effectue un filtrage par critère |
select | Select-Objet | Effectue une sélection de membres d’un objet |
sls | Select-String | Effectue une recherche dans un contenu (~ grep) |
fl | Format-List | Affiche l’objet sous forme de liste |
ft | Format-Table | Affiche l’objet sous forme d’un tableau |
Et ensuite, les 2 seuls alias disposant de leur propre fenetre.
Les marginaux
ise | Powershell_ise.exe | Editeur graphique de script (Integrated Scripting Environment) |
ogv | Out-GridView | Affiche l’objet au sein d’une grille graphique et interactive |
Mais ces préférences restent bien évidement propres à chacun.
Pour lancer mon éditeur Powershell, en mode administrateur, je procéde ainsi :
[Win]+[X] , [A], puis ISE
Pour trouver rapidement un service, on peut entrer ce simple chainage
gsv | ogv
puis utiliser les capacités de filtrage de la sortie graphique.
Powershell, c’est aussi l’intéraction de ces mondes que tout semble opposer
et un allié au quotidien, Alors convaincu ou pas ?
Les profils
Au sens Powershell, un “profil” est en fait un script (de personnalisation) qui exécute des actions de notre choix (commandes) au démarrage de l’interpréteur (alias $Host). Disposant de plusieurs “Hôtes” (Console et ISE), on dispose donc d’une déclinaison de profil pour chaque environnement. De plus, un profil peut être spécifique et propre à un utilisateur mais un autre profil peut être commun à l’ensemble des utilisateurs d’une même machine.
Le profil personnel
Powershell utilise la variable automatique $PROFILE pour référencer les noms et chemins des profils.
Vous pourrez constater, cette variable référence par défaut le nom et chemin complet du script de profil personnel de l’utilisateur courant.
Attention, les exemples qui suivent engendrent des résultats différents selon le contexte (Hôte) à partir duquel vous exécutez les commandes (Console // ISE, mais aussi architecture 32 et//ou 64 bits).
Cette variable pointe vers un simple nom, mais le fichier référencé n’existe pas par défaut.
Test-Path $PROFILE
Pour créer rapidement votre propre profil, il suffit de tapez la commande suivante :
New-Item -Path $PROFILE -Type File -Force
L’option “-force” permet de créer le répertoire parent s’il n’existe pas. Il vous suffira ensuite d’éditer son contenu, comme par exemple “notepad $PROFILE” puis d’y ajouter vos commandes préférées.
Exemple de code :
if (Test-Path $PROFILE) { Write-Host "Un fichier de profil personnel Powershell existe [$(Split-Path -Leaf $PROFILE)]" $Reponse = Read-Host "Souhaitez-vous l'éditer (o/n) ?" if ($Reponse -like 'o*') { Invoke-Item $PROFILE } } else { Write-Host "Le fichier de profil personnel Powershell n'existe pas dans cet environnement." $Reponse = Read-Host "Souhaitez-vous le créer puis l'éditer (o/n) ?" if ($Reponse -like 'o*') { New-Item -Path $PROFILE -Type File -Force -Verbose ; Invoke-Item $PROFILE } }
Les autres profils
En réalité, cette variable automatique $PROFILE référence plusieurs profils, selon l’environnement (Console ou ISE) et soit pour tous les utilisateurs soit propre à l’utilisateur courant.
Utilisez la commande suivante pour lister tous les 4 chemins de profil (9 au total si on considère les déclinaisons liées architectures 32 et 64 bits)
$PROFILE | select *
Déclinaison $PROFILE | Précisions – Emplacement du fichier | Nom | Nb. Max |
AllUsersAllHosts | (32 / 64) – Sous dossier $PSHOME | Profile.ps1 | 2 |
AllUsersCurrentHost | ISE/Console (32 / 64) – Sous dossier $PSHOME | Microsoft.PowerShellISE_profile.ps1 Microsoft.PowerShell_profile.ps1 | 4 |
CurrentUserAllHosts | Sous dossier “documents” [environment]::getfolderpath(“mydocuments”) | Profile.ps1 | 1 |
CurrentUserCurrentHost | ISE/Console – Sous dossier “documents” | Microsoft.PowerShellISE_profile.ps1 Microsoft.PowerShell_profile.ps1 | 2 |
L’ordre des profils
Bien qu’il soit assez rare d’avoir à gérer plusieurs profils, il convient d’en connaitre l’ordre d’exécution afin d’éviter les surprises 🙂
Ordre | S’applique à | Chemin du profil |
1 | Tous utilisateurs et tout hôte (Console et ISE) | $PROFILE.AllUsersAllHosts |
2 | Tous utilisateurs et hôte courant | $PROFILE.AllUsersCurrentHost |
3 | Utilisateur courant et tout hôte (Console et ISE) | $PROFILE.CurrentUserAllHosts |
4 | Utilisateur courant et hôte courant | $PROFILE.CurrentUserCurrentHost |
Aparté dot sourcing
Notez que les scripts profils sont exécutés en mode “dot sourcing”. Autrement dit les fonctions et variables qu’ils contiennent seront disponibles dans la session et les éventuels scripts que vous exécuterez à partir de cet environnement.
Pour tester votre profil d’utilisateur, fermez puis rouvrez la session, ou exécutez-le en “dot sourcing” (ajout d’un point et espace devant la commande) comme suit :
. $PROFILE
Ceci fonctionne également pour chaque profil sous réserve qu’il existe et que vous précisiez le nom 🙂
. $PROFILE.CurrentUserCurrentHost
Vous pouvez également tester l’existence de différents profils via la commande suivante :
$profile.PSObject.Properties.Name | Where-Object { $_ -ne 'Length' } | ForEach-Object { [PSCustomObject]@{Profile=$_; Present=Test-Path $profile.$_; Path=$profile.$_} }
Exemple de personnalisation d’un profil Powershell
Il appartient à chacun de définir (ou non) un profil Powershell en fonction de ses habitudes personnelles mais je pense que le sujet des profils est peut être l’occasion de mettre en lumière une variable automatique méconnue $PSDefaultParameterValues.
Cette variable permet de modifier les options par défaut des commandes de votre choix., comme par exemple :
$PSDefaultParameterValues.Add("Get-Help:ShowWindow",$True) $PSDefaultParameterValues.Add("Get-ChildItem:Force",$True) $PSDefaultParameterValues.Add("Receive-Job:Keep",$True) $PSDefaultParameterValues.Add("Format-Table:AutoSize",{if ($host.Name -eq "ConsoleHost"){$true}}) $PSDefaultParameterValues.Add("Test-Connection:Quiet",$True) $PSDefaultParameterValues.Add("Test-Connection:Count","1") $PSDefaultParameterValues.Add("*:Confirm",$false) # !! supprime toute demande de confirmation
Voilà, j’espère que ce petit tour d’horizon vous permettra d’exploiter plus efficacement Powershell. La compétence viendra avec le temps et la pratique 😉
Bonne continuation
Christophe M.