PowerBGInfo permet de personnaliser le fond d’écran Windows avec PowerShell en y ajoutant des informations système, des tuiles visuelles, des graphiques et des données utiles pour l’exploitation des serveurs.
L’outil reprend l’idée de BGInfo, mais avec une approche plus moderne et entièrement scriptable pour afficher des informations système sur le bureau d’un serveur Windows.
Le principe est simple : on génère une image de fond d’écran, puis on y ajoute des informations utiles. Cela peut être le nom du serveur, l’utilisateur connecté, l’OS, l’adresse IP, l’espace disque ou même des graphiques.
Le module est puissant, mais sa prise en main peut être confuse. On trouve vite des exemples complets avec des charts, des tuiles, des canvas, des topologies et du JSON.
Le but de cet article est donc de reprendre les bases dans le bon ordre.
On va commencer par installer le module, puis comprendre New-BGInfo, avant d’aller progressivement vers les tuiles, les graphiques et les configurations JSON.
Installation
PowerBGInfo s’installe depuis la PowerShell Gallery.
Install-Module PowerBGInfo -ForcePuis on importe le module :
Import-Module PowerBGInfoPour vérifier que le module est bien disponible :
Get-Module PowerBGInfo -ListAvailableOn ne va pas s’attarder ici sur le déploiement en entreprise, les dépôts PowerShell internes ou les partages réseau.
Ce sont de vrais sujets, mais ce n’est pas le bon moment. Avant d’industrialiser, il faut comprendre comment le module fonctionne.
son code source est publié sur le repo Git de l’auteur… C’est cadeau !
Le moteur de PowerBGInfo : New-BGInfo
La commande centrale est New-BGInfo.
C’est elle qui génère le fond d’écran.
Sa structure de base ressemble à ça :
New-BGInfo {
# contenu à afficher
} -ConfigurationDirectory 'C:\ProgramData\PowerBGInfo'Le paramètre important est le bloc entre accolades.
Ce bloc est un scriptblock PowerShell.
C’est dans ce scriptblock que l’on place les éléments à afficher : valeurs, labels, tuiles, graphiques, topologies, etc.
Autrement dit :
New-BGInfo
└── scriptblock
└── éléments à afficherPowerBGInfo ne devine pas ce que vous voulez afficher. Il exécute le scriptblock, récupère les éléments déclarés, génère l’image, puis applique ou exporte le résultat.
Les options importantes de New-BGInfo
Avant d’ajouter du contenu, il faut comprendre quelques options de New-BGInfo.
Exemple :
New-BGInfo `
-MonitorIndex 0 `
-FilePath 'C:\Wallpapers\Server.jpg' `
-ConfigurationDirectory 'C:\ProgramData\PowerBGInfo' `
-WallpaperFit Fill `
{
New-BGInfoLabel -Name 'Serveur Windows'
}
ConfigurationDirectory
-ConfigurationDirectory indique où PowerBGInfo stocke ses fichiers de travail.
-ConfigurationDirectory 'C:\ProgramData\PowerBGInfo'C’est quasiment obligatoire dans une approche propre.
Évitez les chemins temporaires ou les dossiers de profil utilisateur si vous voulez quelque chose de stable.
FilePath
-FilePath permet de fournir une image de base.
-FilePath 'C:\Wallpapers\Server.jpg'C’est un point important.
Sans -FilePath, vous ne maîtrisez pas vraiment l’image de départ. Selon le contexte, PowerBGInfo peut repartir du fond courant, utiliser un fond uni ou produire un rendu noir si vous travaillez avec un fond généré.
Pour un rendu propre et reproductible, fournissez une image de base.
C’est souvent la différence entre un test technique et un fond d’écran présentable.
MonitorIndex
-MonitorIndex indique l’écran ciblé.
-MonitorIndex 0Sur un serveur, 0 suffit dans la majorité des cas.
WallpaperFit
-WallpaperFit définit la manière dont l’image est ajustée à l’écran.
-WallpaperFit FillLes valeurs utiles sont généralement :
Center
Fit
Stretch
Tile
Span
FillEn pratique, Fill ou Fit sont les plus intéressants.
Target
-Target permet de choisir la cible du rendu.
Exemple :
-Target FileC’est très pratique pour tester sans appliquer directement le fond d’écran.
On peut générer une image, vérifier le rendu, puis seulement ensuite appliquer le wallpaper.
Afficher un texte simple
Premier test : afficher un label.
New-BGInfo -ConfigurationDirectory 'C:\ProgramData\PowerBGInfo' {
New-BGInfoLabel -Name 'Serveur Windows'
}C’est volontairement minimal.
À ce stade, le but n’est pas de faire joli. Le but est de vérifier que le module génère bien une image avec du contenu.
Afficher une variable PowerShell
L’intérêt de PowerBGInfo est de pouvoir afficher des valeurs issues de PowerShell.
Exemple avec le nom de la machine :
$ComputerName = $env:COMPUTERNAME
New-BGInfo -ConfigurationDirectory 'C:\ProgramData\PowerBGInfo' {
New-BGInfoValue -Name 'Serveur' -Value $ComputerName
}Ici :
-Namecorrespond au libellé affiché.
-Valuecorrespond à la valeur affichée.
On peut évidemment récupérer des informations plus utiles.
$OS = Get-CimInstance Win32_OperatingSystem
New-BGInfo -ConfigurationDirectory 'C:\ProgramData\PowerBGInfo' {
New-BGInfoValue -Name 'OS' -Value $OS.Caption
}La logique est simple :
- PowerShell récupère l’information.
- PowerBGInfo l’affiche.
Utiliser les BuiltInValues
PowerBGInfo fournit aussi des valeurs intégrées.
Elles évitent de réécrire les commandes PowerShell pour les informations courantes.
Exemple :
New-BGInfo -ConfigurationDirectory 'C:\ProgramData\PowerBGInfo' {
New-BGInfoValue -BuiltinValue HostName
New-BGInfoValue -BuiltinValue FullUserName
New-BGInfoValue -BuiltinValue OSName
}C’est la méthode la plus rapide pour produire un fond d’écran utile.
On peut aussi renommer le libellé affiché :
New-BGInfo -ConfigurationDirectory 'C:\ProgramData\PowerBGInfo' {
New-BGInfoValue -BuiltinValue OSName -Name 'Système'
}Les BuiltInValues sont pratiques pour démarrer.
Mais elles ne remplacent pas les valeurs personnalisées. Dès qu’il faut afficher une information métier, une donnée CMDB, un rôle applicatif ou un état spécifique, on repasse sur -Name et -Value.
Premier exemple lisible
On peut maintenant combiner les bases.
New-BGInfo `
-FilePath 'C:\Wallpapers\Server.jpg' `
-ConfigurationDirectory 'C:\ProgramData\PowerBGInfo' `
-WallpaperFit Fill `
{
New-BGInfoValue -BuiltinValue HostName -Name 'Serveur'
New-BGInfoValue -BuiltinValue FullUserName -Name 'Utilisateur'
New-BGInfoValue -BuiltinValue OSName -Name 'OS'
}Ce n’est pas encore un design avancé.
Mais c’est propre, court et compréhensible.
Le canvas : la vraie brique de mise en page
Les valeurs simples suffisent pour faire du BGInfo classique.
Mais PowerBGInfo va plus loin avec le canvas.
Un canvas est une zone graphique qui permet d’organiser l’affichage sous forme de blocs.
La structure est la suivante :
New-BGInfo<br>└── New-BGInfoVisualCanvas<br> └── New-BGInfoVisualCanvasTileNew-BGInfoVisualCanvas crée la surface visuelle.New-BGInfoVisualCanvasTile crée les tuiles affichées dans cette surface.
C’est cette partie qui rend PowerBGInfo vraiment intéressant.
On ne se contente plus d’empiler des lignes de texte. On construit une vraie zone d’information.
Première tuile simple
Exemple minimal :
$Tiles = @(
New-BGInfoVisualCanvasTile `
-Side Left `
-Label 'HOSTNAME' `
-Value '{{HostName}}'
)
New-BGInfo `
-FilePath 'C:\Wallpapers\Server.jpg' `
-ConfigurationDirectory 'C:\ProgramData\PowerBGInfo' `
-WallpaperFit Fill `
{
New-BGInfoVisualCanvas `
-Title 'PowerBGInfo' `
-Subtitle 'Server information' `
-Tile $Tiles
}La tuile contient ici :
-LabelLe libellé de la tuile.
-ValueLa valeur principale.
-Side
Le côté du canvas où placer la tuile.
On remarque aussi la syntaxe :
{{HostName}}Ce sont des valeurs résolues par PowerBGInfo.
Ajouter plusieurs tuiles
On peut créer plusieurs tuiles, à gauche ou à droite.
$Tiles = @(
New-BGInfoVisualCanvasTile -Side Left -Label 'HOSTNAME' -Value '{{HostName}}'
New-BGInfoVisualCanvasTile -Side Left -Label 'OS' -Value '{{OSName}}'
New-BGInfoVisualCanvasTile -Side Right -Label 'USER' -Value '{{UserName}}'
)
New-BGInfo -FilePath 'C:\Wallpapers\Server.jpg' -ConfigurationDirectory 'C:\ProgramData\PowerBGInfo' {
New-BGInfoVisualCanvas `
-Title 'Server Context' `
-Subtitle 'PowerBGInfo visual canvas' `
-Tile $Tiles
}Le TP reste court, mais on voit déjà le principe :
- un tableau de tuiles ;
- un canvas ;
- un fond d’écran généré.
Options utiles des tuiles
Les tuiles ne se pilotent pas avec des paramètres -Width et -Height.
Leur rendu dépend du canvas et des options prévues pour les tuiles.
Les options les plus utiles sont :
-Side
-IconKind
-SurfaceStyle
-Label
-Value
-Detail
-Progress
-AccentExemple :
New-BGInfoVisualCanvasTile `
-Side Left `
-IconKind Storage `
-SurfaceStyle Raised `
-Label 'SYSTEM DRIVE' `
-Value '62% free' `
-Progress 0.62 `
-Accent '#0EA5E9FF'Ce genre de tuile est beaucoup plus lisible qu’une ligne de texte.
Elle permet d’afficher :
- une information principale ;
- un contexte ;
- un état visuel ;
- un accent couleur.
SurfaceStyle
-SurfaceStyle permet de choisir le style visuel de la tuile.
Les styles utiles sont notamment :
Glass
Outline
RaisedExemple :
New-BGInfoVisualCanvasTile `
-Side Left `
-IconKind Computer `
-SurfaceStyle Outline `
-Label 'HOSTNAME' `
-Value '{{HostName}}'Le choix du style doit rester sobre.
Sur un fond sombre, Outline ou Glass fonctionne bien.
Sur un fond plus chargé, Raised peut améliorer la lisibilité.
IconKind
-IconKind permet d’ajouter une icône à la tuile.
Exemples utiles :
Computer
Network
OperatingSystem
Cpu
Memory
User
Domain
Terminal
Storage
ShieldExemple :
New-BGInfoVisualCanvasTile `
-Side Right `
-IconKind Cpu `
-SurfaceStyle Outline `
-Label 'CPU' `
-Value '{{CpuLogicalCores}} threads'Les icônes ne doivent pas décorer pour décorer.
Elles doivent aider à lire plus vite.
Progress
-Progress permet d’ajouter une indication de progression.
Exemple :
New-BGInfoVisualCanvasTile `
-Side Right `
-IconKind Shield `
-SurfaceStyle Raised `
-Label 'PATCH STATUS' `
-Value '94% compliant' `
-Progress 0.94La valeur attendue est comprise entre 0 et 1.
C’est adapté pour :
- conformité patching ;
- espace disque ;
- progression de déploiement ;
- état global d’un contrôle.
Mini charts dans les tuiles
Les tuiles peuvent aussi afficher un mini chart.
C’est utile pour montrer une tendance courte sans créer un gros graphique.
Exemple :
New-BGInfoVisualCanvasTile `
-Side Right `
-IconKind Cpu `
-SurfaceStyle Glass `
-Label 'CPU LOAD' `
-Value '33% active' `
-Detail 'Recent activity' `
-MiniChartKind Area `
-MiniChartValues 18,26,22,37,48,43,51,35,29,41,33 `
-MiniChartMaximum 100Un mini chart doit rester un complément.
Il sert à donner un signal visuel rapide, pas à remplacer un dashboard.
Bon usage :
- CPU récent ;
- mémoire récente ;
- espace disque ;
- tendance de conformité ;
- activité courte.
Mauvais usage :
- trop de valeurs ;
- trop de tuiles avec des mini charts ;
- mélange entre progress bar et mini chart sans raison claire.
New-BGInfoChart : les graphiques hors canvas
Les mini charts vivent dans les tuiles.
Les BGInfoChart, eux, sont des graphiques indépendants.
Ils se placent directement sur le fond d’écran.
Exemple simple :
New-BGInfo -ConfigurationDirectory 'C:\ProgramData\PowerBGInfo' -BackgroundColor Black {
New-BGInfoValue -BuiltinValue HostName -Color White
New-BGInfoChart `
-Id 'cpu' `
-Title 'CPU' `
-Metric CpuPercent `
-ValueSuffix '%' `
-Kind Sparkline `
-MaxPoints 60 `
-Anchor BottomLeft `
-OffsetX 20 `
-OffsetY 20
}Ici, le graphique affiche une tendance CPU.
Le chart n’est pas dans une tuile. Il est positionné sur le wallpaper avec :
-Anchor
-OffsetX
-OffsetYTypes de graphiques disponibles avec PowerBGInfo
PowerBGInfo s’appuie sur ChartForgeX pour les graphiques.
Les types disponibles couvrent plusieurs besoins :
Sparkline
Line
Area
Bar
HorizontalBar
Gauge
Circle
RadialBar
Bullet
Pie
Donut
ProgressBar
Pictorial
Il ne faut pas tous les utiliser.
Le bon choix dépend du message à afficher.
Sparkline, Line, Area
Pour une tendance.
Exemples :
- CPU sur les dernières exécutions ;
- mémoire ;
- latence ;
- activité récente.
Bar, HorizontalBar
Pour comparer plusieurs valeurs.
Exemples :
- volumes ;
- files d’attente ;
- compteurs applicatifs.
Gauge, Circle, RadialBar
Pour un KPI unique.
Exemples :
- taux d’utilisation ;
- score de conformité ;
- occupation mémoire.
Pie, Donut
Pour une répartition.
Exemples :
- disque utilisé / libre ;
- services running / stopped.
Bullet
Pour comparer une valeur à un objectif.
Exemples :
- conformité patching ;
- SLA ;
- progression de déploiement.
ProgressBar
Pour une progression simple.
Exemples :
- build ;
- sauvegarde ;
- déploiement.
Pictorial
Pour un état visuel très synthétique.
Exemples :
- nombre de services OK / KO ;
- nœuds disponibles / indisponibles.
Exemple Donut
New-BGInfo -ConfigurationDirectory 'C:\ProgramData\PowerBGInfo' -BackgroundColor Black {
New-BGInfoChart `
-Id 'disk-c' `
-Title 'Disk C' `
-Kind Donut `
-Values 72,28 `
-Labels 'Used','Free' `
-ValueSuffix '%' `
-Maximum 100 `
-DonutCenterValue '72%' `
-DonutCenterLabel 'Used' `
-Anchor BottomLeft `
-OffsetX 20 `
-OffsetY 20 `
-NoHistory
}Ce type de graphique est intéressant si l’information doit vraiment être visuelle.
Mais il faut garder la main légère.
Un fond d’écran serveur n’est pas Grafana.
BGInfoTopology
PowerBGInfo permet aussi d’ajouter des topologies.
C’est utile pour représenter une relation entre composants.
Exemple :
New-BGInfo `
-FilePath 'C:\Wallpapers\Server.jpg' `
-ConfigurationDirectory 'C:\ProgramData\PowerBGInfo' `
-Target File `
{
New-BGInfoTopology `
-Title 'Lab topology' `
-Subtitle 'Gateway, API, SQL' `
-Width 560 `
-Height 310 `
-Anchor BottomRight `
-OffsetX 34 `
-OffsetY 34 `
-TopologyDefinition {
New-BGInfoTopologyGroup -Id 'lab' -Label 'Lab Site' -Status Healthy -Symbol region
New-BGInfoTopologyNode -Id 'gateway' -Label 'Gateway' -Kind Network -Status Healthy -GroupId 'lab' -Symbol GW
New-BGInfoTopologyNode -Id 'api' -Label 'API' -Kind Service -Status Healthy -GroupId 'lab' -Symbol API
New-BGInfoTopologyNode -Id 'sql' -Label 'SQL' -Kind Database -Status Warning -GroupId 'lab' -Symbol SQL
New-BGInfoTopologyEdge -SourceNodeId 'gateway' -TargetNodeId 'api' -Label 'HTTPS' -Kind Connectivity -Status Healthy -Direction Forward
New-BGInfoTopologyEdge -SourceNodeId 'api' -TargetNodeId 'sql' -Label '32 ms' -Kind Dependency -Status Warning -Direction Forward
}
}C’est puissant, mais ce n’est pas indispensable pour une première mise en œuvre.
À utiliser si la topologie apporte une vraie information :
- lab ;
- jump server ;
- serveur applicatif avec dépendances ;
- environnement de formation ;
- poste d’exploitation partagé.
Sinon, restez sur les valeurs, les tuiles et un ou deux graphiques.
Utiliser une configuration JSON avec PowerBGInfo
PowerBGInfo peut exporter et rejouer une configuration JSON.
Ce point est important : il ne s’agit pas simplement d’un fichier de paramètres que l’on lit soi-même avec ConvertFrom-Json.
PowerBGInfo sait directement appliquer une configuration JSON avec :
Invoke-BGInfo -Path .\bginfo.jsonPourquoi utiliser du JSON ?
Le JSON devient utile quand on veut séparer deux moments :
- la conception du fond d’écran ;
- son application.
Exemples :
- tâche planifiée ;
- outil RMM ;
- script de build ;
- déploiement sur plusieurs machines ;
- configuration portable ;
- génération sans modifier le script PowerShell.
Le script PowerShell sert à construire ou exporter la configuration.
Le JSON sert ensuite à rejouer cette configuration.
Exporter une configuration JSON
Exemple :
New-BGInfo `
-MonitorIndex 0 `
-JsonPath .\bginfo.json `
-ExportOnly `
{
New-BGInfoValue -BuiltinValue HostName
New-BGInfoValue -BuiltinValue OSName
} `
-ConfigurationDirectory 'C:\ProgramData\PowerBGInfo'-JsonPath indique le fichier JSON à générer.-ExportOnly indique que l’on exporte la configuration sans appliquer le fond d’écran.
Ensuite, pour rejouer cette configuration :
Invoke-BGInfo -Path .\bginfo.jsonCe que le JSON conserve
Le JSON conserve les éléments compris par le moteur PowerBGInfo :
- BuiltInValues ;
- métriques de charts ;
- options de layout ;
- couleurs ;
- polices ;
- paramètres de wallpaper ;
- charts ;
- canvas ;
- tuiles ;
- topologies ;
- options de cible.
Il peut aussi conserver des tokens dynamiques comme :
{{HostName}}
{{OSName}}
{{UserName}}Ce que le JSON ne conserve pas
Le JSON ne conserve pas n’importe quel code PowerShell.
Si vous écrivez une boucle PowerShell classique, elle est exécutée au moment de l’export.
Le résultat peut être écrit dans le JSON, mais pas le code PowerShell lui-même.
Exemple :
foreach ($Disk in Get-Disk) {
# logique PowerShell exécutée au moment de l'export
}Il ne faut donc pas voir le JSON comme un script PowerShell sérialisé.
C’est une configuration PowerBGInfo portable.
Quand rester en PowerShell ?
Restez en PowerShell si :
- vous êtes en phase de test ;
- vous avez besoin de logique dynamique ;
- vous récupérez des données depuis CIM, AD, API ou CMDB ;
- vous construisez encore le rendu.
Quand passer au JSON ?
Passez au JSON si :
- le rendu est stable ;
- vous voulez rejouer la même configuration ;
- vous voulez l’appeler depuis une tâche planifiée ;
- vous voulez fournir un artefact simple à un outil de déploiement ;
- vous voulez limiter la logique exécutée côté serveur.
Conclusion
PowerBGInfo devient beaucoup plus simple quand on le lit dans le bon ordre.
La base, c’est New-BGInfo.
Son cœur, c’est le scriptblock.
Dans ce scriptblock, on ajoute progressivement :
- des labels ;
- des valeurs PowerShell ;
- des BuiltInValues ;
- un canvas ;
- des tuiles ;
- des mini charts ;
- des charts autonomes ;
- éventuellement une topologie ;
- puis une configuration JSON si l’on veut rendre le résultat portable.
Le piège est de vouloir tout utiliser immédiatement.
Pour un fond d’écran serveur, la priorité reste la lisibilité.
Un bon PowerBGInfo ne doit pas impressionner.
Il doit permettre de comprendre rapidement sur quelle machine on se trouve, dans quel contexte, et avec quelles informations utiles.