Powershell : 4 scripts amusants pour apprendre à s’en servir

Powershell est un Invite de commandes, mais aussi un langage de programmation qui permet d’automatiser des tâches, de trier des quantités ahurissantes de données à la volée, mais aussi de s’amuser ! Dans ce dossier nous vous montrons quatre exemples de scripts amusants et plutôt utiles, à minima pour apprendre à dompter le nouvel Invite de commandes.

Powershell remplace désormais l’Invite de commandes classique (cmd) par défaut depuis la mise à jour de Windows 10 Creators Update. Ce programme permet de faire tout ce que pouvait faire Cmd, mais autorise aussi bien les développeurs chevronnés ou les codeurs en herbe à créer des petits scripts par curiosité ou pour réellement coder et simplifier votre utilisation de l’ordinateur. Nous avons essayé à travers ces quelques scripts de vous montrer des exemples aussi instructifs qu’amusants.

Powershell : la boucle des étoiles

Ce petit script permet de s’initier au fonctionnement des boucles. Copiez-le et lancez-le dans une fenêtre de Powershell pour voir directement le résultat :

$i="*"
Do {
$i="$i*"
$i
}
While ($true)

Vous comprenez mieux pourquoi nous avons appelé cette boucle la “boucle des étoiles”. Pour interrompre le programme tapez sur les touches Ctrl + C de votre clavier. Ce petit code est assez amusant, mais peut faire des choses plus utiles. Vous pouvez par exemple remplacer l’étoile par ce que bon vous semble. Mais aussi d’autres éléments, voire des nombres :

$i=1
Do {
$i
$i++
}
While ($i -le 10)

La boucle va alors afficher le nombre contenu dans $1 et ajouter 1 tant que la valeur de $i est inférieure à 10 (d’où le $i -le 10 à la fin, -le signifiant lesser ou inférieure à en anglais). Il est aussi possible de transformer cela en compte à rebours en remplaçant le ++ à côté du $i qui vous l’aurez compris est une variable, par un --. Il faut aussi changer la valeur de départ à 10, et mettre 0 à la fin si vous voulez avoir un compte à rebours façon décollage de fusée.

Et si vous voulez que le rendu de chaque itération soit moins rapide, par exemple que l’affichage de chaque nombre soit séparé d’une seconde, vous pouvez alors ajouter une commande pour mettre le programme en pause pendant un nombre défini de millisecondes à chaque boucle :

$i=10
Do {
$i
$i--
Start-Sleep -m 1000
}
While ($i -ge 0)

Enfin, si vous voulez ajouter un bip à chaque exécution du petit bout de code de la boucle, ajoutez [console]::beep(440,100) où 440 est la fréquence en Hz du son (c’est un La) et 100 est la durée de lecture. Ce qui donne le code suivant :

$i=10
Do {
$i
$i--
[console]::beep(440,100)
Start-Sleep -m 1000
}
While ($i -ge 0)

Notez que dans le cas du compte à rebours, le While (tant que…) ne peut jouer la boucle tant que la valeur de $i est “inférieure à 0”, puisque la valeur de $i commence à 10. Il faut donc remplacer à la dernière ligne -le par -ge qui signifie greater than ou supérieur à en Français.

Faites de la musique avec Powershell

Et si on vous disait que vous pouvez faire de la musique avec Powershell ? Un des exemple les plus ludiques pour s’initier au langage de programmation de Powershell, c’est de programmer des morceaux de musique. Copiez directement le code des chansons dans une fenêtre Powershell et tapez Entrée pour les exécuter.

“La Marche Impériale”

[console]::beep(440,500)
[console]::beep(440,500)
[console]::beep(440,500)
[console]::beep(349,350)
[console]::beep(523,150)
[console]::beep(440,500)
[console]::beep(349,350)
[console]::beep(523,150)
[console]::beep(440,1000)
[console]::beep(659,500)
[console]::beep(659,500)
[console]::beep(659,500)
[console]::beep(698,350)
[console]::beep(523,150)
[console]::beep(415,500)
[console]::beep(349,350)
[console]::beep(523,150)
[console]::beep(440,1000)

“Mission Impossible”

