いきさつ
パソコンを立ち上げてデスクトップが表示されていても、ソフトの起動やデータの読み込みがすぐには終わっておらず、デスクトップが表示された直後はパソコンの動作が非常に重くストレス溜まります、落ち着くまで待っておけば良いのですが。
出社して席に着いた時には、起動後しばらくした落ち着いた状態でいてほしいです。
やりたいこと
営業日だけパソコンをあらかじめ起動しておきたい。
BIOSの自動起動の機能を利用する
起動スケジュールは曜日と時間の指定だけなので、営業日だけは無理ですね。
ただし、これを利用すれば。
BIOSで毎日起動しておいてから、休日だったらシャットダウンする
WindowsのタスクスケジューラでOS起動後に今日が休日か判別して、休日ならシャットダウンする。という方法くらいしかないじゃないでしょうか。
OS上からBIOSの設定が書き換えれるなら、実現できそうですけど。
実際には卑怯な手段で実現
「営業日だけ起動する」事が無理なのはわかったのですが諦めきれず。
社内で自分が触る事ができるサーバーがあったので、そこから営業日の朝にWoLを使ってマジックパケットを送り起動する事にしました。マジックパケットを送る方法はMagicSendというソフトを使いました。
以下のバッチをパソコンを起動したい時間に、タスクスケジューラに登録します。
@echo off
SET DATA=""
SET /P DATA=<dayoff.txt
IF %DATA%==%DATE% (
FOR /F "skip=1 tokens=* usebackq" %%i IN ("dayoff.txt") DO @echo %%i>>dayoff.txt.tmp
DEL dayoff.txt
REN dayoff.txt.tmp dayoff.txt
) else (
magicsend AA-BB-CC-DD-EE-FF
)
2019/01/01
2019/01/02
2019/01/03
.
.
.
2019/12/29
2019/12/30
2019/12/31
txtにある1行目と今日が一致(=今日が休み)したらなにもせず1行目を削除、今日が一致しなかったら(=今日が営業日)マジックパケットを送って対象のPCを起動します。
おわりに
txtの1行目としか比較しないので、なにか問題があってずれてしまったらずっとうまく動作しないという問題があること。そもそも1行目を消さなくてもtxtと全文と今日の文字列の比較だけすれば問題も起こりにくいし、単純な事にあとで気付きました。
でも、バッチ処理でテキストファイルの1行目を削除するのってどうするんだろう?と頭を悩ませた経緯があったので、あえてこの方法を公開してみました。