Power Automate Desktop

[Power Automate]クラウドフローとデスクトップフローとのファイル連携について

前回の記事でクラウドフローとデスクトップフローの連携について紹介しました。

前回はPower Automate Desktop(PAD)の入出力変数を介して文字列の受け渡しを行いましたが、今回はファイルの受け渡し方法を考えてみます。

受け渡し方法としてはOneDriveアプリを使った同期等が考えられますが、今回は下図のようにファイルをBase64エンコードして、前回も使用した入出力変数での受け渡しを行います。

  1. OneDriveにあるテキストファイルをBase64エンコードしてPADに渡します。
  2. PAD側ではデコードしたファイルに文字列を追加した後、再度エンコードしてPower Automateに返します。
  3. デコードしたファイルを新しいテキストファイルとしてOneDriveに保存します。

Power Automate Desktopのフロー作成

まずはPAD側の処理です。

入出力変数

Power AutomateからBase64エンコードされた文字列を受け取る入力変数です。

  • 変数の種類:入力
  • 変数名:Base64In
  • 外部名:Base64In

Power Automateからテキストファイルの名前を受け取る入力変数です。

  • 変数の種類:入力
  • 変数名:FileName
  • 外部名:FileName

テキストファイルをBase64エンコードしてPower Automateに渡す出力変数です。

  • 変数の種類:出力
  • 変数名:Base64Out
  • 外部名:Base64Out

フロー全体
Display.ShowMessageWithTimeout Title: $'''確認用''' Message: $'''ファイル名:%FileName%
エンコードされた文字列:%Base64In%''' Icon: Display.Icon.Information Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: True Timeout: 3 ButtonPressed=> ButtonPressed
SET FilePath TO $'''C:\\Test\\%FileName%'''
# Power Automateから受け取ったBase64エンコードされた文字列をデコードしてテキストファイルとして保存
System.RunPowershellScript Script: $'''[System.IO.File]::WriteAllBytes(\"%FilePath%\", [System.Convert]::FromBase64String(\"%Base64In%\"))''' ScriptOutput=> PowershellOutput ScriptError=> ScriptError
WAIT (File.Created File: FilePath)
SET Contents TO $'''たちつてと
なにぬねの
はひふへほ'''
File.WriteText File: FilePath TextToWrite: Contents AppendNewLine: True IfFileExists: File.IfFileExists.Append Encoding: File.FileEncoding.UTF8
# テキストファイルに文字列を追加してBase64エンコード
System.RunPowershellScript Script: $'''[System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes(\"%FilePath%\"))''' ScriptOutput=> PowershellOutput2 ScriptError=> ScriptError2
# 不要な文字を削除して出力変数としてPower Automateに渡す
Text.Trim Text: PowershellOutput2 TrimOption: Text.TrimOption.Both TrimmedText=> Base64Out

1. メッセージを表示

Power Automateからフローが実行されたことを確認するためのメッセージボックスを表示します。

2. 変数の設定

デコードしたファイルを保存するためのパスを変数として設定します。

3. PowerShell スクリプトの実行

Power Automateから受け取ったエンコードされた文字列をデコードしてファイルとして保存するための、下記PowerShellスクリプトを実行します。

[System.IO.File]::WriteAllBytes("%FilePath%", [System.Convert]::FromBase64String("%Base64In%"))

4. ファイルを待機します

デコードしたファイルの作成が完了するまでの待機処理です。

5. 変数の設定

テキストファイルに追加する内容を変数として設定します。

6. テキストをファイルに書き込みます
  • ファイル パス:%FilePath%
  • 書き込むテキスト:%Contents%
  • 新しい行を追加する:オン
  • ファイルが存在する場合:内容を追加する
  • エンコード:UTF-8

7. PowerShell スクリプトの実行

内容を追加したテキストファイルをエンコードしてPower Automateに渡すため、下記PowerShellスクリプトを実行します。

[System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes("%FilePath%"))

8. テキストのトリミング

エンコードした文字列から不要な文字を削除し、出力変数の値として設定します。

以上でPADのフロー作成は完了です。

Power Automateのフロー作成

PADのフローの準備が出来たら、次にPower Automateのフローを作成します。
新規でインスタント クラウド フローを作成し、トリガーは手動とします。

フロー全体

1. パスによるファイル メタデータの取得

OneDriveにあるテキストファイルの情報を取得します。

2. パスによるファイル コンテンツの取得

テキストファイルの内容を取得します。

3. Power Automate Desktop で構築したフローを実行する

「デスクトップ フロー」コネクタでPADのフローを実行します。

・FileName:

@{outputs('パスによるファイル_メタデータの取得')?['body/Name']}

・Base64In:

@{base64(outputs('パスによるファイル_コンテンツの取得')?['body'])}

4. ファイルの作成

PADのフローから返ってきた文字列をデコードし、新規ファイルとして保存します。

・ファイル名:

PAD-@{outputs('パスによるファイル_メタデータの取得')?['body/Name']}

・ファイル コンテンツ:

@{base64ToBinary(outputs('Power_Automate_Desktop_で構築したフローを実行する')?['body/Base64Out'])}

以上でPower Automateのフロー作成は完了です。

実行画面

実行画面は下図の通りで、意図したとおりにフローが動いていることが確認できます。

以上のようにファイルをBase64エンコードすることで、入出力変数を介してクラウドフローとデスクトップフロー間でファイルのやりとりができました。

エンコード・デコードの手間は掛かりますが、Power Automate側もPAD側も難しい処理ではないので、ファイル連携を考えている方は是非一度お試しください。

[Power Automate]クラウドフローとデスクトップフローの連携方法前のページ

[Power Automate Desktop]Excel ワークシート内のセルを検索して置換するアクション等を試してみました。次のページ

関連記事

  1. Power Automate Desktop

    Power Automate DesktopでPPAPしてみた。

    PPAP、所謂パスワード付きZipをメールに添付して、そのメールとは別…

  2. Power Automate

    UIフローでデスクトップアプリの操作記録中にエラーが発生した件について

    2019/12/10 追記:UI フローアプリのインストーラーのフ…

  3. Power Automate Desktop

    [Power Automate Desktop]Google APIのアクセストークンを取得するフロ…

    前回の記事でGoogle APIのアクセストークンを取得するPower…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

Translate

Chinese (Simplified)Chinese (Traditional)EnglishFrenchGermanJapaneseKoreanRussianSpanish

最近の記事

アーカイブ

PAGE TOP