Powershell

Windows 7 inclut en standard un outil étonnant et détonnant: Powershell.
Celui-ci est une version améliorée du Bash Dos/Windows des versions précédentes de l’OS de Microsoft, et il a été porté sous Linux. Je me suis demandé ce qu’il avait dans le ventre, et en 3h d’apprentissage je suis arrivé à la conclusion que c’est un outil super-puissant, bien documenté et pour lequel on trouve plein d’infos sur les forums !

J’avais 4h pour faire un poc faisant appel à un webservice en powershell, et aucune connaissance. Après 15′ de recherche, j’ai trouvé plein de tutoriels et cours, du genre apprenez Powershell en 6 mois… en 2 mois… No Way ! je veux l’apprendre en 2h max ! et je suis tombé sur ce site:
https://technet.microsoft.com/en-us/scriptcenter/dd742419

Sur ce site, on trouve 5 vidéos (Windows PowerShell: Learn It Now Before It’s an Emergency), assez bien faites mais avec plein de bla-bla. J’ai regardé les 5h en 1h en avance rapide (tout n’est pas utile), puis j’ai débuté par du code.

Il existe une documentation bien fournie chez Microsoft, tel que https://technet.microsoft.com/en-us/library/hh849901.aspx, et plein de forum… mais comme le produit en est à la version 5, il faut bien veiller à croiser les sources, vérifier les dates et prendre les dernières manières de faire, simple et efficaces.

Au final, je vous soumet un petit programme, qui permet d’afficher l’heure de départ du prochain train CFF pour votre destination favorite, ainsi que les pronostiques: changement de quai, retards, occupation…
Le programme n’est pas solide, pas de tolérance aux erreurs de saisie, erreurs webservice, réseau, etc… mais je vous laisse le compléter et me transmettre vos meilleurs patches ? 😉

Sauvez le code suivant dans un fichier “ProchainTrain.ps1”,
puis créez un raccourci Windows tel que:
powershell.exe -executionpolicy bypass  -NonInteractive c:\…\ProchainTrain.ps1 -queryFrom Lausanne -queryTo Geneve

param (
 [string] $queryFrom,
 [string] $queryTo
)
function getData($from, $to) {
 $uri = "http://transport.opendata.ch/v1/connections?from=$from&to=$to&fields[]=connections/from/prognosis&fields[]=connections/from/departure&limit=1";
 $response = Invoke-WebRequest -Uri $uri -MaximumRedirection 0 -ErrorAction SilentlyContinue 
 return $response.Content
}

# Interrogation webservice
$json = getData $queryFrom $queryTo

# Parse le JSON
# exemple: {"connections":[{"from":{"departure":"2016-11-02T10:38:00+0100","prognosis":{"platform":null,"arrival":null,"departure":null,"capacity1st":1,"capacity2nd":1}}}]}
$x = $json | ConvertFrom-Json
$from=$x.Connections[0].from

# Construit le pronostique
$msg="Prochain départ: " + $from.departure.Substring(11, 8)
$msg=$msg + "`nPronostiques:"
if (![string]::IsNullOrEmpty($from.prognosis.platform)) { $msg=$msg + "`n Plateforme: " + $from.prognosis.platform }
if (![string]::IsNullOrEmpty($from.prognosis.arrival)) { $msg=$msg + "`n Arrival: " + $from.prognosis.arrival }
if (![string]::IsNullOrEmpty($from.prognosis.departure)) { $msg=$msg + "`n Departure: " + $from.prognosis.departure }
if (![string]::IsNullOrEmpty($from.prognosis.capacity1st)) { $msg=$msg + "`n Capacity1st: " + $from.prognosis.capacity1st + "/3"}
if (![string]::IsNullOrEmpty($from.prognosis.capacity2nd)) { $msg=$msg + "`n Capacity2nd: " + $from.prognosis.capacity2nd + "/3"}

# Affichage dialogue
$wshell = New-Object -ComObject Wscript.Shell
$wshell.Popup($msg,0,"Prochain départ CFF $queryFrom-$queryTo",0x0)

Leave a Reply

Your email address will not be published. Required fields are marked *