Power AutomateとPowerShell+タスクスケジューラの使い分け ── 自動化の道具を混ぜずに適材適所でつなぐ

· · Power Automate, PowerShell, タスクスケジューラ, Windows, SharePoint, 業務自動化, 技術相談

「経理サーバーでは10年近く前からPowerShellの夜間バッチが動いている。一方で最近、現場の担当者がPower Automateで申請フローや通知フローを作り始めた。同じ『自動化』なのに作り方も置き場所も全く違う2系統が社内に増えていき、新しい自動化をどちらで作ればいいのか、そもそも誰が全体を把握しているのか分からなくなってきた」。Microsoft 365を導入済みの中小企業から、最近こういう相談をよく受けます。

PowerShell+タスクスケジューラとPower Automateは、どちらも「決まった作業を自動でやる」道具ですが、得意分野はほとんど重なっていません。重なっていないからこそ、無理にどちらかへ寄せると苦しくなりますし、境界を決めずに混ぜると保守できない継ぎ接ぎができあがります。この記事では、両者の性格の違いを整理したうえで、どちらで作るかの判断基準と、混ぜるときの接続パターンを説明します。Power Automate全体の設計論は「Power Automateで業務を自動化する ── クラウドフロー・デスクトップフローの使い分けとエラー処理設計」で、PowerShellそのものの入門は「PowerShellコマンドの基本 ── まず覚える操作と安全な使い方」で扱っているので、ここでは「使い分けの判断」と「連携」に絞ります。

1. まず結論

  • 判断の第一基準は対象がどこにあるかです。ローカルファイル・共有フォルダ・サーバー・OSが対象ならPowerShell+タスクスケジューラ、SharePoint・Outlook・TeamsなどMicrosoft 365上のデータと通知・承認が対象ならPower Automateが基本線です。
  • PowerShellの弱点は人への通知です。定番だったSend-MailMessageは公式に非推奨(obsolete)で、直接の代替はPowerShell内にありません。1 通知・承認はPower Automateに任せるほうが安く済みます。
  • Power Automateの弱点はオンプレミスへの到達と大量データです。クラウドフローから社内のファイルサーバーへ届くにはオンプレミスデータゲートウェイやデスクトップフロー連携が必要で、いずれもMicrosoft 365付属の利用権の外(プレミアム)です。234
  • 両者をつなぐなら、PowerShellが結果ファイルをSharePointに置き、Power Automateが「ファイルが作成されたとき」トリガーで検知して通知・承認へつなぐ疎結合が第一候補です。5
  • Power Automate for desktopには「PowerShellスクリプトの実行」アクションがあり、既存スクリプトをフローから呼べます。ただしクラウドフローからの呼び出しはプレミアム機能で、実行マシンの管理も必要になります。64
  • クラウドフローの実行履歴は既定で28日しか見えません。7 証跡が要る処理は、PowerShell側のログファイルかSharePointリストへの書き戻しで残します。
  • 最後は技術ではなく保守できる人がいるほうで作るのが正解になることも多いです。作った人しか直せない自動化は、道具が何であれ同じリスクです。

2. 2つの道具の性格

まず、両者が別々の土俵の道具であることを確認しておきます。

観点 PowerShell+タスクスケジューラ Power Automate(クラウドフロー)
実行場所 社内のWindows PC/サーバー Microsoftのクラウド
得意な対象 ローカルファイル、共有フォルダ、CSV/ログ、データベース、OS・サービス操作 SharePoint、Outlook、Teams、FormsなどM365と各種SaaS
起動方法 タスクスケジューラの時刻起動、手動 イベントトリガー(メール受信・ファイル作成等)、スケジュール、手動
通知・承認 苦手(後述) 得意。Teams/Outlook/承認アクションが揃う
作る人 情シス・スクリプトを書ける担当者 現場の詳しい担当者でも作れる
実行基盤の管理 自前(サーバーの面倒を見る) 不要(クラウド側が動かす)
変更管理 テキストファイルなのでGit管理・差分レビューがしやすい エクスポート(zip)での擬似的な管理
追加費用 WindowsとPowerShellだけで動く 標準コネクタはM365の利用権の範囲。オンプレ到達・RPA・HTTPはプレミアム層3