[console]::beep(784,150)
Start-Sleep -m 300
[console]::beep(784,150)
Start-Sleep -m 300
[console]::beep(932,150)
Start-Sleep -m 150
[console]::beep(1047,150)
Start-Sleep -m 150
[console]::beep(784,150)
Start-Sleep -m 300
[console]::beep(784,150)
Start-Sleep -m 300
[console]::beep(699,150)
Start-Sleep -m 150
[console]::beep(740,150)
Start-Sleep -m 150
[console]::beep(784,150)
Start-Sleep -m 300
[console]::beep(784,150)
Start-Sleep -m 300
[console]::beep(932,150)
Start-Sleep -m 150
[console]::beep(1047,150)
Start-Sleep -m 150
[console]::beep(784,150)
Start-Sleep -m 300
[console]::beep(784,150)
Start-Sleep -m 300
[console]::beep(699,150)
Start-Sleep -m 150
[console]::beep(740,150)
Start-Sleep -m 150
[console]::beep(932,150)
[console]::beep(784,150)
[console]::beep(587,1200)
Start-Sleep -m 75
[console]::beep(932,150)
[console]::beep(784,150)
[console]::beep(554,1200)
Start-Sleep -m 75
[console]::beep(932,150)
[console]::beep(784,150)
[console]::beep(523,1200)
Start-Sleep -m 150
[console]::beep(466,150)
[console]::beep(523,150)

Composez votre propre création

Comme vous pouvez le voir en décortiquant la commande on a [console]::beep avec deux chiffres entre parenthèse. Le chiffre de gauche désigne la fréquence du son (par exemple 440 Hz pour un La), et le chiffre de droite, la durée pendant laquelle le son doit être joué (en millisecondes). Dans Mission Impossible on voit également que les sons sont entrecoupés de la commande Start-Sleep -m 150. Celle ci signifie “ne fais plus rien pendant X ms” : parfait pour introduire des silences ! C’est à vous – n’hésitez pas à partager vos créations dans les commentaires !

Faites parler Powershell

Il est aussi possible de transformer du texte en synthèse vocale directement dans Powershell. Pour cela, il faut d’abord charger le module de synthèse vocale en lançant cette commande, puis créer un nouvel objet $speak qui permettra de simplifier son utilisation. Tout cela est somme toute assez simple, copiez les deux lignes suivantes et exécutez-les dans Powershell :

Add-Type -AssemblyName System.speech
$speak = New-Object System.Speech.Synthesis.SpeechSynthesizer

Vous pouvez alors faire parler la synthèse vocale de Powershell :

$speak.Speak("Je donne ma langue au chat")

Il est même possible de transformer à la volée vos phrases en un fichier WAV. Il faut pour cela en quelque sorte ouvrir/commencer l’enregistrement de votre fichier sur votre disque dur en modifiant la commande suivante, puis en l’exécutant. “Fermez” ensuite le fichier une fois que vous aurez fini avec une autre commande pour pouvoir ensuite le lire dans le programme de votre choix :

$speak.SetOutputToWaveFile("C:\users\LE\CHEMIN\QUE\VOUS\AUREZ\CHOISI\test.wav")

Lancez ensuite quelques $speak.Speak() contenant des phrases que vous souhaitez transformer en synthèse vocale, puis exécutez cette commande pour fermer le fichier :

$speak.Dispose()

Si la voix ne vous plaît pas, vous pouvez consulter la liste des voix installées en exécutant la commande :

$speak.GetInstalledVoices().VoiceInfo

Copiez le nom de la voix et collez-le dans cette commande pour la changer :

$speak.SelectVoice('LA VOIX QUE VOUS AVEZ CHOISIE')

Rangez votre bureau Windows 10 avec un script

Ce petit script qui vient de Reddit (merci à u/Zazierx !) est si pratique que nous ne résistons pas à le partager avec vous. Il permet à la fois de s’initier aux opérateurs conditionnels (le code est relativement clair et simple à lire) et à ranger le bureau de Windows 10 dans des dossiers par types de fichier. Copiez et collez le code suivant dans une fenêtre de Powershell puis exécutez-le :

