Choisir entre Power Automate, PowerShell et le Planificateur de tâches — connecter les outils d'automatisation là où ils excellent, sans les mélanger

· · Power Automate, PowerShell, Planificateur de tâches, Windows, SharePoint, Automatisation des processus métier, Conseil technique

« Sur le serveur de la comptabilité, un traitement de nuit en PowerShell tourne depuis près de dix ans. Récemment, en parallèle, des personnes du terrain ont commencé à créer des flux de demande et de notification avec Power Automate. Deux filières « d’automatisation » qui n’ont ni la même façon d’être construites ni le même emplacement se multiplient dans l’entreprise, et on ne sait plus avec quel outil créer une nouvelle automatisation, ni même qui a une vue d’ensemble. » Nous recevons de plus en plus souvent ce type de consultation de la part de PME ayant déjà adopté Microsoft 365.

PowerShell + le Planificateur de tâches et Power Automate sont tous deux des outils pour « faire automatiquement un travail défini », mais leurs domaines de prédilection se recoupent à peine. Précisément parce qu’ils ne se recoupent pas, forcer tout vers l’un des deux devient pénible, et mélanger sans fixer de frontière produit un assemblage impossible à maintenir. Cet article met d’abord en ordre la différence de nature entre les deux outils, puis explique le critère de choix pour décider avec lequel construire, ainsi que les schémas de connexion pour les faire cohabiter. La conception d’ensemble de Power Automate est traitée dans « Automatiser les processus métier avec Power Automate — Flux cloud, flux de bureau et gestion robuste des erreurs », et l’initiation à PowerShell lui-même dans « Les bases des commandes PowerShell — les opérations à connaître d’abord et une utilisation sûre » ; nous nous concentrons donc ici sur « le critère de choix » et « la connexion » entre les deux.

1. La conclusion, d’abord

  • Le premier critère de décision est l’emplacement de la cible. Si la cible est un fichier local, un dossier partagé, un serveur ou l’OS, la ligne de base est PowerShell + le Planificateur de tâches ; si la cible est une donnée sur Microsoft 365 (SharePoint, Outlook, Teams, etc.) accompagnée de notifications ou d’approbations, la ligne de base est Power Automate.
  • Le point faible de PowerShell est la notification aux personnes. La cmdlet classique Send-MailMessage est officiellement dépréciée (obsolete), et il n’existe pas d’alternative directe au sein de PowerShell.1 Il est plus économique de confier les notifications et les approbations à Power Automate.
  • Le point faible de Power Automate est l’atteinte de l’environnement local et les gros volumes de données. Pour qu’un flux cloud atteigne un serveur de fichiers interne, une passerelle de données locale ou une connexion à un flux de bureau est nécessaire, et l’une comme l’autre sortent du droit d’utilisation fourni avec Microsoft 365 (fonctionnalités premium).234
  • Pour connecter les deux, le premier candidat est un couplage faible où PowerShell dépose un fichier de résultat sur SharePoint, et Power Automate le détecte via le déclencheur « Lorsqu’un fichier est créé (propriétés uniquement) » (When a file is created (properties only) dans l’UI anglaise) pour enchaîner vers une notification ou une approbation.5
  • Power Automate for desktop dispose d’une action « Exécuter un script PowerShell », permettant d’appeler un script existant depuis un flux. Cependant, l’appel depuis un flux cloud est une fonctionnalité premium, et la gestion de la machine d’exécution devient également nécessaire.64
  • L’historique d’exécution d’un flux cloud n’est visible que 28 jours par défaut.7 Pour un traitement nécessitant une trace, conservez-la via un fichier de log côté PowerShell ou en la réécrivant dans une liste SharePoint.
  • Au final, ce n’est pas une question technique : construire avec l’outil pour lequel il y a quelqu’un capable d’en assurer la maintenance est souvent la bonne réponse. Une automatisation que seul son créateur sait réparer présente le même risque, quel que soit l’outil.

2. La nature des deux outils

Commençons par confirmer que les deux appartiennent à des terrains de jeu séparés.

Aspect PowerShell + Planificateur de tâches Power Automate (flux cloud)
Lieu d’exécution PC/serveur Windows interne Le cloud Microsoft
Cibles de prédilection Fichiers locaux, dossiers partagés, CSV/logs, bases de données, opérations OS et services SharePoint, Outlook, Teams, Forms et autres SaaS de la sphère M365
Mode de démarrage Déclenchement horaire du Planificateur de tâches, manuel Déclencheurs événementiels (réception d’e-mail, création de fichier, etc.), planification, manuel
Notification et approbation Point faible (voir plus loin) Point fort. Actions Teams/Outlook/approbation disponibles
Qui le crée Le service informatique ou une personne sachant écrire des scripts Peut être créé même par une personne du terrain qui s’y connaît
Gestion de la plateforme d’exécution À sa charge (s’occuper du serveur) Non nécessaire (le cloud s’en occupe)
Gestion des changements Fichier texte, donc facile à gérer sous Git et à réviser par différences Gestion pseudo-versionnée par export (zip). La procédure est détaillée plus loin dans cette section8
Coût supplémentaire Fonctionne avec seulement Windows et PowerShell Les connecteurs standard entrent dans le droit d’utilisation M365. L’atteinte locale, le RPA et le HTTP relèvent de la couche premium3

