Aller au contenu

Windows : Fond d'écran technique

·
powershell outil
Jérémy Norgol
Auteur
Jérémy Norgol
Consultant ingénieur Linux Devops

Un fond d’écran Windows personnalisé avec infos techniques
#

Ah, Citrix Receiver. Vous savez, ce petit logiciel de virtualisation qui transforme vos ordinateurs / Vms en une machine virtuelle dédiée. Les ingés infras l’adorent, les utilisateurs… bon, disons qu’ils l’apprécient quand ça marche bien. Mais il y a une fonctionnalité que beaucoup de tech' trouve plutôt cool : la personnalisation du fond d’écran du bureau avec des informations techniques. Un truc pratique pour savoir en un coup d’œil sur quelle VM on travaille. Et bien, pourquoi ne pas faire la même chose, mais cette fois pour vos postes ?

Le Script Powershell Magique
#

Laissez-moi vous présenter mon petit bijou, un script Powershell qui fait exactement ça. Imaginez : vous allumez votre ordinateur et BAM ! Votre fond d’écran Windows est mis à jour avec tout un tas d’infos comme le nom de votre ordinateur, les adresses IP de vos interfaces réseau, et pourquoi pas le titre de la partition en cours (si vous gérer du multi-boot). Qui a dit que l’informatique ne pouvait pas être stylée ?

Non seulement c’est pratique pour les ingénieurs, mais cela peut aussi donner un petit coup de pouce aux utilisateurs qui ne savent jamais sur quelle machine ils sont vraiment en train de travailler quand on est en support. Allez sans plus attendre je vous partage tout ça.

Un aperçu du script
#

#On se déplace dans le répertorie Pictures

Set-Location $env:USERPROFILE\Pictures
# Récupérer les informations
$computerName = $env:COMPUTERNAME
$ipAddresses = Get-NetIPAddress -AddressFamily IPV4 |Select-Object InterfaceAlias, IPAddress

#Réalisation de l'image
Add-Type -AssemblyName System.Drawing

$imagePath = "$env:USERPROFILE\Pictures\Templates\Wallpaper-black.png"
$imageLockScreen = "$env:USERPROFILE\Pictures\Templates\Wallpaper.png"
#$bitmap = New-Object System.Drawing.Bitmap 1920, 1080
$bitmap = [System.Drawing.Bitmap]::FromFile($imagePath)
$bitmap.Save("$env:USERPROFILE\Pictures\generate.png")

#Taille de l'image

$graphics = [System.Drawing.Graphics]::FromImage($bitmap)
#$graphics.Clear([System.Drawing.Color]::White) #Couleur de fonds
$MainFont = New-Object System.Drawing.Font("Arial", 10) #Police et taille du texte
$brush = [System.Drawing.Brushes]::White #Couleur du texte
$Title =  bcdedit /enum '{current}' |Select-String 'description' |ForEach-Object { $_.Line.Split(' ').Where({ $_ -ne 'description' }) -join ' ' }
$graphics.DrawString($Title, $MainFont, $brush, 500, 10)
$font = New-Object System.Drawing.Font("Consolas", 6) #Police et taille du texte

$graphics.DrawString("Ordinateur: $computerName", $font, $brush, 400, 890)

#Position et texte
$y = 920
foreach ($ip in $ipAddresses) {
    $text = "Interface $($ip.InterfaceAlias): $($ip.IPaddress)"
    $graphics.DrawString("$text", $font, $brush, 400, $y)
    $y += 20 
}
$imageResult = "$env:USERPROFILE\Pictures\generate.png"
$bitmap.Save($imageResult)

$graphics.Dispose()
$bitmap.Dispose()


### Application du fond d'écran
# -- LOCK SCREEN --

Add-Type -TypeDefinition @"
using System;
using System.Runtime.InteropServices;

public class Wallpaper { 
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern int
    SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);
}
"@

[Wallpaper]::SystemParametersInfo(0x0014, 0, $imageLockScreen, 0x002)

#Desktop Screen

Add-Type -TypeDefinition  @"

using System;
using System.Runtime.InteropServices;

public class Wallpaper { 
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern int
    SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);
}
"@

$SPI_SETDESKWALLPAPER = 20
$UpdateIniFile = 2
$SendWinIniChange = 1

$null = [Wallpaper]::SystemParametersInfo($SPI_SETDESKWALLPAPER, 0, $imageResult, $UpdateIniFile -bor $SendWinIniChange)

Set-ItemProperty -Path 'HKCU:\Control Panel\Desktop' -Name WallpaperStyle -Value 10
Set-ItemProperty -Path 'HKCU:\Control Panel\Desktop' -Name TileWallpaperStyle -Value 0

Quelques explications
#

Ce script commence par vous amener directement dans votre répertoire “Pictures”, là où la magie opère. Ensuite, il récupère des infos comme le nom de l’ordinateur et les adresses IP, et les intègre joliment sur une image que vous avez choisie comme fond d’écran.

Ensuite, grâce à quelques lignes de code en Powershell, le script applique ce fond d’écran personnalisé à la fois sur votre écran de verrouillage et sur votre bureau. Plus d’excuses pour ne pas savoir sur quelle machine vous travaillez, ou quel réseau vous utilisez. Tout est là, devant vous, en haute définition 😜

  • Je vous laisse savourer le avant/après:

Et après ?
#

Le mieux dans tout ça ? Il ne reste plus qu’à personnaliser ce script selon vos besoins, peut-être ajouter quelques informations supplémentaires comme le nom de la session, le type de réseau, ou pourquoi pas, la météo (soyons fous !). Et ensuite, intégrez-le dans une GPO (Group Policy Object) pour qu’il s’applique automatiquement à chaque démarrage de session.

🎉 Voilà, y’a plus qu’à l’ajouter à vos automatisations ! 🎉

Articles connexes

ArgoCD de A à Y
Quentin Joly
kubernetes tutoriel outil lien externe
L’auto-hébergement facile avec Cloudron
Korben Info
outil lien externe
Récupérez vos fichiers perdus ou écrasés avec RecoverPy sur Linux
Korben Info
linux outil lien externe