IT Hands-on Lab

小規模組織向けIT環境の構築・運用に役立つ情報を、ハンズオン形式で紹介しています。

【Power Automate】SharePointサイト ストレージ使用量計測1

Power Automate SharePointサイト ストレージ使用量計測1

Power AutomateでSharePointにアクセスするためのAPIを使用し、SharePointの各サイトのストレージ使用量を計測する例を紹介します。
これにより、各サイトのストレージの増減の推移を把握できるようになり、急激な増減がどのサイトで発生しているのか分かるようになります。
  • 操作環境
    • OS:Windows 11
    • Webブラウザー:Edge
  • 使用プラン:Microsoft 365 Business Premium(*)
    *Power Automateでプレミアムコネクタを使用する場合は、追加料金が必要となります

 

 

全体の仕組みと使用APIについて

Power Automateのスケジュールフローを日次実行し、テナント内の各SharePointサイトの情報(ストレージ使用量)をSharePoint上にアップロードしたExcelに記録するのが主な処理となります。

 

また、対応必須ではありませんが、この記事では以下の処理も含めて紹介します。

  • 手動でフローを再実行する可能性を考慮し、前処理として、記録用Excel上で本日データを削除するOffice Scriptを実行します。
  • 記録用Excelのデータを元に、同じExcelファイル内のピボットグラフ出力やPower BIのグラフ出力を行います。

図表1-1 全体の仕組み

図表1-1 全体の仕組み

 

この記事では、2種類のAPIを使用した例を紹介します(前者は今回、後者は次回紹介)。前者の方が扱い易い上、追加料金なしで使用できます

  • SharePoint REST API:SharePointの標準コネクタを使用
  • Microsoft Graph REST API:プレミアムコネクタ(HTTPコネクタ)を使用

 

なお、前者のAdd-In認証は既に非推奨になっており、2026年4月2日以降使用できなくなります(2025年5月時点の情報) 。しかし、Power Automate内のSharePointの標準コネクタにおいては、Add-In認証ではなくMicrosoft Entraユーザーの認証を使用しているため、その後も使用できると解釈しています。

 

記録用Excelファイル用意

計測結果を記録するためのExcelファイルを、SharePointの適当なサイトのドキュメント下にアップロードします。この記事では2種類のAPIを使用しますので、それぞれで使用するための同じファイルを用意しました。

図表2-1 SharePointへの記録用Excelアップロード

図表2-1 SharePointへの記録用Excelアップロード

 

SharePointにアップロードしたExcelファイルを開き、シートを二つ用意しておきます。

  • Sheet1:データ記録用
  • Sheet2:ピボットグラフ用(工程6で紹介)

画面イメージのように、Sheet1の先頭行に項目名(日付、サイト名、URL、使用量(GB)、使用率)を入力し、テーブル化([挿入>表>テーブル]を選択)しておきます。各項目の書式も適宜調整しておくと良いでしょう。

*この画面イメージでは各項目の書式例を示すためデータを掲載していますが、この段階ではデータなしで問題ありません

図表2-2 記録用Excelの内容

図表2-2 記録用Excelの内容

 

Office Scriptによる本日データ削除実装(任意)

次の工程で紹介するPower Automateでは、スケジュールフロー(日次)でSharePointサイトのストレージ使用量をExcelに記録する処理を実装します。手動でフローを実行すると、本日データが既にあるかどうかにかかわらずデータが追加されますので、既に本日データが存在する場合は先に削除する処理を入れておきます。

 

Power Automateで実装すると、一意なデータを一件ずつ特定して削除するため、処理が遅くなります。本日データ削除用のOffice Scriptを用意し、Power Automateでこれを呼び出す方が処理が高速です。この工程ではそのOffice Scriptを用意します。

 

前の工程で開いたExcelファイルのメニューから、[自動化>新しいスクリプト]を選択します。

図表3-1 Office Scriptの作成

図表3-1 Office Scriptの作成

 

画面イメージのようにスクリプトを作成し(スクリプト名:PA呼出し用_本日データ削除)、保存します。

図表3-2 Office Scriptの内容

図表3-2 Office Scriptの内容


スクリプトのソースは以下の通りです。

function main(workbook: ExcelScript.Workbook) {
    const sheet = workbook.getActiveWorksheet();
    const table = sheet.getTables()[0]; // 最初のテーブルを取得(適宜変更)

    // 日本時間(JST)で日付を取得
    const today = new Date().toLocaleString("ja-JP", { timeZone: "Asia/Tokyo" });
    const dateObj = new Date(today);
    const todayFormatted = `${dateObj.getFullYear()}/${dateObj.getMonth() + 1}/${dateObj.getDate()}`; // "YYYY/M/D" 形式

    let rowsToDelete: number[] = [];

    // 「日付」列のインデックスを取得
    const dateColumnIndex = table.getHeaderRowRange().getTexts()[0].indexOf("日付");

    // 削除対象の行を特定
    const rows = table.getRangeBetweenHeaderAndTotal().getTexts();
    rows.forEach((row, index) => {
        const rowDate = row[dateColumnIndex].trim(); // 余分なスペースを削除
        if (rowDate === todayFormatted) {
            rowsToDelete.push(index);
        }
    });

    // 行を削除(後ろから削除することでインデックスのズレを防ぐ)
    rowsToDelete.reverse().forEach(index => {
        table.deleteRowsAt(index, 1);
    });
}