大事なのは、この表の左右で「実行する場所」と「作る人」が両方違うことです。PowerShell+タスクスケジューラは、社内のマシンで動き、コードが書ける人が作り、コードとして管理します。Power Automateは、クラウドで動き、現場の詳しい人でも作れて、実行基盤の面倒を見る必要がありません。つまりこの2つの混在は、単なるツールの重複ではなく「情シスの自動化」と「現場の自動化」という2つの文化の併存です。だからこそ、どちらかへの統一を号令だけで進めるとたいてい失敗します。

3. どちらで作るかの判断表

相談を受けたときは、「対象はどこにあるか」「作って保守するのは誰か」「人への通知・承認が要るか」の3つで切り分けています。具体的な業務例で見たほうが早いので、判断表にします。

自動化したい業務の例 対象 主に作る人 向く道具 理由
夜間に基幹システムからCSVを出力し、加工して共有フォルダへ置く ローカル/サーバー 情シス PowerShell+タスクスケジューラ ファイル・DB処理はスクリプトが速く確実。クラウドから届かせるにはゲートウェイが要る2
古いログの調査・アーカイブ、ディスク容量の監視 サーバー/OS 情シス PowerShell+タスクスケジューラ OS操作はPowerShellの本業。作り方はログ整備の記事で扱った通り
数十万行のCSVの突合・集計 ファイル 情シス PowerShell フローのループは大量件数に不向き。アクション数の上限もある3
注文書メールの添付PDFをSharePointへ保存し、担当者へ通知 M365クラウド 現場/情シス Power Automate メール・SharePoint・Teamsは標準コネクタの独壇場
Forms申請を受けて上長の承認へ回す M365クラウド 現場 Power Automate 承認アクションはPower Automate固有の強み
月末にSharePointリストの未処理案件をリマインドする M365クラウド 現場 Power Automate スケジュール起動+通知の典型。定期実行フローの記事で詳述
夜間バッチの結果を毎朝Teamsに知らせる 両方にまたがる 情シス+現場 連携(6章) 処理はPowerShell、通知はPower Automateに分担

列を縦に眺めると、「対象」列とほぼ1対1で道具が決まっていることが分かります。例外は最後の行のような「処理はローカル、通知はクラウド」とまたがるケースで、これが6章の連携パターンの出番です。

逆に、次のような選び方は後で苦しくなります。

  • 通知が欲しいという理由だけで、ファイル処理までPower Automateに寄せる。オンプレ到達のためにゲートウェイやRPAを導入すると、ライセンスと管理対象が増えます(5章)。
  • 現場が使うSharePointの申請フローを、情シスがPowerShellで作る。作れはしますが、SharePointへの書き込みやTeams通知をコードで書くのは手間の割に得るものが少なく、現場が手を入れられない一点物になります。
  • どちらでも作れるからと、担当者ごとにバラバラに選ぶ。7章で触れる保守の問題に直結します。「対象がここなら道具はこれ」という社内ルールを1枚決めておくだけで、混在の無秩序さはかなり抑えられます。

4. PowerShell側の限界

メール・Teams通知がつらい

PowerShellの夜間バッチに「終わったらメールで知らせてほしい」という要望が付いた瞬間、急に話が難しくなります。長年使われてきたSend-MailMessageコマンドレットは、SMTPサーバーへの安全な接続を保証できないという理由で公式に非推奨(obsolete)とされており、警告文には「PowerShell内に直接の代替はない」と明記されています。代替として案内されているのは、サードパーティのMailKitライブラリか、Exchange Online利用者向けのMicrosoft Graph PowerShell SDK(Send-MgUserMail)です。1

