Profil PowerShell et astuces

Le profil PowerShell ($PROFILE)

Le profil PowerShell est un script qui s'exécute automatiquement à chaque ouverture d'une session PowerShell. C'est l'endroit idéal pour stocker vos fonctions personnalisées, alias et configurations.

Comprendre le problème

Quand vous créez une fonction directement dans le terminal :

function kill-port { param([int]$Port) ... }

Elle fonctionne immédiatement. Mais si vous fermez PowerShell, la fonction disparaît. C'est parce que les fonctions créées dans le terminal ne vivent que dans la session courante.

La solution : le fichier $PROFILE

Le fichier $PROFILE est chargé automatiquement à chaque session. Tout ce que vous y mettez est permanent.

# Voir le chemin de votre profil
$PROFILE
# Résultat typique : C:\Users\VotreNom\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

# Vérifier si le fichier existe
Test-Path $PROFILE

# Créer le fichier s'il n'existe pas
if (!(Test-Path $PROFILE)) {
    New-Item -Path $PROFILE -ItemType File -Force
}

# Ouvrir le profil dans le Bloc-notes
notepad $PROFILE

Si le fichier n'existe pas encore, acceptez sa création quand on vous le demande.

Que mettre dans son profil ?

Voici un exemple de profil bien organisé :

# ============================================
# Mon profil PowerShell
# ============================================

# --- Fonctions utilitaires ---

# Tuer un processus par port
function kill-port {
    param([int]$Port)
    $connection = Get-NetTCPConnection -LocalPort $Port -ErrorAction SilentlyContinue
    if ($connection) {
        $processId = $connection.OwningProcess | Select-Object -First 1
        $processName = (Get-Process -Id $processId).ProcessName
        Write-Output "Port $Port utilisé par $processName (PID: $processId)"
        Stop-Process -Id $processId -Force
        Write-Output "Processus arrêté."
    } else {
        Write-Output "Aucun processus trouvé sur le port $Port."
    }
}

# Raccourci pour ouvrir l'explorateur ici
function here { explorer . }

# Raccourci pour ouvrir VS Code ici
function c { code . }

# --- Alias personnalisés ---
Set-Alias -Name g -Value git
Set-Alias -Name n -Value npm
Set-Alias -Name open -Value explorer

# --- Message d'accueil ---
Write-Host "PowerShell prêt !" -ForegroundColor Green

Recharger le profil sans fermer PowerShell

Après avoir modifié votre profil, pas besoin de fermer et rouvrir le terminal :

# Recharger le profil
. $PROFILE

Le point (.) au début est le dot-sourcing : il exécute le script dans la session courante au lieu d'une sous-session.

Astuces de productivité

Copier-coller dans PowerShell

Le copier-coller dans le terminal peut être déroutant. Voici les méthodes :

Méthode rapide :

  1. Sélectionnez du texte avec la souris
  2. Faites Ctrl + C pour copier
  3. Dans PowerShell, faites clic droit pour coller (ou Ctrl + V si votre terminal le supporte)
  4. Appuyez sur Entrée pour exécuter

Si le collage ne fonctionne pas :

  • Clic droit sur la barre de titre du terminal > Propriétés > cochez Mode d'édition rapide
  • Ou mieux : utilisez Windows Terminal qui gère nativement Ctrl+C / Ctrl+V

Autocomplétion

# Tab pour autocompléter
Get-Pro[Tab]         # → Get-Process

# Tab pour naviguer les options
Get-Process -[Tab]   # Parcourt les paramètres disponibles

# Ctrl + Espace pour voir toutes les options
Get-Process -N[Ctrl+Space]

Historique des commandes

# Flèche haut/bas : naviguer dans l'historique

# Rechercher dans l'historique
Ctrl + R             # Recherche inversée (comme en Bash)

# Voir tout l'historique
Get-History

# Réexécuter une commande par numéro
Invoke-History 42

# Voir le fichier d'historique
(Get-PSReadLineOption).HistorySavePath

Raccourcis clavier utiles

Raccourci Action
Tab Autocomplétion
Ctrl + R Recherche dans l'historique
Ctrl + C Annuler la commande en cours
Ctrl + L Effacer l'écran (comme cls)
F7 Afficher l'historique en popup
Flèche haut Commande précédente

PSReadLine : améliorer l'expérience

PSReadLine est le module qui gère la saisie dans PowerShell. Vous pouvez le personnaliser dans votre $PROFILE :

# Prédiction basée sur l'historique (PowerShell 7+)
Set-PSReadLineOption -PredictiveViewSource History

# Style de prédiction en liste
Set-PSReadLineOption -PredictionViewStyle ListView

# Couleurs personnalisées
Set-PSReadLineOption -Colors @{
    Command = 'Green'
    Parameter = 'Cyan'
    String = 'Yellow'
}

Commandes en une ligne utiles

# Trouver et tuer un processus sur un port (version one-liner)
(Get-NetTCPConnection -LocalPort 3000).OwningProcess | ForEach-Object { Stop-Process -Id $_ -Force }

# Taille d'un dossier
(Get-ChildItem -Recurse | Measure-Object -Property Length -Sum).Sum / 1MB

# Vider le cache DNS
Clear-DnsClientCache

# Trouver votre IP locale
(Get-NetIPAddress -AddressFamily IPv4 | Where-Object { $_.InterfaceAlias -notlike "*Loopback*" }).IPAddress

# Ouvrir une URL dans le navigateur
Start-Process "https://sachaamm.com"

Windows Terminal : le terminal moderne

Si vous utilisez encore l'ancien terminal PowerShell, passez à Windows Terminal :

  • Onglets multiples (PowerShell, CMD, WSL dans la même fenêtre)
  • Copier-coller natif avec Ctrl+C / Ctrl+V
  • Thèmes et personnalisation
  • Panneaux divisés
  • Support Unicode complet
# Installer Windows Terminal
winget install Microsoft.WindowsTerminal