Profil PowerShell personnalisé avec fonctions utilitaires, outils système et améliorations du terminal.
Ce dépôt contient mon profil PowerShell personnalisé ($PROFILE – Microsoft.PowerShell_profile.ps1) ainsi qu’un ensemble d’outils, fonctions et alias conçus pour améliorer :
- ✨ Productivité
- 🚀 Confort d’utilisation
- 🎨 Esthétique du terminal
- 🛠️ Automatisation de tâches courantes
Tous les outils sont gratuits, ne requière aucune inscription, et orientés usage quotidien, ce projet n'utilise pas "Oh My Posh".
Le fichier principal Microsoft.PowerShell_profile.ps1 :
- Vérifie si la session est interactive (sinon, exit).
- Charge les modules depuis les répertoires listés.
- Charge les secrets depuis un fichier
.env(viaImport-Secrets). - Configure des variables globales (icônes, sons, voix, etc.).
- Joue un son d'introduction et une synthèse vocale (1 fois/jour, hors SSH).
- Définit un prompt dynamique (via fonction dans
core/prompt.ps1). - Au chargement du profil, un script vérifie si une mise à jour(synchronisation) est disponible (Vérification quotidienne), fichier
.update.lockpour éviter les mises à jour simultanées (Verrou anti-conflits). - Lance une mise à jour automatique asynchrone via Git (si dépôt Git présent).
- Charge les groupes d'alias.
- Affiche une bannière d'accueil (via
Show-Bannerdanscore/banner.ps1) avec infos réseau, stockage, etc.
- Windows 10 / 11
- PowerShell 7.5.4 recommandé
- Git (optionnel)
- Droits administrateur pour certaines fonctionnalités
- Accès Internet pour l'installation des dépendances, l'exposition WAN et les mises à jour.
Il y a deux méthodes d'utilisation :
-
La méthode avec Git qui permet de modifier le profile directement via git puis de synchroniser les modification vers votre machine soit automatiquement (une mise à jour tous les jours 1 fois par jour), vous ne pouvez donc pas modifier directement le profile vous devez le faire toujours via git si non vos données seront écrasées à la prochaine synchronisation.
-
La méthode simple sans git, (vous pouvez modifier directement le profile).
- Installer Git et PowerShell Core :
winget install --id Git.Git -e --source winget
winget install --id Microsoft.PowerShell --source winget- Préparation :
Sauvegarder le contenu de : $HOME\Documents\PowerShell, si besoin.
Copy-Item "$HOME\Documents\PowerShell" "$HOME\Documents\PowerShell_Backup" -RecursePuis supprimer son contenu.
- Cloner le dépôt :
A cette étape soit vous faites un fork du projet, soit vous le copier directement le projet sur votre dépôt git.
Exemple :
git clone https://github.com/DOSSANTOSDaniel/My-Custom-PowerShell-Profile.git $HOME\Documents\PowerShell\- Configurer le fichier des secrets (.env)
Permet de stocker les données sensibles, un exemple de fichier .env :
TORTUE_SSH_PORT=xxxx
MAC_PROXMOX=xx:xx:xx:xx:xx:xx
MAC_NEXTCLOUD=xx:xx:xx:xx:xx:xx
TOKEN_MACHINE=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Ce fichier doit être créé avant de recharger le profile, même s'il est vide au départ si non vous aurez une erreur non bloquante au démarrage.
Par la suite la fonction "Import-Secrets" permet de créer les variables d'environnement correspondantes aux secrets.
Utiliser ces variables dans le code :
function ssh_tortue {
Connect-MySSH -User "daniel" -IP "192.168.1.85" -Port "$env:TORTUE_SSH_PORT"
}- Configurer Git sur votre machine :
git config --global user.name "VotreNom"
git config --global user.email "email@example.com"- Autoriser l’exécution des scripts si besoin :
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser- Redémarrer PowerShell (
pwsh) puis installer les dépendances :
installpsAvec cette méthode pas de synchronisation automatique avec git donc pour modifier le profile il faut le faire directement sur les fichiers du profile.
Il faut aussi supprimer le dossier .git s'il est présent.
-
Télécharger le dépôt au format ZIP ou via git clone
-
Sauvegarder le contenu de :
C:\Users\<Nom>\Documents\PowerShellsi besoin puis supprimer son contenu et extraire le fichier compresser dans :C:\Users\<Nom>\Documents\PowerShell. -
Configurer le fichier des secrets (.env)
Permet de stocker les données sensibles, un exemple de fichier .env :
TORTUE_SSH_PORT=xxxx
MAC_PROXMOX=xx:xx:xx:xx:xx:xx
MAC_NEXTCLOUD=xx:xx:xx:xx:xx:xx
TOKEN_MACHINE=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Ce fichier doit être créé avant de recharger le profile, même s'il est vide au départ si non vous aurez une erreur non bloquante au démarrage.
Par la suite la fonction "Import-Secrets" permet de créer les variables d'environnement correspondantes aux secrets.
Utiliser ces variables dans le code :
function ssh_tortue {
Connect-MySSH -User "daniel" -IP "192.168.1.85" -Port "$env:TORTUE_SSH_PORT"
}- Installer les dépendances avec :
installpsLes alias sont regroupés par catégories logiques :
| Groupe | Description |
|---|---|
gtools |
Outils système & fonctions utilitaires |
gwol |
Réveil réseau (Wake-on-LAN) |
gssh |
Connexions SSH prédéfinies |
gshare |
Partage de fichiers, services et sessions |
| Alias | Description |
|---|---|
chris |
Utilitaire Chris Titus |
disk |
Gestion des disques |
encrf |
Protection de fichiers par mot de passe aléatoire |
expose |
Exposer un port sur internet, WAN, (serveo.net, tunnl.gg, localhost.run) |
godm |
God Mode |
installps |
Installation des dépendances du profil |
maj |
Mise à jour du système (Windows, Chocolatey, Winget, Scoop) |
majps |
Mise à jour du profil PowerShell |
meteo |
Météo des trois derniers jours |
ports |
Vérifie les ports en écoute |
qclean |
Nettoyage rapide du système |
rdisk |
CHKDSK au prochain redémarrage |
rwin |
Réparation automatisée de l’intégrité Windows (DISM + SFC) |
scanip |
Scan des hôtes du réseau LAN |
task |
Gestionnaire des tâches |
| Commandes | Description |
|---|---|
appwiz |
Désinstaller ou modifier un programme |
choco |
Gestionnaire de paquets Chocolatey (search/install/update/uninstall) |
control |
Panneau de configuration classique |
gdu |
Analyser l’utilisation de l’espace disque |
mrt |
Microsoft Malicious Software Removal Tool |
msinfo |
Informations système |
scoop |
Gestionnaire de paquets Scoop (sans admin) |
winget |
Gestionnaire de paquets Microsoft Winget |
L’alias majps permet la synchronisation manuelle entre le profil et un dépôt Git :
- Une synchronisation automatique est lancée une fois par jour au chargement du profil.
- La synchronisation peut être aussi forcée (manuellement) via l'alias
majps.
| Alias | Description |
|---|---|
gofile |
Partage de fichiers WAN (Gofile.io) |
lmsrv |
Partage d'arborescence de fichiers et dossiers LAN (Miniserve) |
lwmsrv |
Partage d'arborescence de fichiers et dossiers LAN (Miniserve) et WAN tunnel (serveo.net, tunnl.gg, localhost.run) |
shdesk |
Partage de Desktop WAN (RustDesk) |
shterm |
Partage de terminal WAN (Upterm) |
| Outil | Description | Lien |
|---|---|---|
| Gofile | Partage de fichiers WAN | https://gofile.io/ |
| Miniserve | Serveur web léger (LAN) | https://github.com/svenstaro/miniserve |
| Serveo | Tunnel réseau WAN | https://serveo.net/ |
| Upterm | Partage de terminal WAN | https://upterm.dev/ |
| RustDesk | Bureau à distance WAN | https://rustdesk.com/fr/ |
| Ultimate Windows Utility | Optimisation Windows | https://christitus.com/windows-tool/ |
| Chocolatey | Gestionnaire de paquets | https://chocolatey.org/ |
| Scoop | Gestionnaire de paquets | https://scoop.sh/ |
| Winget | Gestionnaire Microsoft | https://winget.run/ |
| PowerShell | Shell & scripting | https://learn.microsoft.com/fr-fr/powershell/ |
| 7-Zip | Compression | https://www.7-zip.org/ |
| GDU | Analyse disque | https://github.com/dundee/gdu |
| Nmap | Scan réseau | https://nmap.org/ |
| Git | Versioning | https://git-scm.com/ |
| Windows Terminal | Terminal moderne | https://apps.microsoft.com/detail/9n0dx20hk701 |
| wttr.in | Météo | https://wttr.in/ |
- Prompt :
core/prompt.ps1 - Mise à jour auto :
scripts/updater.ps1(verrou anti-conflits) - Notifications : sons + synthèse vocale (
System.Speech) - Bannière :
core/banner.ps1(IP, MAC, disque) - Les alias exposant des services WAN doivent être utilisés avec prudence
- Machines :
functions/wol.ps1 - Alias :
alias/wol_group.ps1
- Alias :
alias/ssh_group.ps1 - Machines :
functions/ssh.ps1
Même principe pour tous les autres groupes.
┌── Microsoft.PowerShell_profile.ps1 # Profil PowerShell
│ # Point d’entrée principal (chargement global)
│
├── alias/ # Alias PowerShell
│ # Regroupés par thématiques (outils, partage, SSH, WOL)
│
├── core/
│ ├── banner.ps1 # Bannière d’accueil
│ │ # IP locale/publique, MAC, espace disque, infos système...
│ │
│ └── prompt.ps1 # Prompt personnalisé
│ # Couleurs dynamiques, statut de commandes, contexte...
│
├── functions/ # Fonctions principales PowerShell réutilisables
│
├── install/ # Scripts d’installation des dépendances
│ ├── apps/ # Installation des applications nécessaires
│ ├── services/ # Installation et configuration de services Windows
│ └── functions/ # Fonctions utilitaires dédiées à l’installation des dépendances
│
├── scripts/ # Scripts utilitaires autonomes
│ └── updater.ps1 # Mise à jour Git asynchrone du profil, synchronisation automatique
│
├── .env # Variables sensibles
│ # MAC, ports, clés, hôtes (non versionnées)
│
├── .last_update # Fichier verrou
│ # Limite la mise à jour du profil à 1 fois par jour
│
├── pwsh_music_*_S1.lock # Fichiers verrou (audio)
│ └── pwsh_voice_*_S1.lock # Musique / voix d’intro jouées une fois par jour
│
├── updater.log # Journal des mises à jour Git du profil
│ # Historique et debug
│
└── README.md # Documentation du projet
Les alias expose, lwmsrv, shdesk, shterm utilisent des services de tunnelisation tiers :
-
Serveo.net, tunnl.gg, localhost.run
-
Toujours vérifier la confidentialité des données partagées
-
Limiter la durée d'exposition des ports
Fonctionnalités du Prompt (core/prompt.ps1)
Fonction anonyme pour le prompt personnalisé :
- Remplace le chemin home par "~".
- Raccourcit les chemins longs.
- Met à jour le titre de fenêtre dynamiquement (admin, SSH, Upterm).
- Affiche icônes dynamiques (admin, SSH).
- Indique le statut de la dernière commande (succès/échec avec code si applicable).
- Joue un son de notification en cas d'échec.
- Couleurs et icônes aléatoires/custom.
Assert-AppInstalled (check_installed.ps1)
- Vérifie si une ou plusieurs apps sont installées. Retourne
$falsesi manquante, avec message.
Paramètres : -Apps (array de noms d'apps), -Hint (message optionnel).
Open-Port (expose_port.ps1)
- Expose un port local sur WAN via tunnel SSH (serveo.net, tunnl.gg, localhost.run).
- Vérifie si le port local écoute.
- Teste les serveurs disponibles.
Paramètres : -LocalPort (obligatoire), -Servers (array de serveurs SSH).
Notifications (notify.ps1)
- Show-Text-Popup : Popup GUI avec message, titre, type (Info/Warning/Error/Question), boutons, timeout.
- Show-Voice-Popup : Synthèse vocale en français (Hortense).
- Show-Music-Popup : Joue un fichier WAV.
- Show-Audio-Popup : Joue un son système (selon type).
Repair-Disk (repair_disk.ps1)
- Planifie CHKDSK au redémarrage (
/fpour SSD,/f /rpour HDD). Détecte type de disque. Nécessite admin.
Paramètres : -Drive (lettre de disque, défaut : système).
Files Server LAN (share_files_miniserver.ps1)
- files_srv_web_lan : Lance un serveur web Miniserve pour partager le dossier courant en LAN (port 8088 par défaut). Supporte upload, QR code, etc.
Paramètres : -Port.
Files Server WAN (share_files_miniserver_wan.ps1)
- files_srv_web_wan : Lance Miniserve + tunnel SSH pour partage WAN (similaire à LAN, mais exposé via serveurs SSH).
Paramètres : -Servers (array de serveurs SSH).
Send-WoL (wol.ps1)
- Send-WoL : Envoie un Magic Packet Wake-On-LAN.
Paramètres : -MacAddress, -Broadcast, -Port.
Fonctions spécifiques : wol_proxmox, wol_nextcloud (utilisent secrets comme $env:MAC_PROXMOX).
Get-LANInventory (scan_lan_hosts.ps1)
- Scanne le réseau LAN via Nmap (ports 22/80/443), liste IP, hostname, OS, ports ouverts, MAC, vendor.
Paramètres : -Subnet (défaut : auto-détecté).
Updater (scripts/updater.ps1)
- Met à jour le dépôt Git automatiquement (1/jour max, sauf force). Utilise lock pour éviter conflits. Recharge le profil et affiche log si mise à jour.
Paramètres : -ForceUpdate (switch pour forcer).
Update System (scripts/updater.ps1)
Fonction : Update-Profile
Gère la mise à jour automatique :
- Vérifie les mises à jour une fois par jour
- Télécharge les changements depuis Git
- Applique les modifications sans redémarrage
- Gère les conflits avec un fichier de verrou
Utilisation manuelle :
majps # Force la mise à jour immédiateNotifications
- Son : Lecture de
Ring05.wavau démarrage (Windows Media). - Voix : Synthèse vocale en français via
System.Speech(uniquement sous Windows PowerShell Desktop, pas pwsh Core).
- Compatibilité Windows PowerShell 5.x
- Option de désinstallation complète

