Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici

S'amuser avec PowerShell

PowerShell en musique

PowerShell peut utiliser votre poste pour émettre un simple bip. Il pourra prendre différentes tonalités, ce qui nous permettra de créer une mélodie.

Nous utiliserons pour cela la classe Console et la méthode Beep.

La syntaxe sera la suivante :

[console]::beep(<Tonalité>,<Durée de la tonalité>) 

Ci-dessous un exemple :

[console]::beep(440,850) 

Ci-dessous quelques mélodies en PowerShell :

Game of Thrones

Function GOT{ 
[console]::beep(700,990) 
[console]::beep(450,990) 
[console]::beep(550,150) 
[console]::beep(620,150) 
[console]::beep(700,850) 
[console]::beep(450,850) 
[console]::beep(550,150) 
[console]::beep(620,150) 
[console]::beep(520,990) 
sleep -Milliseconds 200 
[console]::beep(620,990) 
[console]::beep(420,800) 
[console]::beep(520,150) 
[console]::beep(550,150) 
[console]::beep(620,990) 
[console]::beep(420,800) 
[console]::beep(550,150) 
[console]::beep(520,150) 
[console]::beep(450,800) 
} 

Star Wars : thème de Dark Vador

Function Vador{ 
[console]::beep(440,850) 
[console]::beep(440,850) 
[console]::beep(440,850) 
[console]::beep(349,850) 
[console]::beep(523,250) 
[console]::beep(440,450) 
[console]::beep(349,850) 
[console]::beep(523,250) 
[console]::beep(440,990) 
[console]::beep(659,600) ...

Faire parler PowerShell

Voyons maintenant comment faire parler PowerShell, ou plus précisément comment utiliser la synthèse vocale pour lire du texte.

Cela pourra être plus utile que le point précédent par exemple pour ajouter des statuts vocaux à vos scripts, tels que « Telle application a été installée ».

Pour cela, nous utiliserons tout d’abord l’assembly System.speech.

Add-Type -AssemblyName System.speech 

Nous créerons un objet SpeechSynthesizer.

$Talk = New-Object System.Speech.Synthesis.SpeechSynthesizer 

Nous utiliserons ensuite les propriétés et méthodes suivantes :

  • Rate : spécifie la vitesse de lecture de la voix.

  • Volume : spécifie le volume de la voix.

  • Voice : spécifie la voix à utiliser.

  • SelectVoice : méthode pour sélectionner la voix.

  • Speak : méthode pour lancer la lecture d’un texte.

Le texte que nous ferons lire à PowerShell sera "Bienvenue dans notre livre. Apprenons PowerShell ensemble".

Associons-le à une variable.

$Texte = "Bienvenue dans notre livre. Apprenons PowerShell ensemble". 

Nous allons ensuite choisir la voix à utiliser.

Pour lister les voix existantes :

$Langages = $Talk.GetInstalledVoices().VoiceInfo 

Ce qui donnera :

images/37RI01.png

Nous avons donc ici deux voix : une voix féminine et une voix...

Récupérer vos coordonnées géographiques

Il peut parfois être utile de récupérer les coordonnées géographiques de votre poste ou d’un poste distant.

Cela est utilisé dans le portail Intune pour afficher la localisation d’un poste de votre organisation, par exemple en cas de vol ou de perte.

Nous allons donc utiliser PowerShell pour obtenir les coordonnées géographiques de notre propre ordinateur. Il faudra tout d’abord activer les services de localisation du poste.

Les paramètres de localisation peuvent être modifés en cliquant sur le panneau de notification (à côté de l’heure) puis sur le bouton Emplacement.

images/37RI02.png

Nous allons maintenant utiliser PowerShell pour récupérer les coordonnées GPS actuelles du poste.

 Chargez l’assembly System.Device.

Add-Type -AssemblyName System.Device 

 Créez un objet GeoCoordinateWatcher pour vérifier la localisation.

$GeoLocation = New-Object System.Device.Location.GeoCoordinateWatcher 

 Démarrez la recherche de localisation.

$GeoLocation.Start() 

 La propriété Permission devra retourner un statut Granted et non Denied pour fonctionner.

images/37RI03.png

Une fois le statut à Ready et les permissions à Granted, la localisation peut être récupérée en utilisant les propriétés...

Afficher l’adresse de localisation du poste

Nous avons précédemment récupéré les coordonnées GPS du poste (latitude et longitude).

Nous allons maintenant récupérer l’adresse complète du poste à partir de ces coordonnées. Il existe pour cela différents sites internet. Nous utiliserons dans notre exemple le site geocode.xyz.

La récupération de l’adresse se fait en utilisant l’URL suivante :

"https://geocode.xyz/" + "$Latitude,$Longitude" + "?geoit=json" 

Récupérons donc à nouveau ces coordonnées.

Add-Type -AssemblyName System.Device 
$GeoLocation = New-Object  
System.Device.Location.GeoCoordinateWatcher 
$GeoLocation.Start() 
$GPS_Location = $GeoLocation.Position.Location 
$Latitude = $GPS_Location.Latitude 
$Longitude = $GPS_Location.Longitude 

Nous allons ensuite interroger l’URL à l’aide de la cmlet Invoke-RestMethod

$Location = "https://geocode.xyz/" + "$Latitude,$Longitude" +  
"?geoit=json" 
Invoke-RestMethod $Location 

Ci-dessous le script complet :

Add-Type -AssemblyName System.Device 
$GeoLocation = New-Object  
System.Device.Location.GeoCoordinateWatcher 
$GeoLocation.Start() 
$GPS_Location = $GeoLocation.Position.Location 
$Latitude = $GPS_Location.Latitude ...

Afficher les coordonnées GPS dans une carte

Nous avons récupéré les coordonnées GPS. Maintenant, au lieu d’afficher l’adresse dans PowerShell, nous allons afficher l’emplacement dans une carte sur Google Maps.

L’URL Google Maps que nous utiliserons est la suivante : https://www.google.com/maps?q=$Latitude,$Longitude

Ci-dessous la récupération des coordonnées GPS :

Add-Type -AssemblyName System.Device 
$GeoLocation = New-Object System.Device.Location.GeoCoordinateWatcher 
$GeoLocation.Start() 
$GPS_Location = $GeoLocation.Position.Location 
$Latitude = $GPS_Location.Latitude 
$Longitude = $GPS_Location.Longitude 

L’affichage dans Google Maps se fera en utilisant la commande :

Start-Process https://www.google.com/maps?q=$Latitude,$Longitude 

Ci-dessous le résultat dans Maps :

images/37RI06.png