Profil PowerShell : Personnaliser l’expérience dans la Shell

powershell

Comment exécuter des commandes automatiquement à chaque lancement ?

 PowerShell est un outil en ligne de commande open source, largement plébiscité par Microsoft, permettant d’interagir avec des services et d’automatiser des traitements.
Dans cet article, nous allons nous intéresser à la notion de profil PowerShell qui nous sert à automatiser l’exécution de commandes à chaque ouverture du logiciel.


Un Profil PowerShell, c’est quoi ?

Le profil PowerShell se matérialise sous la forme d’un fichier .ps1 avec la règle de nommage suivante :


  • Microsoft.PowerShell_profile.ps1 (s’execute au lancement de PowerShell)
  • Microsoft.PowerShellISE_profile.ps1 (s’execute au lancement de PowerShell ISE)
  • Profile.ps1 (s’execute au lancement des deux plateformes)


En fonction de la plateforme utilisée, vous pouvez lancer la commande suivante pour récupérer le chemin de ces fichiers :

#La variable $PROFILE contient les chemins des fichiers Profil
$Profile | format-list * -force
Sortie de la commande $Profile | format-list * -force sur PowerShell

Nous avons ainsi la possibilité de créer le fichier de profil PowerShell en ligne de commande via cette variable :

#Créer le fichier de profil PowerShell pour l'utilisateur et la plateforme active
New-Item -Path $PROFILE.CurrentUserCurrentHost -Type file -Force

 Quand vous démarrez PowerShell, ce dernier va rechercher l’existence de ces fichiers pour exécuter le code qu’ils contiennent.
Vous trouverez ci-dessous les deux répertoires dans lesquels PowerShell va chercher ces fichiers :

Chemin du profil pour l’utilisateur actuel :
%windir%\system32\WindowsPowerShell\v1.0\

Chemin du profil pour tous les utilisateurs :
%UserProfile%\My Documents\WindowsPowerShell\

Cette organisation est relativement intéressante car elle nous permet de différencier l’exécution automatique de code en fonction de la plateforme et de l’utilisateur.
A noter que le fichier pour tous les utilisateurs n’est modifiable que si vous avez des privilèges d’administrateur.


Comment fonctionnent les Profils PowerShell ?

Instinctivement, nous sommes en droit de nous demander que sera le comportement de l’outil lorsque l’on créé plusieurs de ces fichiers profile ?

Pour tester le comportement, nous pouvons créer chacun de ces fichiers en y intégrant une ligne de code nous renvoyant le chemin du fichier exécuté :

write-host $MyInvocation.MyCommand.Definition -f green #En vert pour plus de lisibilité

Cette manipulation nous permet de voir l’ordre d’exécution des fichiers profile :

Lorsque nous lançons PowerShell

Sortie sur PowerShell

Et PowerShell ISE

Sortie sur PowerShell ISE


Un profil PowerShell, mais pour quoi faire ?

Maintenant que nous avons fait le tour du comportement des fichier Profile, voici quelques idées d’implémentation :

Changer des configurations :

#Changer les préférence d'execution des scripts
Set-ExecutionPolicy RemoteSigned

#Changer l'emplacement
Set-Location 'e:/Scripts'

#Créer un alias np pour notepad
new-item alias:np -value C:/Windows/System32/notepad.exe

Charger des ressource:

#Charger un PSSnapin
Add-PSSnapin Microsoft.SharePoint.PowerShell

#Charger une assembly
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

#Charger un module
import-Module SharePointPnPPowerShellOnline 

#Charger des ressources
Get-childitem "e:/scripts/*.ps1" |select-object -expandproperty FullName |% {. $_}
Get-childitem "e:/scripts/*.psm1" |select-object -expandproperty FullName |% {. $_}

Design / Fun:

#Renommer la shell
$Shell = $Host.UI.RawUI
$Shell.WindowTitle="La matrice..."

#Afficher un message personnalisé
Write-Host "Bienvenue $env:Username"

#Changer les paramètres d'affichage de la Shell
$Shell = $Host.UI.RawUI
$size = $Shell.WindowSize
$size.width=70
$size.height=25 #maximum 55
$Shell.WindowSize = $size
$size = $Shell.BufferSize
$size.width=70
$size.height=5000
$Shell.BufferSize = $size

#Changer les couleurs de la Shell
$shell.BackgroundColor = “Gray”
$shell.ForegroundColor = “Black”

Clear-Host #Pour partir avec une Shell propre

Afficher la description d’une commande aléatoire:

#Afficher un Get-Help random
get-help (Get-Command | get-random) -Full

En espérant que cet article sur les Profil PowerShell vous a servi, n’hésitez pas à réagir en dessous.

A bientôt sur le blog !



Références :
docs.microsoft.com
Articles similaires :
howtogeek.com
computerperformance.co.uk
devblog.microsoft.com
Pour aller plus loin :
Profile and tasks

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.