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 :
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.
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.
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 :