Un complément sur la ligne « Gestion des changements » du tableau. Exporter un flux consiste à se connecter au portail Power Automate, à sélectionner le flux visé dans la navigation de gauche sous « Mes flux » > « Flux cloud », puis à choisir « Package (.zip) » depuis la flèche vers le bas à côté de « Exporter » dans le menu. Ce que l’on récupère est un package zip, peu adapté à une revue de différences ligne par ligne comme pour un script. L’export est en outre réservé au propriétaire ou aux copropriétaires du flux. Pour une gestion de versions continue, Microsoft recommande d’utiliser l’ALM via les solutions Dataverse plutôt que l’export/import de packages.8

L’important, c’est que « le lieu d’exécution » et « qui le crée » diffèrent tous deux entre les deux colonnes de ce tableau. PowerShell + le Planificateur de tâches tourne sur une machine interne, est créé par une personne sachant coder, et se gère comme du code. Power Automate tourne dans le cloud, peut être créé même par une personne du terrain qui s’y connaît, sans avoir à se soucier de la plateforme d’exécution. Autrement dit, cette coexistence des deux n’est pas un simple doublon d’outils : c’est la coexistence de deux cultures, « l’automatisation du service informatique » et « l’automatisation du terrain ». C’est justement pour cela qu’imposer une unification vers l’un des deux par simple décret échoue le plus souvent.

3. Le tableau de décision : avec quoi construire ?

Lorsque nous recevons une consultation, nous tranchons selon trois critères : « où se trouve la cible », « qui la crée et la maintient », et « une notification ou une approbation à une personne est-elle nécessaire ». C’est plus rapide à voir avec des exemples concrets, d’où ce tableau de décision.

Exemple de travail à automatiser Cible Créateur principal Outil adapté Raison
Exporter un CSV du système central la nuit, le transformer et le déposer dans un dossier partagé Local/serveur Service informatique PowerShell + Planificateur de tâches Le traitement de fichiers/BD est rapide et fiable avec un script. Atteindre depuis le cloud nécessite une passerelle2
Investigation et archivage de vieux logs, surveillance de l’espace disque Serveur/OS Service informatique PowerShell + Planificateur de tâches Les opérations OS sont le métier de base de PowerShell. La méthode de construction est détaillée dans l’article sur la maintenance des logs
Rapprochement et agrégation d’un CSV de plusieurs centaines de milliers de lignes Fichier Service informatique PowerShell Les boucles d’un flux ne conviennent pas aux gros volumes. Il existe aussi une limite du nombre d’actions3
Enregistrer sur SharePoint le PDF joint à un e-mail de bon de commande, et notifier le responsable Cloud M365 Terrain/Service informatique Power Automate E-mail, SharePoint et Teams sont le terrain de jeu par excellence des connecteurs standard
Recevoir une demande Forms et la faire circuler vers l’approbation du supérieur Cloud M365 Terrain Power Automate Les actions d’approbation sont une force propre à Power Automate
Rappeler en fin de mois les dossiers non traités d’une liste SharePoint Cloud M365 Terrain Power Automate Cas typique de déclenchement planifié + notification. Détaillé dans l’article sur les flux d’exécution périodique
Annoncer chaque matin sur Teams le résultat du traitement de nuit Les deux à la fois Service informatique + terrain Connexion (chapitre 6) Le traitement en PowerShell, la notification en Power Automate

En parcourant les colonnes verticalement, on voit que l’outil se décide presque de manière biunivoque avec la colonne « cible ». L’exception est le dernier cas, à cheval — « le traitement est local, la notification est cloud » —, précisément le cas d’usage des schémas de connexion du chapitre 6.

À l’inverse, les choix suivants finissent par devenir pénibles.

  • Faire glisser jusqu’au traitement de fichiers vers Power Automate pour la seule raison qu’on veut une notification. Introduire une passerelle ou du RPA pour atteindre l’environnement local augmente les licences et le périmètre à gérer (chapitre 5).
  • Faire créer par le service informatique, en PowerShell, un flux de demande SharePoint utilisé par le terrain. C’est possible, mais écrire en code l’écriture sur SharePoint ou la notification Teams demande beaucoup d’efforts pour peu de bénéfice, et cela finit en pièce unique que le terrain ne peut pas modifier lui-même.
  • Choisir au cas par cas selon le responsable, sous prétexte que les deux permettent de le faire. Cela mène directement au problème de maintenance abordé au chapitre 7. Fixer une seule règle interne du type « si la cible est ici, l’outil est celui-là » suffit déjà à limiter considérablement le désordre de la coexistence.

4. Les limites du côté PowerShell

Les notifications par e-mail et Teams sont pénibles

Dès qu’une demande du type « prévenez-moi par e-mail une fois terminé » s’ajoute à un traitement de nuit PowerShell, les choses se compliquent soudainement. La cmdlet Send-MailMessage, utilisée depuis longtemps, est officiellement dépréciée (obsolete) au motif qu’elle ne garantit pas une connexion sécurisée au serveur SMTP, et son avertissement précise explicitement qu’« il n’existe pas d’alternative directe au sein de PowerShell ». Les alternatives présentées sont la bibliothèque tierce MailKit, ou le SDK PowerShell Microsoft Graph (Send-MgUserMail) pour les utilisateurs d’Exchange Online.1