Graph経由の送信は動きますが、Microsoft Entra IDへのアプリ登録、権限(スコープ)の付与、証明書またはシークレットの管理と、通知1本のために背負う準備がかなりあります。Teamsへの通知も同様で、コードから直接叩くには認証まわりの敷居が高い。ここは素直に、通知はPower Automateに任せる判断をお勧めします。標準コネクタのOutlook・Teamsアクションなら、追加のアプリ登録なしに数分で組めます。

担当者PCで動く「野良タスク」

タスクスケジューラの自動化でよく見る事故が、サーバーではなく担当者のPCにタスクが仕込まれているケースです。PCをシャットダウンして帰れば動きませんし、実行ユーザーのパスワード変更や退職でひっそり止まります。しかもタスクスケジューラは各マシンのローカルにあるため、社内のどこで何が動いているか、一覧する場所がありません。

対策は地味ですが、(1)定時実行するタスクは決まったサーバー(なければ常時起動の管理用PC)に集約する、(2)タスクの一覧と目的・担当をドキュメント化する、(3)タスク定義自体をRegister-ScheduledTaskなどのスクリプトとして残し、マシンが変わっても再現できるようにする、の3点です。8 スクリプト本体だけGit管理していても、タスクスケジューラ側の設定(起動時刻・実行ユーザー・作業フォルダー)が手作業のままでは、環境の再現ができません。

資格情報の保存

スクリプトがDBや外部サービスに接続する場合、パスワードをどこに置くかという問題が必ず出ます。.ps1への直書きは論外として、PowerShellの標準的な答えはSecretManagementモジュール+SecretStore拡張です。シークレットをローカルに暗号化保存し、スクリプトからはGet-Secretで取り出す形にできます。9 タスクスケジューラからの無人実行で使う場合の構成(自動化アカウントのコンテキストでの設定)も公式に案内されています。10 なお、このモジュール群は現在「機能完成」扱いで新機能の開発は終了していますが、セキュリティ修正のサポートは継続されています。9

一方Power Automateは、コネクタへの接続(認証)をプラットフォーム側が保持するため、この問題を作る側が意識せずに済みます。これはPower Automateの隠れた強みで、逆に言えば接続がフロー所有者のアカウントに紐づくという別の管理問題を生みます。この点は「Power Automateの属人化対策 ── 所有者・接続・引き継ぎの設計」で扱っています。

5. Power Automate側の限界

ローカルファイル・オンプレミスに届かない

クラウドフローはMicrosoftのクラウドで動くため、社内ネットワークの共有フォルダやオンプレミスのDBには、そのままでは届きません。到達手段は主に2つあります。

  1. オンプレミスデータゲートウェイ。社内に常駐アプリをインストールし、クラウドとの橋渡しをさせる方法です。受信ポートの開放が不要で、送信方向の接続だけで動くため安全性は高い仕組みです。11 ファイルシステムやSQL Serverなどへの接続がゲートウェイ経由で可能になりますが、ゲートウェイを使うには対応するライセンスが必要です。2
  2. デスクトップフロー(RPA)経由。クラウドフローからPCで動くデスクトップフローを呼び出し、ローカルの処理を任せる方法です。この「クラウドフローからのトリガー・スケジュール実行」自体がプレミアム機能です。4

重要なのは、どちらもMicrosoft 365付属のPower Automate利用権の外だということです。Microsoft 365に付属する利用権(seeded license)には、プレミアムコネクタ・オンプレミスゲートウェイ・RPAのいずれも含まれません。3 つまり「共有フォルダのファイルをPower Automateで処理したい」は、見た目より高くつく要望です。ライセンスの層と標準/プレミアムの境界は「Power Automateのライセンスと標準/プレミアムコネクタの境界」で整理しているので、判断前に確認してください。

追加費用なしの現実解は2つです。処理対象のファイル置き場をSharePoint/OneDriveへ寄せてしまうか、共有フォルダ側の処理はPowerShellに任せて、Power Automateはクラウド側の仕事だけ受け持つか。後者が次章の連携パターンです。

大量データ・複雑ロジックがつらい