このスクリプトは2種類のAPI用の記録用Excelのどちらでも動作するため、1個用意しておけば問題ありません。

 

Power Automateによる計測フロー実装(SharePoint REST API)

WebブラウザーよりPower Automateの画面にアクセスし、左メニューの[マイフロー]を選択し、[新しいフロー>スケジュール済みクラウド フロー]を選択します。

図表4-1 Power Automate スケジュールフロー作成

図表4-1 PowerAutomate スケジュールフロー作成

 

フロー名を適宜入力し、[このフローを実行する]の頻度とタイミングを設定し(この例では5/10の朝6時から一日一回実行としています)、[作成]を選択します。

図表4-2 Power Automate スケジュール設定

図表4-2 PowerAutomate スケジュール設定

 

先にフロー全体を示します。

  • 日本時間の取得や必要な変数の初期化
  • サイト一覧情報の取得
  • 本日データ削除(Office Script実行)
  • 各サイトの詳細情報取得
  • 詳細情報取得の成功時は、記録用Excelに計測結果を行追加(*)
    *詳細情報取得時にエラーが発生する場合があるため、エラーをスルーする処理を入れています。この処理は入れなくても機能的には動作しますが、フロー全体として失敗判定されてしまうため、この例では付加しました

図表4-3 PowerAutomate フロー全体の処理

図表4-3 PowerAutomate フロー全体の処理

 

ここから各ステップの設定箇所を示します。

  • タイムゾーンの変換(組み込み>日次>タイムゾーンの変換):現時点日時(世界標準時)を日本時間に変換
  • 変数を初期化する-storage(組み込み>変数>変数を初期化する):ストレージ使用量(バイト単位)をギガバイト単位に変換した値を格納する変数
  • 変数を初期化する-is-success(組み込み>変数>変数を初期化する):サイト詳細情報取得の成功/失敗を格納する変数
    *[変数を初期化する]アクションのように、同じ種類のアクションが登場する場合は、それぞれ分かりやすい名前に変更することをお奨めします。また、関数を使ってこのアクション名を指定する場合(この工程の最後の画面イメージの左側の設定が該当)、アクション名に半角スペースがあると正しく認識されないため、これを除いておきます

図表4-4 各ステップの設定(タイムゾーン,変数初期化)

図表4-4 各ステップの設定(タイムゾーン,変数初期化)

 

  • SharePoint に HTTP 要求を送信します-サイト一覧(標準>SharePoint>SharePoint に HTTP 要求を送信します):組織テナント内のSharePointについて、実行ユーザーがアクセス可能な全サイトを検索
    *画面イメージ上、[サイトのアドレス]で[コミュニケーションサイト]が選択されていますが、[カスタム値を入力]より「http://{組織ドメイン}.sharepoint.com」を入力すると、これに置き換わってしまいますが、これで問題ありません
  • この後追加する[JSONの解析]アクションでは、[SharePoint に HTTP 要求を送信します-サイト一覧]アクションの結果データを使用しますので、一旦フローを保存し、テストを実行します。

図表4-5 各ステップの設定(HTTPサイト一覧,テスト)

図表4-5 各ステップの設定(HTTPサイト一覧,テスト)

 

  • テストの実行結果が表示されたら、[出力>body]の右側のコピーアイコンを選択し、右上の[編集]を選択します。
  • [組み込み>データ操作>JSON の解析]アクションを追加し、[Schema]欄下の[サンプルペイロードを使用してスキーマを作成する]を選択します。

図表4-6 各ステップの設定(テスト結果貼り付け))

図表4-6 各ステップの設定(テスト結果貼り付け)

 

  • 図表4-6でコピーした[SharePoint に HTTP 要求を送信します-サイト一覧]アクションの実行結果を貼り付け、[完了]を選択します。また、[Content]欄は[SharePoint に HTTP 要求を送信します-サイト一覧]アクションの[本文]を設定します。

図表4-7 各ステップの設定(JSON解析サイト一覧)

図表4-7 各ステップの設定(JSON解析サイト一覧)

 

  • スクリプトの実行(標準>Excel Online(Business)>スクリプトの実行):前の工程で用意したOffice Scriptを実行する
  • Apply to each(組み込み>コントロール>それぞれに適用する):[JSONの解析-サイト一覧]の[Body value]を選択することで、取得したサイト一覧の各サイトに対するアクションを設定できる

