【バッチファイル+GAS】PCの初回起動時にGASを動かして全自動でTeamsに出勤を通知

前回の記事では半自動でGASを使ってTeamsに投稿するまで紹介しました。
いちいち出勤時にスクリプトを手動で動かすのも面倒なので、今回は全自動でPCの初回起動時にGASを動かせるように設定します。


PCの初回起動時に動かす

PCの起動ごとに動かすにはスタートアップ機能を利用してバッチファイルを作ればよさそうですが
私の会社のクソケチPCはスペックがあかんため突然クラッシュして再起動することがあります。
なのでスタートアップに登録するだけだと意図せず一日に何度も出勤報告をしてしまうはめに。。


そこでWindowsイベントビューア―のログをみにいって、
その日の初回のログインだった場合にGASを叩きに行くことにしました。


参考にさせていただいた記事はこちら。
qiita.com


スクリプトは↓にありますが、今日に絞ったログの行数をみて1だった場合に動かすようにします。

::配列つかえなかったので、LoginTimeの行数をみてログイン回数を変数に格納
for /f "tokens=3 usebackq" %%i in (`find /c "Date:" LoginTime.txt`) do SET RESULT=%%i

↑find /c "Date:" LoginTime.txtの結果が「----- Date: 1」のようになるのでtokens=3で3要素目を取り出します。


GASを叩きに行く部分

前回の記事でdoGet関数を書いて
webアプリケーションとして導入としてデプロイすることでURLからGASを叩けるようにしました。

そこでコマンドプロンプトcurlコマンドを利用して

curl -L "デプロイしたwebアプリのURL"

でたたいてみたところなんかエラーが出る…。
原因を探っていくと弊社内のgsuite設定では組織内のアカウントでログインした状態からしか叩けないようになっておりました(😿)。


なので、かなりダサいですがChromeを一度開いて叩きに行きます。
今回は実装していませんがChrome開きっぱなしになるので、taskkillとかで処理が終わったら閉じるようにするのもいいかも。

::初回の起動ならGASを実行
if %RESULT% ==1 (echo 初回の起動です && "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --new-window "デプロイしたwebアプリのURL")

f:id:twixoreo:20191209000627p:plain

完成したスクリプトがこちら

※このバッチファイルをスタートアップに登録します。

@echo off

::今日の日付を取得
set yy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
set date1=%yy%-%mm%-%dd%

::1日前の日付を計算する(GMTになおすため)
set /a dd=%dd%-1
set dd=00%dd%
set dd=%dd:~-2%
set /a ymod=%yy% %% 4
if %dd%==00 (
if %mm%==01 (set mm=12&& set dd=31&& set /a yy=%yy%-1)
if %mm%==02 (set mm=01&& set dd=31)
if %mm%==03 (set mm=02&& set dd=28&& if %ymod%==0 (set dd=29))
if %mm%==04 (set mm=03&& set dd=31)
if %mm%==05 (set mm=04&& set dd=30)
if %mm%==06 (set mm=05&& set dd=31)
if %mm%==07 (set mm=06&& set dd=30)
if %mm%==08 (set mm=07&& set dd=31)
if %mm%==09 (set mm=08&& set dd=31)
if %mm%==10 (set mm=09&& set dd=30)
if %mm%==11 (set mm=10&& set dd=31)
if %mm%==12 (set mm=11&& set dd=30)
)
set date2=%yy%-%mm%-%dd%

::ログイン情報を取得
wevtutil qe System /f:Text /q:"*[System[(EventID=7001) and TimeCreated[@SystemTime>='%date2%T15:00:00.000Z' and @SystemTime<='%date1%T14:59:59.999Z']]]" > LoginTime.txt

::LoginTimeの行数をみてログイン回数を変数に格納
for /f "tokens=3 usebackq" %%i in (`find /c "Date:" LoginTime.txt`) do SET RESULT=%%i
del LoginTime.txt

::初回の起動ならGASを実行
if %RESULT% ==1 (echo 初回の起動です && "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --new-window "デプロイしたwebアプリのURL")