数十万行のCSVを1行ずつフローのループで回すような処理は、Power Automateの設計対象外です。ライセンスごとに1日あたりのアクション実行数の上限もあり、Microsoft 365付属の利用権では1ユーザーあたり6,000アクション/日です。3 大量件数の突合・集計・変換は、PowerShellや.NETで書けば数分で終わる処理でもあります。具体的な書き方は「PowerShell実用コマンド集 ── 日常作業でよく使う小さな機能を増やす」で扱ったGroup-ObjectCompare-Objectの組み合わせがそのまま使えます。

また、条件分岐が深く積み重なるロジックはフローの画面上で読みにくく、テストも書けません。1回の実行が最長30日というクラウドフローの制限12は承認待ちには効いてきますが、それ以前に「分岐を紙に描いてA4に収まらないロジック」はコードの領域です。

実行履歴は28日で消える

クラウドフローの実行履歴は、既定では28日しか表示されません。7 「あの日のバッチが動いたか3か月後に確認したい」という要件には、実行履歴は使えません。PowerShellならログファイルを自分で書いて何年でも残せます(この設計はログ整備の記事で詳述しました)。Power Automateで証跡が要る場合は、処理結果をSharePointリストへ書き戻すステップをフロー自体に組み込みます。エラー時の通知やリトライを含めた作り込みは「Power Automateのエラー処理とリトライ設計」を参照してください。

6. 混ぜるときの接続パターン

両者の得意分野が重ならない以上、「処理はPowerShell、通知・承認はPower Automate」とまたがる業務は必ず出てきます。接続パターンは3つあります。

パターンa: ファイル経由の疎結合(推奨)

タスクスケジューラで動くPowerShellが、処理結果(結果CSV・サマリ)をSharePointライブラリに置き、Power Automate側はSharePointコネクタの「ファイルが作成されたとき(プロパティのみ)」トリガーで検知して、通知や承認へつなぎます。このトリガーは実在する標準コネクタのトリガーで、変更は数分以内を目安に拾われます(SharePoint側の変更をポーリングで確認する方式のため、即時ではありません)。5

正常終了エラーありタスクスケジューラ 02:00起動PowerShellスクリプト集計・ファイル処理・ログ出力結果CSVとサマリを出力SharePointライブラリへ配置クラウドフロー起動ファイルが作成されたときサマリの内容Teamsへ完了通知担当者へ通知必要なら承認・対応フローへ

PowerShellからSharePointへの配置方法は、タスクの実行のされ方で選びます。出力先フォルダーをOneDrive/SharePointの同期対象にしておく方法(スクリプトはローカルフォルダーに書くだけ)が最も簡単ですが、同期クライアントはサインイン中のユーザーセッションで動くアプリです。「ユーザーがログオンしているかどうかにかかわらず実行する」設定の夜間タスクや、誰もサインインしていないサーバーでは同期が動かず、ローカルに書いたファイルがアップロードされないままフローも起動しない、という空振りになります。日中に有人のPCで動かす小規模な運用なら同期で十分ですが、夜間・無人実行が前提なら、PnP.PowerShellやGraph APIでスクリプトから直接アップロードする方法を使うか、同期用にサインインし続けるセッションを用意して監視対象に含めてください。認証の準備は増えますが、「置いたはずのファイルがない」を仕組みで潰せます。

このパターンを推す理由は、境界がファイルという目に見える形で固定されることです。PowerShell側はPower Automateの存在を知らず、Power Automate側はスクリプトの中身を知りません。片方が壊れたとき、SharePointにファイルがあるかどうかを見れば、どちら側の問題か即座に切り分けられます。担当も分けられます。スクリプトは情シス、通知フローは現場の詳しい人、という分業がそのまま成立します。さらに、置いたファイル自体が実行履歴28日問題7を補う証跡としても機能します。

パターンb: Power Automate for desktopからPowerShellを呼ぶ

Power Automate for desktop(PAD)には「PowerShellスクリプトの実行(Run PowerShell script)」アクションがあり、デスクトップフローの中から任意のPowerShellコードを実行して、出力を変数(PowershellOutput)で受け取れます。6 既存のスクリプト資産をフローの部品として呼び出せるため、「処理の本体はスクリプトのまま、起動と前後の画面操作だけPADに任せる」構成が組めます。