図表4-8 各ステップの設定(スクリプト実行,Apply to each)

図表4-8 各ステップの設定(スクリプト実行,Apply to each)

 

  • 変数の設定-is-success-初期値はtrue(組み込み>変数>変数の設定):is-successをtrueに設定する

以降はApply to each内にアクションを追加します。

  • SharePoint に HTTP 要求を送信します-サイト詳細(標準>SharePoint>SharePoint に HTTP 要求を送信します):指定したアドレスのサイトに対し、使用量を取得する

図表4-9 各ステップの設定(変数の設定,HTTPサイト詳細)

図表4-9 各ステップの設定(変数の設定,HTTPサイト詳細)


[SharePoint に HTTP 要求を送信します-サイト一覧]アクションと同様、この後[JSON の解析]アクションを追加します。しかし、この工程の冒頭で説明した通り、サイト詳細情報取得時にエラーが発生することがあるため、先にエラー判定とエラーをスルーするアクションを追加します。

  • スコープ-失敗時(組み込み>コントロール>スコープ):[設定]は一つ前のアクションが失敗したとき
  • 変数の設定-is-success-失敗時はfalse(組み込み>変数>変数の設定):[スコープ-失敗時]アクション内の処理として、is-successをfalseに設定する

図表4-10 各ステップの設定(失敗時の処理)

図表4-10 各ステップの設定(失敗時の処理)

 

  • 条件(組み込み>コントロール>条件):[パラメーター]はis-successがtrueか否か、[設定]は一つ前のアクションが成功またはスキップ済のとき

以降は分岐のtrue(はい)の方にアクションを追加します。

  • JSONの解析-サイト詳細(組み込み>データ>JSON の解析): [SharePoint に HTTP 要求を送信します-サイト詳細]の結果を指定(*)
    *Schemaの設定要領は[JSONの解析-サイト一覧]アクションのときと同じですので、そちらを参考にしてください

図表4-11 各ステップの設定(条件,JSON解析サイト詳細)

図表4-11 各ステップの設定(条件,JSON解析サイト詳細)

 

  • 変数の設定-storage(組み込み>変数>変数の設定):サイト詳細から取得したストレージ使用量がバイト単位のため、関数でギガバイト単位に変換して変数に格納する
    *[JSONの解析-サイト詳細]のアクション名に半角スペースが含まれていると正常に動作しませんのでご注意ください
  • Add a row into a table(標準>Excel Online(Business)>表に行を追加):記録用Excelに一行追加し、サイトのストレージ使用量等の情報を書き込む

図表4-12 各ステップの設定(変数設定,Excel表に行追加)

図表4-12 各ステップの設定(変数設定,Excel表に行追加)

 

動作確認

Power Automateの画面で、左メニューの[マイフロー]を選択し、前の工程で作成したフローの実行アイコンを選択します。

図表5-1 PowerAutomate フロー実行

図表5-1 PowerAutomate フロー実行

 

前の画面でフローを選択し、実行履歴を確認します。実行が完了し、[成功]と表示されれば問題ありません。

図表5-2 PowerAutomate フロー履歴

図表5-2 PowerAutomate フロー履歴

 

前の画面で実行履歴を選択すると、処理の中身を確認できます。
この例では、2件目のサイト詳細取得時にエラーが発生しています。[出力>body]のコピーアイコンを選択して内容を確認したところ、sourceのURLがフロー実行ユーザーのMicrosoft Loopのマイワークスペースを示していました(SharePoint管理センターで確認)。SharePointのサイトではないため、無視しても問題ないエラーと判断しました。

図表5-3 PowerAutomate フロー履歴の詳細

図表5-3 PowerAutomate フロー履歴の詳細

 

工程2で用意した記録用ExcelのSheet1を確認すると、本日時点のSharePointサイトのストレージ使用量が出力されています。

図表5-4 記録用Excelへの出力結果

図表5-4 記録用Excelへの出力結果

 

グラフ出力(Excelピボットグラフ)(任意)

同じExcelファイルのSheet2にSheet1のデータを元にしたグラフを用意しました。画面イメージのようにピボットテーブルを作成し、それを元に折れ線グラフを作成しています。

図表6-1 記録用Excelに用意したピボットグラフ

図表6-1 記録用Excelに用意したピボットグラフ

 

この記事でSharePointサイトのストレージ使用量の計測については一通り実現できています。次の記事では参考情報として以下について紹介予定です。

  • Microsoft Graph REST APIを使用した場合のPower Automateのフロー
  • Power BIを使用したグラフ(データソースにSharePoint上のExcelを使用)
  • PowerShellを使用したSharePointサイトのストレージ使用量の確認

 

 

当ブログ内の連載記事

elmgrn.hatenablog.com

 

当ブログ内の関連記事

elmgrn.hatenablog.com