目的:現在の業務改善を検討
・現在の業務内容は以下の通りです。
①他課の人がBOXに資料を保存したときに、PowerAutomateで自動 通知(Outlookメール)が来る。
②その通知が来たらOutlookメールに書かれているハイパーリンクからBOXのフォルダにアクセス。
③フォルダ内のPDFを展開して開く。
④プリンターに印刷を行う
⑤プリンターまで行き資料を回収し、判子を押して上司に回覧する。
⇒これを月10回くらい行っているため、すべての電子化を考えましたが中々いい案が浮かばなかった為自分の業務範囲のみを自動化できないか検討しています。
※本当は他課がBOXに保存したら、PowerAutomateフローで承認フローが私⇒上司の順で回覧され承認されたら、特定のBOXフォルダに保存され終了・・・にしたいが、
❶判子から電子承認への変更改善(何をもって確認したか証明・改ざんできない仕様とする)
❷承認フローへの上司・関係課への説明・改善提案
❸課内での運用方法説明 etc
大企業の業務改善は1年以上かかるのでやってられない。いつかはやりたいけど・・・
自動化したいこと
・今回は②~④までの業務を自動化したいと考えました。
1.他課がBOXに資料を保存
2.PowerAutomateで資料をOutlookメールで自分に送信
3.Outlookのルール設定で添付資料を自動印刷 PowerShellで印刷
の流れを考えていました。しかし、3.Outlookで自動印刷をするには結構設定を弄らないとダメでした。会社のパソコンだと管理者権限が必要になるので出来る人、出来ない人が出てくると思います。
・OutLookで自動印刷する設定を考えていましたが、会社PCだと管理者権限の設定変更が必要みたいだったので、PowerShellで印刷する方法に変更します。
PowerAutomateフロー:資料をOutlookで自分にメールする
フローの全体図

ファイルが作成されたとき(プロパティのみ)(V2)

フォルダー欄にファイルを格納する場所を指定する。※右にある📁アイコンから指定する
それ以外は設定不要です。
条件


・条件の左側には動的コンテンツ、トリガー「ファイルが作成されたとき(プロパティのみ)(V2)」から取得した【body/Name】※ファイルまたはフォルダーの名前 を選択する。
・右側には今回はpdfファイルのみをメールで送りたいので【.pdf】を記入する
IDによるファイル コンテンツの取得


ファイルID欄には動的コンテンツ トリガー「ファイルが作成されたとき(プロパティのみ)(V2) 」で取得した【body/Id】※ファイルまたはフォルダーの一意のID を選択する。
メールの送信(V2)

・To欄にはOutlookで添付資料を送付したい人のメールアドレスを入力します。
・Subject欄にはメールの件名を記入します。
・Body欄は今回は未記入で問題ありません。※ほかの人に送信する場合は適切な文章を記入しましょう

「すべてを表示」ボタンを押して隠れている項目を表示します
その中にAttachments欄がありますので、こちらの「新しい項目を追加する」ボタンを押します

「新しい項目を追加する」ボタンを押すと、Name欄とContent欄が表示されます。
・Name欄には添付資料の名前を記入します。ここは任意のタイトルにすることが出来ます。
・Content欄には動的コンテンツアクション「IDによるファイルコンテンツの取得」※ファイルのコンテンツで取得することでBOXに保存した資料のデータを添付資料として送ることが出来るようになります

PowerShellで印刷
1. 前提条件
- BOX DriveやBOX Sync を使って、ローカルPC上にBOXフォルダが見える状態になっている必要があります。
- 例:
C:\Users\<ユーザー名>\Box\社内資料
のような形 - これなら、PowerShellから普通のフォルダと同じようにアクセスできます。
- 例:
- 印刷は、既定のPDFビューア(Adobe Acrobat Readerなど)を使って行います。
スクリプト(BOXフォルダ内PDFを印刷)
# BOX上のフォルダパス(印刷対象)
$boxPath = “C:\Users\<ユーザー名>\Box\PDF資料” # ←自分の環境に合わせて変更
# 印刷済みファイルの保存先(ローカルまたはBOX内でも可)
$printedPath = “C:\Users\<ユーザー名>\Box\PDF資料\Printed”
# Acrobat Reader のパス(必要に応じて変更)
$acrobatPath = “C:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe”
# 移動先フォルダが無ければ作成
if (!(Test-Path $printedPath)) {
New-Item -ItemType Directory -Path $printedPath | Out-Null
}
# BOXフォルダ内のPDF一覧を取得
$pdfFiles = Get-ChildItem -Path $boxPath -Filter *.pdf -File
foreach ($pdf in $pdfFiles) {
try {
# Acrobat Readerで印刷
Start-Process -FilePath $acrobatPath -ArgumentList “/t `”$($pdf.FullName)`””
# 印刷ジョブが送信されるまで待機(必要に応じて調整)
Start-Sleep -Seconds 5
# 印刷完了後に移動
$destination = Join-Path $printedPath $pdf.Name
Move-Item -Path $pdf.FullName -Destination $destination -Force
Write-Host “Printed and moved: $($pdf.Name)”
}
catch {
Write-Host “Error printing $($pdf.Name): $($_.Exception.Message)”
}
}
このスクリプトの動き
- $boxPath に指定したBOXフォルダ内の
.pdf
をすべて取得 - Acrobat Reader で印刷(既定プリンタ)
- 印刷完了後に Printed フォルダへ移動(なければ自動作成)
- エラーはコンソールに表示(タスクスケジューラーで実行するときはログ化も可能)
使い方
1.上記コードをメモ帳に貼る
2.C:\Scripts\PrintAndMovePDF.ps1
で保存(UTF-8、拡張子は .ps1
)
3.タスクスケジューラーで以下を登録
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\PrintAndMovePDF.ps1"
4.実行間隔を設定(例:毎日、毎週、月1回)
コメント