ただし注意点が3つあります。第一に、このアクションは内部でpowershell.exe、つまりWindows PowerShell 5.1を起動します。13 PowerShell 7前提で書いたスクリプトはそのままでは動かない可能性があります。第二に、タイムアウトの設定(既定値10秒)があり、長時間のバッチを呼ぶ場合は明示的に延ばすか無制限にする必要があります。6 第三に、これを無人で定時実行したい場合、クラウドフローからのトリガーがプレミアム機能であり4、無人実行のライセンスと実行マシンの管理も必要になります。「タスクスケジューラの代わりにPADで定時実行する」ことに追加費用を払う価値があるかは、冷静に見たほうがよいです。すでにPADでRPA(画面操作)を運用していて実行基盤が整っている会社なら選択肢になりますが、そうでなければパターンaで足ります。

パターンc: HTTP要求を受ける自作API

クラウドフローの「HTTP要求の受信時(When an HTTP request is received)」トリガーでフローにURLを持たせ、PowerShell側からInvoke-RestMethodで叩いて起動する方法、あるいは逆に社内に小さなWeb APIを立ててフローから呼ぶ方法です。このトリガーはプレミアムのHTTP要求/応答コネクタに属します。14 呼び出し元の制限(テナント内ユーザーのみ等)を構成できるOAuth認証の仕組みも用意されています。15

リアルタイム性が高く、パラメータも渡せる最も柔軟なパターンですが、URLの管理・認証・エラー時の再送と、考えることが一気に開発の領域に入ります。ここまで来ると、それはもう「Power AutomateとPowerShellの連携」ではなく小さなシステム開発なので、内製で抱えるか外部に設計を見てもらうかを含めて判断する場面です。

まとめると、まずパターンa、PADの基盤が既にあるならb、リアルタイム性の要件が明確なときだけcです。疎結合の設計はファイル連携一般に通じる話で、排他制御や受け渡しの作法は「ファイル連携の排他制御の基礎知識 - ファイルロックと原子的 claim のベストプラクティス」でも扱っています。

7. 「両方できる人がいない」問題

ここまで技術で判断基準を書いてきましたが、実際の現場で最後に効くのは「誰が保守できるか」です。PowerShellを書ける人が情シスに1人、Power Automateを触れる人が現場に1人、両方分かる人はゼロ。中小企業ではこれが普通です。

そのため、技術的にはPowerShellが向く処理でも、書ける人が退職予定ならPower Automateで作る(あるいはその逆)という判断は、十分に合理的です。道具の優劣より、5年後にそれを直せる人が社内にいるかのほうが重要です。判断表(3章)は「保守できる人がいる前提での最適解」であって、人がいなければ最適解のほうを人に合わせて曲げます。

そのうえで、どちらの道具でも共通してやるべきことが2つあります。

  • 存在の一覧化。タスクスケジューラのタスク一覧(どのマシンで・何時に・何が・誰の管理で動くか)と、Power Automateのフロー一覧(所有者・接続・目的)を、同じ1枚の台帳にまとめます。2系統が混在する会社で一番怖いのは、片方の系統がもう片方から見えないことです。
  • 引き継ぎ可能な形での保存。スクリプトはGitへ、タスク定義は登録スクリプトへ8、フローは共同所有者の設定とエクスポートへ。仕様書のない自動化は、ソースも仕様書もないシステムの小型版が量産されるのと同じことです。フロー側の具体的な引き継ぎ設計は属人化対策の記事にまとめています。

8. まとめ

PowerShell+タスクスケジューラとPower Automateは、競合する道具ではなく、守備範囲がほぼ重ならない別々の道具です。ローカル・サーバー・ファイル・大量データはPowerShellへ、Microsoft 365上のデータと通知・承認はPower Automateへ。この基本線で大半の自動化は置き場所が決まります。

