Plantage Powershell suite à MAJ Windows KB5072033

Bonjour à tous,
Afin de faire remonter à Jeedom l’état de charge de la batterie de mon PC je m’étais inspiré de ce tuto :

La remontée de l’état de charge la batterie me permet de déclencher l’alimentation du chargeur lorsque la batterie est <= 20% et coupe l’alim à >= 80%.
Mon script :

$Bpourcent = (Get-WmiObject -Class Win32_Battery -ea 0).estimatedChargeRemaining

$Bstatus =  (Get-WmiObject -Class Win32_Battery -ea 0).BatteryStatus

curl http://192.168.0.210/core/api/jeeApi.php?apikey=XXXXXX"&"plugin=virtual"&"type=event"&"id=2895"&"value=$Bpourcent

curl http://192.168.0.210/core/api/jeeApi.php?apikey=XXXXXX"&"plugin=virtual"&"type=event"&"id=2896"&"value=$Bstatus


Jusque là tout fonctionnait parfaitement jusqu’à la MAJ KB5072033 de Windows.

https://support.microsoft.com/fr-fr/topic/9-décembre-2025-kb5072033-builds-de-système-d-exploitation-26200-7462-et-26100-7462-0c1a4334-19ba-406d-bb1e-88fcffc87b79
Or cette MAJ effecte désormais le lancement automatique de Powershell :

[PowerShell 5.1] Invoke-WebRequest inclut désormais une invite de confirmation avec un avertissement de sécurité concernant le risque d’exécution de script. Vous pouvez choisir de continuer ou d’annuler la demande. Pour plus d’informations, consultez CVE-2025-54100 et KB5074596 : PowerShell 5.1 : Prévention de l’exécution de scripts à partir de contenu web.

Du coup Powershell bloque et je n’ai plus de remontées de l’état de la batterie.

Utilisation interactive ou scriptée : L’introduction de cette invite affecte principalement l’utilisation interactive. Dans les sessions interactives, vous verrez l’avertissement et vous devez répondre. Pour les scripts automatisés (scénarios non interactifs tels que les tâches planifiées ou les pipelines CI), cette invite peut entraîner le blocage du script en attendant l’entrée. Pour éviter cela, nous vous recommandons de mettre à jour ces scripts pour utiliser explicitement des paramètres sécurisés (voir ci-dessous), en veillant à ce qu’ils ne nécessitent pas de confirmation manuelle.

Quelqu’un saurait-il comment contourner ce problème (autrement que par la désinstallation de la MAJ qui comporte d’autres corrections de failles de sécurité) ?

Et c’est quoi le ci dessous que lon a pas, c’est peut etre lansolution non ?

1 « J'aime »

C’est expliqué en bas de la page mais je ne suis pas assez calé pour comprendre comment faire …

https://support.microsoft.com/fr-fr/topic/powershell-5-1-invoke-webrequest-empêcher-l-exécution-de-script-à-partir-de-contenu-web-7cb95559-655e-43fd-a8bd-ceef2406b705

Si je comprends bien tu dois rajouter l’option -UseBasicParsing après curl

Donc:

$Bpourcent = (Get-WmiObject -Class Win32_Battery -ea 0).estimatedChargeRemaining

$Bstatus =  (Get-WmiObject -Class Win32_Battery -ea 0).BatteryStatus

curl -UseBasicParsing http://192.168.0.210/core/api/jeeApi.php?apikey=XXXXXX"&"plugin=virtual"&"type=event"&"id=2895"&"value=$Bpourcent

curl -UseBasicParsing http://192.168.0.210/core/api/jeeApi.php?apikey=XXXXXX"&"plugin=virtual"&"type=event"&"id=2896"&"value=$Bstatus

Ok merci beaucoup, je vais essayer ça et je reviens te dire :grinning:

Un peu de lecture :wink:

Je ne connais pas powershell mais aurais tu moyen de passer de la version 5.1 à la 7?

Tu peux aussi voir cela:

Pour les scripts automatisés ou les tâches planifiées, mettez-les à jour pour inclure le paramètre -UseBasicParsing sur les appels Invoke-WebRequest. Cela présélectionne le comportement sécurisé afin que l’invite n’apparaisse pas et que votre script continue à s’exécuter sans interruption. En procédant ainsi, vous vous assurez que votre automatisation s’exécute en toute transparence après la mise à jour tout en tirant parti de l’amélioration de la sécurité.

Pour les scripts qui s’exécutent avec l’option -NoProfile : si le script a de nombreuses occurrences des appels Invoke-WebRequest, déclarez $PSDefaultParameterValues[‹ Invoke-WebRequest :UseBasicParsing ›] = $true en haut du script.

Lorsque Invoke-WebRequest est utilisé avec le paramètre -UseBasicParsing, l’analyse DOM (Full Document Object Model) à l’aide de composants Internet Explorer (interface HTMLDocument (mshtml)) n’est pas possible.

$PSDefaultParameterValues['Invoke-WebRequest :UseBasicParsing'] = $true

Bonjour,

L’ajout de -UseBasicParsing fonctionne et permet donc au script de s’exécuter.

Merci :grinning:

D’accord je vais essayer ça aussi et je reviens faire un feedback

1 « J'aime »

Cette méthode fonctionne aussi :grinning:

1 « J'aime »

Effectivement je peux installer Powershell 7 à côté de Powershell 5.1, il me faudrait alors modifier la commande du planificateur de tâche

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

Je fais une synthèse pour ceux qui connaîtraient le même problème, trois solutions existent :

  • inclusion de -UseBasicParsing après curl ce qui donne curl -UseBasicParsing merci @Noyax37
  • inclusion de $PSDefaultParameterValues['Invoke-WebRequest :UseBasicParsing'] = $true en première ligne du script merci @lperenna
  • Passer à la version 7.x.x de Powershell ce qui nécessite de modifier le chemin d’accès dans le planificateur de tâches merci @Noyax37
2 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.