タスクスケジューラでエクセル自動化。パソコンの電源オンも自動化。

前回の続き(ブログの記事としては前々回の続きです)

タスクスケジューラを使ってエクセルマクロを自動化(前回はログオン時)
(これでいいけど、PCにログオンは人がする必要あり。)

今回は、サーバーから「マジックパケット」を送って、クライアントPCに電源を入れて、エクセルを動かす、完全自動化


今回の前提
administratorのアカウントで使用

事前確認(その他)
一番簡単な完全自動化は、PC単体で電源を入れるのことだが、タスクスケジューラではPC電源は入れられない。
二番目に簡単なのは、BIOSで「AUTO POWER ON」みたいな電源の制御項目があればいいが、数台調べたが、なかった。
で、今回、24時間稼働しているサーバーから、クライアントPCの電源を遠隔から入れる「マジックパケット」を送信する方法をやってみた。

参考
サーバーから「手動で」電源ONするには「wake on lan for windows」などの無料ソフトでできますが、今回は、サーバー側のリモート電源ONも「自動に」したいので使わない。
(下記に出てきますが、代替として、タスクスケジューラとバッチファイルを使用します)



やることのイメージ(夜中。無人状態)
サーバー
サーバーから電源ON(バッチファイル+タスクスケジューラで)



クライアントPC
電源入って「ログオンしない状態」で、エクセルマクロを動かす(タスクスケジューラ+エクセルマクロで)
電源オフ(タスクスケジューラとexeファイルで)




作業1
クライアントPC
電源入って「ログオンしない状態」で作業させるには通常のログオンしたデスクトップ等は使えないので、32bit64bit別に仮想デスクトップを作成
(参考HP へっぽこSE奮戦記 「タスクスケジューラからExcelが開けない)


この時点ではまった点(初歩ミス。タスクスケジューラ エクセル マクロ 仮想デスクトップ 作ったが動かない)
参考HPを見て、タスクスケジューラを「ユーザーがログオンしているかどうかにかかわらず実行」の設定にしたが、なぜかエクセルが動いていない。直接エクセルファイルをクリックすると「administarator」が使用しているので参照で開くというメッセージが出る。(その状態を脱するには、ログオフしてもダメでシャットダウンが必要だった。)
解決は、簡単だった。エクセルファイルをそこに置いた時(または修正した時)、手動で一度実行しなかったため、マクロのセキュリティ警告で止まっていたらしい。)
なお、「ユーザーがログオンしているかどうかにかかわらず実行」の設定だと、ログオンしていても、タスクの実行の様子(エクセルの表示)は見えなかった。


タスクスケジューラのタスクを2つ作り、
一つは、エクセルを動かすタスク(前回ブログで作成したエクセルファイルのものをログオフでも動くように再設定)
もう一つは、クライアントPCの電源をオフするタスクを作る(exeファイル system32のshutdown.exeを動かす)
(参考HP Windowsで指定時間にシャットダウンする方法)
はまった点(初歩ミス。タスクスケジューラでのshutdownの引数の追加の時のスペース(半角)をきちんといれること。/cは不要)



作業2
サーバー
マジックパケット」を送るバッチファイルを作成
(参考 ポカティブ総研 wake on lanをバッチスクリプトで実行したい)
サーバーのタスクスケジューラを設定(上記バッチファイルを動くように設定)




流れの整理(タスクスケジューラの時刻設定)
ある時刻に・・・サーバーでクライアントPC 起動(タスクスケジューラ)
その5分後に・・・クライアントPCのタスクスケジューラ(エクセルマクロ動かす)
またその5分後に・・・クライアントPCのタスクスケジューラ(クライアントPCの電源落とす)


良い点
サーバーからマジックパケットを送るとき、バッチファイルを使っているが、バッチファイルは起動後勝手に終了するので手間がない。

参考
サーバーから「手動で」電源ONするには「wake on lan for windows」などの無料ソフトでできるが、これも便利です。(使わなかったけどサーバー名等の検索もできるし。)

その他
当たり前なのかもしれないが、ログイン名が異なると、中のタスクスケジュールのタスクが違い、見えない場合あり。


結論
簡単にエクセルマクロを実行させたいなら、前回のブログの方法がいい。
夜中に確実に動かしたいなら、今回の方法かな。(完成までは疲れるけど。)