Forcer la cmdlet PowerShell Invoke-RestMethod à utiliser TLS 1.2

Si vous avez des scripts PowerShell qui utilisent Invoke-RestMethod, vous allez sûrement avoir besoin de changer le comportement par défaut.

Je viens d'avoir le problème sur un script qui interroge l'API de Github.

A l'exécution du script j'avais cette erreur :

Invoke-RestMethod : The request was aborted: Could not create SSL/TLS secure channel.

Github a en effet prévenu qu'il désactiverait les connexions sur TLS 1.0 / 1.1 au 1er février 2018. (https://githubengineering.com/crypto-deprecation-notice/)

Par défaut PowerShell utilise la version 1.0 de TLS. Pour régler ce problème il faut ajouter la ligne suivante au début de votre script et tout va rentrer dans l'ordre :

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Dans le cas de PowerShell Core la variable ci-dessus n'existe plus, par contre, la commande Invoke-RestMethod a été augmentée et vous pouvez utiliser le paramètre -SslProtocol :

Invoke-RestMethod -Method POST -Body $Body -Uri $Uri -SslProtocol Tls12