L’envoi via Graph fonctionne, mais il faut assumer une préparation conséquente pour un seul besoin de notification : enregistrement d’une application auprès de Microsoft Entra ID, octroi d’autorisations (scopes), gestion d’un certificat ou d’un secret. Il en va de même pour les notifications Teams : appeler directement depuis du code impose un seuil d’entrée élevé côté authentification. Ici, la recommandation la plus simple est de confier les notifications à Power Automate. Avec les actions standard Outlook et Teams, on peut les mettre en place en quelques minutes, sans enregistrement d’application supplémentaire.

Les « tâches sauvages » qui tournent sur le PC d’un responsable

Un incident classique de l’automatisation via le Planificateur de tâches est le cas où la tâche a été implantée non pas sur un serveur, mais sur le PC d’un responsable. Elle ne tourne plus si la personne éteint son PC en partant, et elle s’arrête discrètement en cas de changement de mot de passe de l’utilisateur d’exécution ou de départ de la personne. De plus, comme le Planificateur de tâches se trouve localement sur chaque machine, il n’existe aucun endroit où lister ce qui tourne, et où, dans l’entreprise.

Le remède est modeste mais tient en trois points : (1) regrouper les tâches à exécution planifiée sur un serveur défini (à défaut, un PC d’administration toujours allumé) ; (2) documenter la liste des tâches avec leur objectif et leur responsable ; (3) conserver la définition de la tâche elle-même sous forme de script, par exemple via Register-ScheduledTask, pour pouvoir la reconstituer même si la machine change.9 Même si le script lui-même est géré sous Git, si la configuration côté Planificateur de tâches (heure de démarrage, utilisateur d’exécution, dossier de travail) reste manuelle, l’environnement ne pourra pas être reconstitué.

Le stockage des identifiants

Lorsqu’un script se connecte à une base de données ou à un service externe, la question de savoir où placer le mot de passe se pose toujours. Écrire en dur dans le .ps1 est hors de question ; la réponse standard de PowerShell est le module SecretManagement associé à l’extension SecretStore. On peut ainsi stocker les secrets chiffrés localement et les récupérer depuis le script avec Get-Secret.10 La configuration à utiliser pour une exécution sans surveillance via le Planificateur de tâches (paramétrage dans le contexte du compte d’automatisation) est également documentée officiellement.11 Notez que cet ensemble de modules est désormais considéré comme « fonctionnellement complet » : le développement de nouvelles fonctionnalités est terminé, mais le support des correctifs de sécurité continue.10

Power Automate, en revanche, conserve l’authentification vers les connecteurs (les connexions) côté plateforme, ce qui évite à celui qui construit le flux d’avoir à se soucier de ce problème. C’est une force cachée de Power Automate, mais cela crée en contrepartie un autre problème de gestion : les connexions sont liées au compte du propriétaire du flux. Ce point est traité dans « La dépendance à une seule personne dans Power Automate — pour que les flux ne s’arrêtent pas quand leur créateur quitte l’entreprise ».

5. Les limites du côté Power Automate

Impossible d’atteindre un fichier local ou un environnement local

Comme un flux cloud tourne dans le cloud Microsoft, il n’atteint pas directement, tel quel, un dossier partagé du réseau interne ou une base de données locale. Il existe principalement deux moyens d’y parvenir.

  1. La passerelle de données locale. Installer une application résidente dans l’entreprise pour servir de pont avec le cloud. L’ouverture d’un port entrant n’est pas nécessaire, seule une connexion sortante suffit à faire fonctionner l’ensemble, ce qui en fait un mécanisme relativement sûr.12 Elle permet une connexion vers le système de fichiers ou SQL Server via la passerelle, mais son utilisation nécessite une licence prenant en charge la passerelle.2
  2. Via un flux de bureau (RPA). Appeler, depuis un flux cloud, un flux de bureau tournant sur un PC, en lui confiant le traitement local. Ce « déclenchement/cette exécution planifiée d’un flux de bureau depuis un flux cloud » est en soi une fonctionnalité premium.4

Le point important, c’est que dans les deux cas, cela sort du droit d’utilisation Power Automate fourni avec Microsoft 365. Le droit d’utilisation intégré à Microsoft 365 (seeded license) ne comprend ni les connecteurs premium, ni la passerelle locale, ni le RPA.3 Autrement dit, « je veux traiter les fichiers du dossier partagé avec Power Automate » est une demande plus coûteuse qu’il n’y paraît. Les niveaux de licence et la frontière entre standard et premium sont détaillés dans « Les licences Power Automate et la frontière entre connecteurs standard et premium », à consulter avant de trancher.

Deux solutions réalistes sans coût supplémentaire existent : déplacer le stockage des fichiers concernés vers SharePoint/OneDrive, ou confier le traitement du dossier partagé à PowerShell et ne faire porter à Power Automate que le travail côté cloud. La seconde est le schéma de connexion du chapitre suivant.

