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

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

Et 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