0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Power Automate】SharePointサイト間のファイルコピー自動化

Last updated at Posted at 2025-03-19

異なるサイト間のファイルコピーをPower Automateで自動化する方法をご紹介します。
例えば、サイトAにファイルが作成されたらサイトBにコピーします。あるいは、ファイルを配置したフォルダーがアップロードされたら、サイトBに同じ構成でコピーすることで、自動的にバックアップを取ることができます。

本記事では、Power AutomateでSharePointサイト間のファイルコピーを自動化する手順を解説します。

Power Automateフローの全体像

今回作成するPower Automateフロー(以下フロー)の全体像です。
image.png

フローの作成手順

1. Power Automate (https://make.powerautomate.com/) を起動し、メニューの「作成」から「自動化したクラウド フロー」 を選択します。

2. 任意のフロー名を入力し、トリガーからSharePointの「ファイルが作成されたとき(プロパティのみ)」を選択し、[作成]ボタンをクリックします。
image.png

3. トリガーを以下のとおり設定します。

【設定値】

No. 設定項目名 設定値 備考
サイトのアドレス * コピー元 SharePointサイトを選択 必須
ライブラリ名 * コピー元 ライブラリ名を選択 必須

4. アクション「変数を初期化する」を4つ追加し、以下のとおり設定します。
  ①と④の値は式に設定してください。種類はすべて「文字列」を設定します。

【設定値】

No.   用途 名前
コピー元
フォルダー名
CopyFromSourcePath slice(triggerOutputs()?['body/{Path}'],0, lastIndexOf(triggerOutputs()?['body/{Path}'], '/'))
コピー先
サイトURL
CopyToSite /sites/"コピー先 サイトURL"
コピー先
ライブラリ名
CopyToLibrary "コピー先 ライブラリ名"
コピー先
フォルダー
CopyToPath if(contains(variables('CopyFromSourcePath'),'/'), last(split(variables('CopyFromSourcePath'), '/')), '')

【解説】

  • ①の式:
    フローが起動するトリガーとなったファイルパスの先頭から最後のスラッシュ(/)より前の部分を抽出します。(例: "Folder01/test.xlsx" → " Folder 01")
  • ④の式:
    変数「CopyFromSourcePath」で取得したファイルパスの、最後のスラッシュ(/)以降の部分を抽出します。(例: " Folder01/test.xlsx" → " test.xlsx ")
    スラッシュ(/)がない場合は、空白を返します。(例: “test.xlsx”→ ””)

5. アクション「条件」を追加し、作成されたのがフォルダーかを判定します。以下のとおり設定します。

【設定値】

条件 設定値
トリガーから「フォルダーである」を選択
中央 次の値に等しくない
true

6. アクション「条件」の「はいの場合」、つまりフォルダーではない場合の処理にSharePointアクション「SharePoint に HTTP 要求を送信します」を追加し、以下のとおり設定します。これを設定することで、コピー先サイトから、指定したライブラリ内のフォルダー一覧を取得することができます。※ 手順5の条件分岐において「いいえの場合」では処理を実行しないため、何も設定しません。

【設定値】

No.  設定項目名 設定値
サイトのアドレス * コピー先 SharePointサイトを選択
方法 * GET
URI * _api/web/GetFolderByServerRelativeUrl('変数「CopyToSite」/変数「CopyToLibrary」')/Folders?$expand=Folders
ヘッダー Accept:application/json;odata=verbose
Content-Type:application/json

|

7. 手順6の直下にアクション「条件」を追加し、フォルダーの存在チェックを行います。以下のとおり設定します。
image.png

【設定値】

条件 設定箇所 設定値
And -
トリガーから「本文」を選択
中央 次の値を含まない
変数「CopyToPath」
変数「CopyToPath」
中央 次の値に等しい
(ブランク)

8. 手順7で追加した条件が「はいの場合」を設定します。フォルダーが存在しない、つまりライブラリ直下にファイルが配置された場合にファイルをコピーします。
SharePointアクション「ファイルのコピー」を追加し、以下のとおり設定します。

【設定値】

No.   項目 設定値
現在のサイト アドレス * コピー元 SharePointサイトを選択
コピーするファイル * アクション「SharePoint に HTTP 要求を送信します」で取得した「識別子」を選択
送信先サイト アドレス * コピー先 SharePointサイトを選択
インストール先フォルダー * /変数「CopyToLibrary」
別のファイルが既に存在する場合 * Copy with a new name

9. 「いいえの場合」を設定します。ファイルが格納されたフォルダーが配置された場合に、フォルダーを作成してからファイルをコピーします。
SharePointアクション「新しいフォルダーの作成」を追加し、以下のとおり設定します。

【設定値】

No.   項目 設定値
サイト アドレス * コピー先 SharePointサイトを選択
一覧またはライブラリ * 変数「CopyToLibrary」
フォルダーのパス * 変数「CopyToPath」

10. アクション「新しいフォルダーの作成」の下に、SharePointアクション「ファイルのコピー」を追加し、以下のとおり設定します。

【設定値】

No.   項目 設定値
現在のサイト アドレス * コピー元 SharePointサイトを選択
コピーするファイル * アクション「SharePoint に HTTP 要求を送信します」で取得した「識別子」を選択
送信先サイト アドレス * コピー先 SharePointサイトを選択
インストール先フォルダー * /変数「CopyToLibrary」/変数「CopyToPath」
別のファイルが既に存在する場合 * Copy with a new name

設定は以上です。

フローの動作確認

フローを保存後、動作確認を行います。
1. サイトAのライブラリにファイルと、ファイルを格納したフォルダーを配置します。

2. サイトBのライブラリを確認します。
※ フローが起動するまで数分の遅延が発生する可能性があります。ファイルがコピーされていない場合は、少々時間をおいてから再度確認してください。

指定したライブラリ配下に、ファイルとフォルダーがサイトAと同様の構成でそれぞれコピーされたことが確認できました。

まとめ

本記事では、Power Automateを使ってSharePointのサイト間でファイルコピーを自動化する手順について解説しました。
バックアップの自動取得や、部門やチーム間でのファイル共有の自動化などに活用してみてはいかがでしょうか。

最後に

テンダでは、「こんなプロジェクトに挑戦したい」「こんなチームで働きたい」「理想のチームを創りたい」と願う仲間を求めています。
カジュアル面談も随時受付中です。ぜひ一度お話ししましょう:angel:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?