Les gros volumes de données et la logique complexe sont pénibles

Traiter, ligne par ligne dans une boucle de flux, un CSV de plusieurs centaines de milliers de lignes n’est pas ce pour quoi Power Automate est conçu. Il existe aussi une limite du nombre d’exécutions d’actions par jour selon la licence, fixée à 6 000 actions par utilisateur et par jour pour le droit d’utilisation fourni avec Microsoft 365.3 Le rapprochement, l’agrégation et la transformation de gros volumes sont des traitements que PowerShell ou .NET peuvent terminer en quelques minutes. Pour des exemples concrets d’écriture, les combinaisons de Group-Object et Compare-Object traitées dans « Recueil de commandes PowerShell pratiques — étoffer les petites fonctionnalités souvent utilisées au quotidien » s’appliquent directement.

Par ailleurs, une logique où les branchements conditionnels s’empilent en profondeur devient difficile à lire à l’écran d’un flux, et ne peut pas être testée. La limite d’une exécution de flux cloud, plafonnée à 30 jours au maximum13, se fait sentir pour une attente d’approbation, mais bien avant cela, « une logique dont le schéma des branchements ne tient pas sur une feuille A4 » relève du domaine du code.

L’historique d’exécution disparaît au bout de 28 jours

L’historique d’exécution d’un flux cloud n’est visible que pendant 28 jours par défaut.7 Pour une exigence du type « vérifier trois mois plus tard si le traitement de tel jour a bien tourné », l’historique d’exécution ne suffit pas. Avec PowerShell, on peut écrire soi-même un fichier de log et le conserver pendant des années (cette conception est détaillée dans l’article sur la maintenance des logs). Si une trace est nécessaire avec Power Automate, intégrez dans le flux lui-même une étape qui réécrit le résultat du traitement dans une liste SharePoint. Pour la conception complète incluant notification en cas d’erreur et nouvelles tentatives, consultez « La gestion des erreurs et la conception des tentatives dans Power Automate ».

6. Les schémas de connexion pour mélanger les deux

Puisque les domaines de prédilection des deux ne se recoupent pas, il y aura forcément des tâches à cheval, du type « le traitement en PowerShell, la notification ou l’approbation en Power Automate ». Il existe trois schémas de connexion.

Schéma a : couplage faible via un fichier (recommandé)

PowerShell, exécuté par le Planificateur de tâches, dépose le résultat du traitement (CSV de résultat, fichier de synthèse) dans une bibliothèque SharePoint, et Power Automate le détecte via le déclencheur « Lorsqu’un fichier est créé (propriétés uniquement) » du connecteur SharePoint, pour enchaîner vers une notification ou une approbation. Ce déclencheur est un véritable déclencheur du connecteur standard, et les changements sont typiquement détectés en quelques minutes (le mécanisme reposant sur un sondage périodique côté SharePoint, la détection n’est pas instantanée).5

Si la langue d’affichage du locataire est l’anglais, ce nom en français ne permettra pas de le retrouver ; nous indiquons donc aussi le nom en UI anglaise. Utilisez-le pour la recherche dans la liste des déclencheurs.5

UI japonaise (nom d’origine) UI anglaise Remarque
ファイルが作成されたとき(プロパティのみ) When a file is created (properties only) Se déclenche à la création d’un fichier dans la bibliothèque. Ne renvoie que les propriétés du fichier
ファイルが作成または変更されたとき(プロパティのみ) When a file is created or modified (properties only) Se déclenche aussi sur une modification de propriété, en plus de la création. En indiquant « Folder », on peut restreindre la cible à un seul dossier
項目が作成されたとき When an item is created La version pour les éléments d’une liste SharePoint
ファイルが削除されたとき When a file is deleted Détection de suppression. Récupérer les propriétés nécessite une connexion en tant qu’administrateur de collection de sites

Notez que le déclencheur au nom proche « ファイルが作成されたとき(フォルダー内)» (When a file is created in a folder) est déprécié, avec entre autres la contrainte de ne pas se déclencher dans les sous-dossiers : ne le choisissez pas pour une nouvelle construction.5

Le schéma suivant représente le déroulement de ce modèle. Le Planificateur de tâches démarre le script PowerShell à 02:00 → le script effectue l’agrégation, le traitement de fichiers et la sortie de logs, puis produit un CSV de résultat et une synthèse → ceux-ci sont déposés dans une bibliothèque SharePoint → ce dépôt est détecté par le déclencheur « Lorsqu’un fichier est créé », ce qui démarre le flux cloud → le flux examine le contenu de la synthèse, et en cas de fin normale, notifie l’achèvement sur Teams ; en cas d’erreur, notifie le responsable et, si nécessaire, l’oriente vers un flux d’approbation ou de traitement — un flux à sens unique.

Fin normaleErreur présentePlanificateur de tâches démarrage 02:00Script PowerShellAgrégation, traitement de fichiers, sortie de logsProduction du CSV de résultat et de la synthèseDépôt dans la bibliothèque SharePointDémarrage du flux cloudLorsqu'un fichier est crééContenu de la synthèseNotification d'achèvement sur TeamsNotification au responsableSi nécessaire, orientation vers approbation/traitement

