PowerShellで残業申請メールを送信する

タイトル:2017/02/05 残業1.5時間(累計 7.0H/週 15.5H/月)

(宛先)

残業内容を報告いたします。

◆時間

 18:30~20:00(1.5)

◆内容

 ・作業a 0.5H
 ・作業b 1.0H

以上です。よろしくお願いいたします。

私の会社では上のような残業申請メールを退社前に送信して残業を申請している。何気に入力項目が多くて、タイトルに週残業と月残業の累計を書かないといけないため、テンプレートを作っても書くのにそれなりに時間がかかる。下手をすると残業申請メールを書いているだけで残業5分延長などという事態にもなりかねない。IT企業なのにこのような非効率的な方法を採用していて良いのかという感じだけれど、給与計算を担当しているのが社長のお母さんで、この方法を気に入っているので変えることができない。

そこで、残業申請メールを自動で送信するスクリプトPowerShellで書いてみた。以下のps1ファイルとjsonファイル2つを同じディレクトリに保存して、ps1ファイルのメール送信に関する情報を実行環境のものに書き換えれば動く。

TotalOvertimeHourCutOffDates.jsonに週残業と月残業の累計、CutOffDatesに週締日と月締日の情報が保存してある。スクリプトを実行した日が締日を過ぎていたら新しい締日の情報に更新されて週残業と月残業の値がリセットされる仕組みだ(最初にjsonファイルに初期値を書き込んでおく必要がある)。

PS C:\>.\SendOvertimeReport.ps1 作業a,作業b 0.5,1 30

というように、第1引数に業務内容をカンマ区切りで、第2引数に各業務の残業時間をカンマ区切りで、第3引数に定時後残業開始前休憩時間を分単位で入力する(省略すると休憩なし扱い)。

f:id:fuyu77:20170205220009p:plain

スクリプトを実行すると、上のようにメールの内容が出力されて、送信確認のメッセージボックスが出現する。メール内容を確認して"OK"を押すとメールが送信されてjsonファイルの内容が書き換えられるようになっている。

参考記事

私はIT企業に勤めているけれど、私の部署は業務でプログラミングをしないので、JSONやメールの自動送信の知識は今回初めて学んだ。

もはや json を利用するのが PowerShell では最も楽な方法と思っています、今日この頃です。 以前は csv でも楽だなーとか気の迷いがありましたが、 再利用するデータなら 絶対に json です。

PowerShellJSONを扱う方法については上記のguitarrapc_techさんの記事で学んだ。私は「JSONとか何だか難そうだなあ」と字面だけ見て勝手に思い込んでいたけれど、学んでみたら簡単で便利な形式(例えば今回だと、プレーンテキストでは上の値が週、下の値が月みたいにするしかないのだけれど、JSONを使えば"Week"と"Month"をプロパティ名として設定できる)だったので、今後も活用したい。

メール送信にはPowerShellSend-MailMessageコマンドレットを使う。

Send-MailMessageに指定する-Credential(認証情報)の作り方はMSDNの記事に書いてあった。

PowerShell/PowerShellでメッセージボックスを表示する方法 - Windowsと暮らす

メッセージボックスを表示させる方法はこの記事で学んだ。

文系卒未経験で中小IT企業に入り、仕事でプログラミングを使えるのは全従業員の2割程度の開発部署の人間だけという現実に愕然としているけれど、PowerShellはそんな私にもちょっとしたプログラム開発の楽しさを教えてくれる素晴らしい言語だと思う。