境界をまたぐ業務は、無理にどちらかへ寄せず、SharePointに置いたファイルを境界にした疎結合でつなぐのが、ライセンス面でも保守面でも堅実です。PowerShellの通知のつらさ(Send-MailMessage非推奨)と、Power Automateのオンプレ到達のつらさ(ゲートウェイ・RPAはプレミアム)は、それぞれ相手の得意分野がそのまま補ってくれます。

そして、道具の選定と同じ重さで、「誰が保守するか」「どこに何が動いているか」を最初に決めておくこと。2系統の自動化が混在すること自体は健全です。無秩序に混ざることだけが問題です。社内の自動化の全体像を整理したい、どちらで作るべきか個別に判断してほしいという段階からの相談も承っています。

関連記事

関連する相談領域

合同会社小村ソフトでは、PowerShellによる社内バッチの整備からPower Automateを含む自動化基盤の設計レビューまで、「どの道具で作るべきか」の判断を含めて相談を受けています。

参考リンク

  1. Microsoft Learn, Send-MailMessage. Send-MailMessageコマンドレットが非推奨(obsolete)であり、SMTPサーバーへの安全な接続を保証しないこと、PowerShell内に直接の代替がないこと、代替としてMailKitライブラリやMicrosoft Graph PowerShell SDKのSend-MgUserMailが案内されていることについて。  2

  2. Microsoft Learn, Manage an on-premises data gateway in Power Automate. ゲートウェイ経由でファイルシステムやSQL Server等のオンプレミスデータに接続できること、前提条件としてゲートウェイをサポートするライセンスが必要なことについて。  2 3

  3. Microsoft Learn, Deep dive on specific licenses. Microsoft 365付属のPower Automate利用権(seeded license)にプレミアムコネクタ・オンプレミスゲートウェイ・RPA(有人/無人)が含まれないこと、1日あたりのアクション上限が1ユーザーあたり6,000であることについて。  2 3 4 5

  4. Microsoft Learn, Premium RPA features. クラウドフローからのデスクトップフローのトリガー・スケジュール実行、プレミアムコネクタへのアクセスがプレミアムライセンスの機能であることについて。  2 3 4

  5. Microsoft Learn, Microsoft SharePoint Connector in Power Automate. SharePointコネクタのトリガー「ファイルが作成されたとき(プロパティのみ)」の存在と、トリガーがリスト/ライブラリの変更を定期的に確認する方式で、多くの場合変更から数分以内に実行されることについて。  2

  6. Microsoft Learn, Scripting actions. Power Automate for desktopの「PowerShellスクリプトの実行(Run PowerShell script)」アクションの存在、出力がPowershellOutput変数として返ること、タイムアウト設定(既定値10秒、-1で無制限)について。  2 3

  7. Microsoft Learn, Missing runs or triggers history for a flow. クラウドフローの実行履歴が既定で28日間しか保存されないことについて。  2 3

  8. Microsoft Learn, Register-ScheduledTask. PowerShellのScheduledTasksモジュールでタスクスケジューラのタスク定義(アクション・トリガー・実行ユーザー)を登録できることについて。  2

  9. Microsoft Learn, Overview of the SecretManagement and SecretStore modules. SecretManagementモジュールとSecretStore拡張によるシークレットのローカル暗号化保存について。モジュールが機能完成扱いで新機能開発を終了し、セキュリティ・重大バグ修正のサポートは継続されることはUnderstanding the SecretManagement moduleに記載。  2

  10. Microsoft Learn, Use the SecretStore in automation. 自動化(無人実行)シナリオでSecretStoreを使う際の、自動化アカウントのユーザーコンテキストでの設定手順について。 

  11. Microsoft Learn, What is an on-premises data gateway?. オンプレミスデータゲートウェイがローカルにインストールする常駐アプリであり、受信ポートの開放を必要とせず送信方向の接続だけでクラウドと橋渡しすることについて。 

  12. Microsoft Learn, Limits of automated, scheduled, and instant flows. クラウドフローの1回の実行期間が最長30日であることについて。 

  13. Microsoft Learn, “Failed to run PowerShell script” error when running the Run PowerShell script action. Run PowerShell scriptアクションが内部でpowershell.exe(Windows PowerShell)のインスタンスを起動して実行することについて。 

  14. Microsoft Learn, Released version 20191007. 「HTTP要求の受信時(When an HTTP request is received)」トリガーがプレミアムのHTTP要求/応答コネクタでのみ利用できることについて。 

  15. Microsoft Learn, Add OAuth authentication for HTTP request triggers. HTTP要求トリガーの呼び出し元をテナント内ユーザーや特定ユーザーに制限する認証設定について。 