La méthode de dépôt de PowerShell vers SharePoint se choisit selon la manière dont la tâche est exécutée. Configurer le dossier de sortie comme cible de synchronisation OneDrive/SharePoint (le script se contentant d’écrire dans un dossier local) est la méthode la plus simple, mais le client de synchronisation est une application qui tourne dans la session utilisateur connectée. Pour une tâche de nuit configurée en « s’exécuter que l’utilisateur soit connecté ou non », ou sur un serveur où personne n’est connecté, la synchronisation ne fonctionne pas, et le fichier écrit localement n’est jamais téléversé, si bien que le flux ne se déclenche pas non plus — un coup dans le vide. Pour une petite exploitation de jour sur un PC surveillé par une personne, la synchronisation suffit amplement, mais pour une exécution nocturne et sans surveillance, utilisez plutôt PnP.PowerShell ou l’API Graph pour téléverser directement depuis le script, ou bien préparez une session qui reste connectée pour la synchronisation et incluez-la dans ce qui est surveillé. Cela ajoute de la préparation côté authentification, mais permet d’éliminer par construction le problème du « fichier censé être là mais absent ».

PnP.PowerShell est un module PowerShell open source produit par la communauté (et non un produit officiel Microsoft) permettant d’opérer SharePoint Online, Teams et d’autres services de Microsoft 365. Il comporte plus de 700 cmdlets et permet de téléverser des fichiers ou de manipuler des listes directement depuis un script. Cependant, alors qu’il était auparavant possible de se connecter facilement via une application Entra ID partagée, cette application a été retirée en septembre 2024, rendant désormais obligatoire l’enregistrement, par l’utilisateur lui-même, de sa propre application Entra ID. Ce n’est plus « installer le module suffit à le faire fonctionner » : prévoyez, au moment de décider de son adoption, l’effort d’enregistrement d’application et d’octroi d’autorisations.14

La raison de recommander ce schéma est que la frontière est fixée sous une forme visible : le fichier. Le côté PowerShell ignore l’existence de Power Automate, et le côté Power Automate ignore le contenu du script. Quand l’un des deux tombe en panne, il suffit de vérifier si le fichier existe sur SharePoint pour identifier immédiatement de quel côté vient le problème. On peut aussi séparer les responsables : le script au service informatique, le flux de notification à la personne du terrain qui s’y connaît. De plus, le fichier lui-même déposé fait aussi office de trace, comblant le problème des 28 jours d’historique d’exécution.7

Schéma b : appeler PowerShell depuis Power Automate for desktop

Power Automate for desktop (PAD) dispose d’une action « Exécuter un script PowerShell (Run PowerShell script) », qui permet d’exécuter n’importe quel code PowerShell depuis un flux de bureau, et de récupérer la sortie via une variable (PowershellOutput).6 Cela permet d’appeler un actif de script existant comme composant du flux, dans une architecture où « le traitement lui-même reste un script, et seuls le démarrage et les opérations d’écran avant/après sont confiés à PAD ».

Cette action ne comporte que trois paramètres de configuration.6

Paramètre (libellé de la documentation officielle) Valeur par défaut Contenu
PowerShell code to run Le corps du code PowerShell à exécuter. Insérer une variable du flux la fait s’y développer avant l’exécution de PowerShell
Fail after timeout Booléen indiquant s’il faut imposer une limite de temps
Timeout 10 Nombre maximal de secondes à attendre l’achèvement. -1 signifie illimité

La sortie est récupérée via deux variables : PowershellOutput (la sortie du script) et ScriptError (les erreurs survenues pendant l’exécution). Pour renvoyer une valeur au flux, la méthode officielle consiste à la passer à Write-Output côté PowerShell.6

# Exemple minimal destiné à être collé dans le champ « PowerShell code to run » de l'action PAD.
# %InputFolder% est une variable côté PAD, remplacée par une chaîne avant que PowerShell ne s'exécute
$targetFolder = '%InputFolder%'
$count = (Get-ChildItem -LiteralPath $targetFolder -Filter '*.csv' -File).Count

# Le contenu renvoyé via Write-Output se retrouve dans la variable PowershellOutput
Write-Output $count

Autrement dit, vu du côté PAD, ce composant n’a que deux points d’entrée/sortie : l’entrée est « une variable insérée dans le corps du code », la sortie est « la chaîne PowershellOutput ». Comme la valeur de retour n’est pas structurée et revient sous forme de chaîne, si vous voulez renvoyer plusieurs valeurs, l’architecture consiste à les regrouper dans une ligne CSV ou en JSON, puis à analyser PowershellOutput en aval. Avec, en plus, un délai d’expiration par défaut de seulement 10 secondes, cette action ne convient pas à un usage où l’on « fait porter tout le corps du traitement de nuit par cette seule action ». Pour un traitement long, tenez compte aussi des points de vigilance ci-dessous avant de trancher.