$pathToUse = "C:\Utilisateurs\$env:username\Bureau"
$video = @(
'3g2','3gp','3gpp','asf','avi','divx','f4v',
'flv','h264','ifo','m2ts','m4v','mkv','mod','mov',
'mp4','mpeg','mpg','mswmm','mts','mxf','ogv','rm',
'srt','swf','ts','vep','vob','webm','wlmp','wmv'
)
$spreadsheets = @(
'csv','ods','xls','xlsx'
)
$images = @(
'arw','bmp','cr2','crw','dcm','dds','djvu','djvu',
'dmg','dng','fpx','gif','ico','ithmb','jp2','jpeg',
'jpg','nef','nrw','orf','pcd','pict','png','psd',
'sfw','tga','tif','tiff','webp','xcf'
)
$presentations = @(
'key','odp','pps','ppsx''ppt','pptm','pptx'
)
$docs = @(
'chm','doc','docm','docx','dot','dotx','eml','eps',
'hwp','log','m3u','odt','pages','pdf','pub','rtf',
'sxw','txt','wpd',' wps','xml','xps'
)
$cadFiles = @(
'dwg','dxf'
)
$misc = @(
'bin','cda','dat','dll','exe','isc',
'img','inf','ipa','kmz','lnk','pes',
'ps','rem','torrent','ttf','vcf'
)
$ebooks = @(
'azw','azw3','epub','fb2''lit','lrf','mbp','mobi',
'opf','prc'
)
$web = @(
'css','htm','html','js','json','php'
)
$arcs = @(
'7z','apk','bz2','cbr','gz','gzip','jar','rar',
'tar','tgz','zip','war'
)
$scripts = @(
'bat','cmd','vb','vbs','vbe','js',
'jse','ws','wsf','wsc','wsh','ps1',
'ps1xml','ps2','ps2xml','psc1','psc2','sql'
)
$files = Get-ChildItem -Path $pathToUse
Foreach ($x in $files){
if($docs.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Documents" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Documents"
}
elseif($spreadsheets.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Spreadsheets" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Spreadsheets"
}
elseif($images.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Images" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Images"
}
elseif($presentations.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Presentations" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Presentations"
}
elseif($video.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Videos" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Videos"
}
elseif($cadFiles.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "CAD Files" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"CAD Files"
}
elseif($misc.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Misc" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Misc"
}
elseif($ebooks.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "E-Books" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"E-Books"
}
elseif($web.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Web" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Web"
}
elseif($arcs.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Archives" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Archives"
}
elseif($scripts.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Scripts" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Scripts"
}
elseif($x.Directory){
New-Item -ItemType Directory -Path $pathToUse -Name "Other - misc" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Other - misc"
}
else{
Write-Host $x
}
}

Avec quelques petites modifications, vous pourrez ranger n’importe quel dossier sans efforts. Connaissez-vous d’autres scripts Powershell amusants ? Partagez-les dans les commentaires de cet article !


Réagissez à cet article !

Demandez nos derniers tutos !

Samsung Galaxy S24 Ultra et S25 Ultra : la dernière mise à jour détraque encore l’autonomie des smartphones, voici la solution

Les Galaxy S24 Ultra et Galaxy S25 Ultra sont de nouveau victimes d’un problème de batterie qui se vide anormalement vite. Il est très probable que le bug soit le…

La Voie lactée aurait fait un quart de tour sur elle-même en emportant le Système solaire

Le halo d’étoiles entourant notre galaxie tourne beaucoup trop lentement. Des simulations sur supercalculateur viennent d’attribuer cette lenteur à un choc frontal très ancien. Le Soleil n’aurait alors pas conservé…

N’attendez pas pour mettre à jour votre iPhone, le dernier patch d’iOS corrige plus de 70 failles de sécurité

Apple vient de déployer une nouvelle mise à jour pour iOS et iPadOS qui vient corriger 78 failles de sécurité. Parmi elles, on trouve des vulnérabilités particulièrement sérieuses qui permettraient…

Silo : on sait quand Apple TV diffusera la saison 4 et c’est une excellente nouvelle

La saison 3 de Silo n’est pas encore terminée que nous avons déjà une date de sortie pour la quatrième et dernière saison. Les fans vont être ravis : cette…

Après l’attaque d’une IA lâchée sans surveillance, Nvidia lève une armée de 52 entreprises

Les modèles d’OpenAI ont attaqué seuls les serveurs d’une entreprise en juillet. Nvidia riposte aujourd’hui en réunissant plus de cinquante sociétés autour d’outils ouverts. Trois des plus grands laboratoires américains…

Cette nouveauté du Google Play Store va plaire aux utilisateurs français

Google va permettre d’utiliser la recherche vocale sur le Play Store dans une autre langue que l’anglais. Le français sera proposé. Sur smartphone, nous avons de moins en moins le…

WhatsApp lance les appels vocaux et vidéo sur le web

WhatsApp annonce l’intégration des appels vocaux et vidéo pour sa version web, ainsi que des fonctionnalités comme le transfert d’appel ou la salle d’attente. WhatsApp Web est pratique pour envoyer…

TV 4K Hisense 65A6S : grosse chute de prix sur cette télévision pour le dernier jour des soldes

Et si vous profitiez des vacances pour regarder les films et séries que vous n’avez pas le temps de regarder le reste de l’année ? Pour le faire dans de…

MacBook Neo : son prix baisse enfin pour le dernier jour des soldes d’été, vite !

Depuis sa sortie, le MacBook Neo est réputé pour son rapport qualité-prix imbattable, même face à des équivalents PC. Et le meilleur moment pour se l’offrir au prix le plus…

Orange et Bouygues Telecom offrent 200 Go de data aux abonnés concernés par les incendies en Gironde et dans les Landes

Orange et Bouygues Telecom ont annoncé débloquer une enveloppe de 200 Go de données mobiles pour leurs clients touchés par les incendies qui ravagent la Gironde et les Landes. Les…