同じタグを共有する最新の記事です。さらに近い話題で知識を深められます。

タスクスケジューラのタスクが実行されない・0x1で終わる ── 原因の切り分けと安全な運用設計

Windowsタスクスケジューラの実行アカウントとログオン種別、「ユーザーがログオンしているかどうかにかかわらず実行」の意味、0x1で終わる典型原因、履歴の有効化、多重起動防止、PowerShellスクリプトの正しい呼び出し方まで、定期実行を運用に乗せるための設計指針を整理...

このテーマと近いトピックページです。記事を起点に、関連するサービスや他の記事へ進めます。

この記事は次のサービスページにつながります。近い入口からご覧ください。

よくある質問

この記事のテーマについて、相談時によくある質問をまとめています。

Power AutomateとPowerShellはどちらで自動化を作るべきですか?
対象がどこにあるかで分けるのが基本です。ローカルファイル・共有フォルダ・サーバー・データベース・OS操作など社内のWindows環境が対象なら、PowerShell+タスクスケジューラのほうが安定して保守しやすいことが多いです。SharePointやOutlook、TeamsなどMicrosoft 365上のデータと通知・承認が対象なら、Power Automateのクラウドフローが向いています。処理の本体と通知を分けて考え、重い処理はPowerShell、人への通知や承認はPower Automateという分担も現実的です。
PowerShellからメールやTeamsに通知を送るのは難しいですか?
従来使われてきたSend-MailMessageコマンドレットは、SMTPサーバーへの安全な接続を保証しないため公式に非推奨(obsolete)とされており、PowerShell内に直接の代替はありません。Microsoft Graph PowerShell SDKのSend-MgUserMailで送る方法はありますが、アプリ登録や権限付与の準備が必要で、通知のためだけに使うには敷居が高めです。実務では、PowerShellは結果をファイルに書くところまでにして、検知と通知はPower Automateに任せる構成が扱いやすいです。
Power Automateでローカルの共有フォルダのファイルを処理できますか?
できますが、クラウドフローから社内ネットワークのファイルに届くにはオンプレミスデータゲートウェイの導入が必要で、ゲートウェイを使う権利はMicrosoft 365付属のPower Automate利用権には含まれず、上位のライセンスが必要です。デスクトップフロー(RPA)をクラウドフローから呼び出す構成もプレミアム機能です。追加ライセンスなしで済ませたいなら、処理対象のファイルをSharePoint/OneDrive側へ寄せるか、共有フォルダ側の処理はPowerShell+タスクスケジューラに任せる設計を先に検討するのが現実的です。
PowerShellの夜間バッチとPower Automateを連携させる一番簡単な方法は何ですか?
ファイル経由の疎結合をお勧めします。タスクスケジューラで動くPowerShellが処理結果のCSVやサマリファイルをSharePointライブラリに置き、Power Automate側は「ファイルが作成されたとき(プロパティのみ)」トリガーで検知して通知や承認につなげる構成です。どちらの仕組みも相手の内部を知らなくてよいため、片方が壊れても切り分けが簡単で、担当者を分けることもできます。Power Automate for desktopの「PowerShellスクリプトの実行」アクションで直接呼び出す方法もありますが、ライセンスとマシン管理の前提が増えます。

著者プロフィール

記事の著者プロフィールページです。

小村 豪

合同会社小村ソフト 代表

Windows ソフト開発、技術相談、不具合調査を中心に、既存資産が残る案件や原因が見えにくい障害調査に強みがあります。

ブログ一覧に戻る