Il y a cependant trois points de vigilance. Premièrement, cette action démarre en interne powershell.exe, c’est-à-dire Windows PowerShell 5.1.15 Un script écrit en partant du principe de PowerShell 7 risque de ne pas fonctionner tel quel. Deuxièmement, il existe un réglage de délai d’expiration (valeur par défaut : 10 secondes), qu’il faut explicitement allonger ou rendre illimité pour appeler un traitement long. Troisièmement, si vous souhaitez l’exécuter sans surveillance à heure fixe, le déclenchement depuis un flux cloud est une fonctionnalité premium4, et une licence d’exécution sans surveillance ainsi qu’une gestion de la machine d’exécution deviennent également nécessaires. Il vaut mieux évaluer froidement si « payer un coût supplémentaire pour exécuter à heure fixe avec PAD plutôt qu’avec le Planificateur de tâches » en vaut la peine. Cela peut devenir une option pour une entreprise qui exploite déjà du RPA (opérations d’écran) avec PAD et dispose donc déjà de la plateforme d’exécution, mais sinon, le schéma a suffit.

Schéma c : recevoir une requête HTTP via une API maison

Il s’agit de doter un flux d’une URL via le déclencheur « Lorsqu’une requête HTTP est reçue (When an HTTP request is received) » du flux cloud, et de l’appeler avec Invoke-RestMethod côté PowerShell pour le démarrer — ou, à l’inverse, de monter une petite API web interne que le flux appelle. Ce déclencheur relève du connecteur premium de requête/réponse HTTP.16 Un mécanisme d’authentification OAuth est également prévu pour restreindre l’appelant (par exemple, aux seuls utilisateurs du locataire).17

C’est le schéma le plus flexible, avec une forte réactivité en temps réel et la possibilité de transmettre des paramètres, mais la gestion des URL, l’authentification et la retransmission en cas d’erreur font d’un coup basculer dans le domaine du développement. Arrivé à ce point, ce n’est plus une simple « connexion entre Power Automate et PowerShell », mais un petit développement de système, dont il faut décider s’il sera pris en charge en interne ou si sa conception sera confiée à un tiers.

En résumé : d’abord le schéma a, puis b si la plateforme PAD existe déjà, et c uniquement lorsque l’exigence de temps réel est clairement établie. La conception du couplage faible s’applique plus largement aux intégrations par fichier ; les bonnes pratiques d’exclusion mutuelle et de remise sont aussi traitées dans « Les bases du contrôle d’exclusion pour l’intégration de fichiers - bonnes pratiques de verrouillage de fichiers et de claim atomique ».

7. Le problème du « personne ne maîtrise les deux »

Nous avons jusqu’ici écrit des critères de décision sous l’angle technique, mais ce qui compte finalement le plus sur le terrain, c’est « qui peut en assurer la maintenance ». Une personne sachant écrire du PowerShell au service informatique, une personne sachant manipuler Power Automate sur le terrain, et personne qui maîtrise les deux : c’est la norme dans une PME.

C’est pourquoi, même pour un traitement techniquement mieux adapté à PowerShell, décider de le construire en Power Automate parce que la personne qui sait l’écrire va partir (ou l’inverse) est une décision parfaitement rationnelle. Ce qui compte plus que la supériorité d’un outil, c’est de savoir s’il y aura, dans cinq ans, quelqu’un en interne capable de le réparer. Le tableau de décision (chapitre 3) est « la solution optimale en supposant qu’il y a quelqu’un pour en assurer la maintenance » : en l’absence de cette personne, on ajuste la solution optimale en fonction des personnes disponibles, et non l’inverse.

Cela posé, il y a deux choses à faire, communes aux deux outils.

  • Lister ce qui existe. Rassemblez, dans un même registre, la liste des tâches du Planificateur de tâches (sur quelle machine, à quelle heure, quoi, sous la responsabilité de qui) et la liste des flux Power Automate (propriétaire, connexions, objectif). Le plus dangereux dans une entreprise où les deux filières coexistent, c’est que l’une soit invisible depuis l’autre.
  • Conserver sous une forme transmissible. Les scripts vers Git, les définitions de tâche vers un script d’enregistrement9, les flux vers une configuration de copropriétaires et un export. Une automatisation sans spécifications, c’est la production en série de versions miniatures du système sans code source ni documentation. La conception concrète de la passation côté flux est détaillée dans l’article sur les mesures contre la dépendance à une seule personne.

8. Conclusion

PowerShell + le Planificateur de tâches et Power Automate ne sont pas des outils concurrents, mais des outils séparés dont les périmètres se recoupent à peine. Le local, le serveur, les fichiers et les gros volumes de données pour PowerShell ; les données sur Microsoft 365 et les notifications/approbations pour Power Automate. Cette ligne de base détermine l’emplacement de la plupart des automatisations.

Les tâches à cheval sur la frontière ne devraient pas être forcées vers l’un des deux, mais connectées en couplage faible via un fichier déposé sur SharePoint comme frontière : c’est solide aussi bien du point de vue des licences que de la maintenance. La difficulté de PowerShell en matière de notification (dépréciation de Send-MailMessage) et la difficulté de Power Automate à atteindre l’environnement local (passerelle et RPA en premium) se compensent mutuellement, chacun via le domaine où l’autre excelle.

Et, avec la même importance que le choix des outils, il faut décider dès le départ « qui en assure la maintenance » et « où, quoi, tourne ». La coexistence de deux filières d’automatisation est saine en soi. Seul le mélange désordonné pose problème. Nous recevons aussi volontiers des consultations dès le stade où il s’agit de clarifier la vue d’ensemble des automatisations internes, ou de trancher au cas par cas avec quel outil construire.

Articles connexes

Domaines de conseil associés

合同会社小村ソフト (Komura Software LLC) accompagne, depuis la mise en ordre des traitements par lots internes en PowerShell jusqu’à la revue de conception d’une plateforme d’automatisation incluant Power Automate, en intégrant la question de « avec quel outil construire ».

Références

  1. Microsoft Learn, Send-MailMessage. Sur le fait que la cmdlet Send-MailMessage est dépréciée (obsolete), qu’elle ne garantit pas une connexion sécurisée au serveur SMTP, qu’il n’existe pas d’alternative directe au sein de PowerShell, et que la bibliothèque MailKit ainsi que Send-MgUserMail du SDK PowerShell Microsoft Graph sont présentées comme alternatives.  2

  2. Microsoft Learn, Manage an on-premises data gateway in Power Automate. Sur la possibilité de se connecter, via la passerelle, à des données locales telles que le système de fichiers ou SQL Server, et sur le prérequis d’une licence prenant en charge la passerelle.  2 3

  3. Microsoft Learn, Deep dive on specific licenses. Sur le fait que le droit d’utilisation Power Automate fourni avec Microsoft 365 (seeded license) ne comprend ni les connecteurs premium, ni la passerelle locale, ni le RPA (assisté/sans surveillance), et sur la limite quotidienne de 6 000 actions par utilisateur.  2 3 4 5

  4. Microsoft Learn, Premium RPA features. Sur le fait que le déclenchement et l’exécution planifiée d’un flux de bureau depuis un flux cloud, ainsi que l’accès aux connecteurs premium, sont des fonctionnalités de licence premium.  2 3 4

  5. Microsoft Learn, Microsoft SharePoint Connector in Power Automate. Sur l’existence et le fonctionnement du déclencheur du connecteur SharePoint « When a file is created (properties only) » (« ファイルが作成されたとき(プロパティのみ) » dans l’UI japonaise), sur le nom anglais et le comportement d’autres déclencheurs comme « When a file is created or modified (properties only) », « When an item is created », « When a file is deleted », sur le fait que « When a file is created in a folder » est déprécié (deprecated) et ne se déclenche pas dans les sous-dossiers, et sur le fait que le déclencheur vérifie périodiquement les changements de la liste/bibliothèque, s’exécutant dans la plupart des cas en quelques minutes après le changement.  2 3 4

  6. Microsoft Learn, Scripting actions. Sur l’existence de l’action « Exécuter un script PowerShell (Run PowerShell script) » de Power Automate for desktop, ses paramètres d’entrée (PowerShell code to run / Fail after timeout / Timeout) et leurs valeurs par défaut, le fait que les variables du flux sont évaluées avant l’exécution du code PowerShell, que la sortie revient via les variables PowershellOutput et ScriptError, que renvoyer une valeur depuis le script se fait avec Write-Output, et que les exceptions « Failed to run PowerShell script » et « Failed to run script in the allotted time » sont définies.  2 3 4

  7. Microsoft Learn, Missing runs or triggers history for a flow. Sur le fait que l’historique d’exécution d’un flux cloud n’est conservé que 28 jours par défaut.  2 3

  8. Microsoft Learn, Export and import a non-solution flow. Sur la possibilité d’exporter/importer un flux cloud hors solution sous forme de package (.zip), la procédure (se connecter à Power Automate, sélectionner le flux dans la navigation de gauche sous « Mes flux » > « Flux cloud », choisir « Package (.zip) » depuis la flèche vers le bas à côté de « Exporter » dans le menu), le fait que seuls le propriétaire ou les copropriétaires du flux peuvent l’exporter, et la recommandation d’utiliser Dataverse et les solutions plutôt que l’export/import de packages pour l’ALM d’un environnement Power Platform.  2

  9. Microsoft Learn, Register-ScheduledTask. Sur la possibilité d’enregistrer une définition de tâche du Planificateur de tâches (action, déclencheur, utilisateur d’exécution) via le module ScheduledTasks de PowerShell.  2

  10. Microsoft Learn, Overview of the SecretManagement and SecretStore modules. Sur le stockage chiffré local de secrets via le module SecretManagement et l’extension SecretStore. Le fait que ces modules soient considérés comme fonctionnellement complets, le développement de nouvelles fonctionnalités étant terminé mais le support des correctifs de sécurité et des bogues critiques continuant, est indiqué dans Understanding the SecretManagement module 2

  11. Microsoft Learn, Use the SecretStore in automation. Sur la procédure de configuration de SecretStore dans le contexte utilisateur d’un compte d’automatisation, pour un scénario d’automatisation (exécution sans surveillance). 

  12. Microsoft Learn, What is an on-premises data gateway?. Sur le fait que la passerelle de données locale est une application résidente installée localement, qu’elle ne nécessite pas l’ouverture d’un port entrant, et qu’elle fait le pont avec le cloud uniquement via une connexion sortante. 

  13. Microsoft Learn, Limits of automated, scheduled, and instant flows. Sur le fait qu’une exécution de flux cloud dure au maximum 30 jours. 

  14. Site officiel PnP PowerShell, PnP PowerShell. Sur le fait que PnP PowerShell est un module PowerShell multiplateforme comportant plus de 700 cmdlets pour opérer SharePoint Online, Microsoft Teams et d’autres services (un projet open source de la communauté Microsoft 365 PnP), et sur le fait que l’application Entra ID multi-locataire PnP Management Shell a été supprimée le 9 septembre 2024, rendant obligatoire l’enregistrement, par l’utilisateur lui-même, de sa propre application Entra ID. 

  15. Microsoft Learn, “Failed to run PowerShell script” error when running the Run PowerShell script action. Sur le fait que l’action Run PowerShell script démarre en interne une instance de powershell.exe (Windows PowerShell) pour l’exécution. 

  16. Microsoft Learn, Released version 20191007. Sur le fait que le déclencheur « Lorsqu’une requête HTTP est reçue (When an HTTP request is received) » n’est disponible que via le connecteur premium de requête/réponse HTTP. 

  17. Microsoft Learn, Add OAuth authentication for HTTP request triggers. Sur la configuration d’authentification permettant de restreindre l’appelant du déclencheur de requête HTTP aux utilisateurs du locataire ou à des utilisateurs spécifiques. 

Articles récents partageant les mêmes étiquettes, pour approfondir des sujets proches.

Ces pages replacent le sujet dans un contexte plus large de services et de décisions.

Cet article est directement lié aux services suivants.

Questions fréquentes

Questions souvent posées lors d’une consultation sur le sujet de cet article.

Faut-il automatiser avec Power Automate ou avec PowerShell ?
Le critère de base est l'emplacement de la cible. Si la cible est un fichier local, un dossier partagé, un serveur, une base de données ou une opération de l'OS — bref, un environnement Windows interne — PowerShell + le Planificateur de tâches est souvent plus stable et plus facile à maintenir. Si la cible est une donnée sur Microsoft 365 (SharePoint, Outlook, Teams, etc.) accompagnée de notifications ou d'approbations, les flux cloud Power Automate sont plus adaptés. Il est aussi réaliste de séparer le corps du traitement de la notification : le traitement lourd en PowerShell, la notification ou l'approbation destinée aux personnes en Power Automate.
Est-il difficile d'envoyer des notifications par e-mail ou vers Teams depuis PowerShell ?
La cmdlet Send-MailMessage, longtemps utilisée par défaut, est officiellement dépréciée (obsolete) car elle ne garantit pas une connexion sécurisée au serveur SMTP, et il n'existe pas d'alternative directe au sein de PowerShell. Il existe bien une méthode via Send-MgUserMail du SDK PowerShell Microsoft Graph, mais elle nécessite une préparation (enregistrement d'application, octroi d'autorisations) relativement lourde pour le seul besoin d'une notification. En pratique, une architecture où PowerShell se contente d'écrire le résultat dans un fichier, en laissant à Power Automate la détection et la notification, est plus simple à gérer.
Power Automate peut-il traiter des fichiers dans un dossier partagé local ?
C'est possible, mais pour qu'un flux cloud atteigne un fichier du réseau interne, une passerelle de données locale est nécessaire, et le droit d'utiliser cette passerelle n'est pas inclus dans le droit d'utilisation Power Automate fourni avec Microsoft 365 : une licence de niveau supérieur est requise. Faire appeler un flux de bureau (RPA) depuis un flux cloud est également une fonctionnalité premium. Si vous souhaitez vous en tenir à l'existant sans licence supplémentaire, il est réaliste d'envisager d'abord soit de déplacer les fichiers concernés vers SharePoint/OneDrive, soit de confier le traitement du dossier partagé à PowerShell + le Planificateur de tâches.
Quelle est la façon la plus simple de faire communiquer un traitement de nuit PowerShell avec Power Automate ?
Nous recommandons un couplage faible via un fichier. PowerShell, exécuté par le Planificateur de tâches, dépose un CSV ou un fichier de synthèse du résultat dans une bibliothèque SharePoint, et Power Automate le détecte avec le déclencheur « Lorsqu'un fichier est créé (propriétés uniquement) » pour enchaîner vers une notification ou une approbation. Aucun des deux mécanismes n'a besoin de connaître l'intérieur de l'autre, ce qui rend le diagnostic simple en cas de panne de l'un des deux, et permet aussi de séparer les responsables. Il existe aussi la méthode consistant à appeler directement PowerShell depuis l'action « Exécuter un script PowerShell » de Power Automate for desktop, mais elle ajoute des prérequis de licence et de gestion de machine.

Profil de l’auteur

Page de présentation de l’auteur de l’article.

Go Komura

Représentant de KomuraSoft LLC

Spécialisé dans le développement de logiciels Windows, le conseil technique et l’analyse de pannes, notamment pour les systèmes existants et les incidents difficiles à reproduire.

Retour au blog