Intel vPro® Technology Module for Windows PowerShellを使ってみる(3)
今回は目覚まし時計
EMAの新バージョンに搭載された二要素認証をカバーするために2回ほど寄り道しましたが、またPowerShellに戻ります。
今回はAMTのAlarm Clockという機能を利用するためのコマンドレットを紹介します。その名前の通り「目覚まし時計」のような機能で、AMT側にセットした時刻になると自動的にPCを起こすという物です。
この機能を活用する事で以前のような「PowerShellスクリプトにコマンドレットを書いて、それをサーバーのタスクスケジューラー等に登録して自動化する」というような形ではありませんが、ある意味違った形の自動化に貢献出来るかと思います。
AMT Alarm Clockについて
この機能はAMTがPCの内蔵時計と連携する事で実現する物で、内蔵時計がアラームをセットした時刻になるとAMTによるPCの起動を行います。起動のみで電源OFFやシャットダウン等は行えません。ローカルで実行されるのでネットワーク接続の有無は関係ありません。これと似たような目覚まし機能は UEFI(BIOS) Setup にも実装されている事がありますが、全てのメーカー/PCモデルに実装されているとは限りません。また、1台1台手作業で設定するとなると気が遠くなりますが、こちらはAMTですのでリモートからの設定が可能です。ただし、シャットダウンやスリープ中でもAMTが動作するようにACアダプターや電源コードが接続されている必要があるので、どちらかというとデスクトップPCや組み込みPCでの利用に向いた機能かと思います。もちろん条件が合えばノートPCでも動作します。
実は古参なのです
Alarm Clockはかなり古くからAMTに実装されています。最初に実装されたのはAMT5.1で、まだCPUがCore2 Duo/Quadの頃です。その頃はまだ1つしかアラームをセットできませんでしたが、AMT8.0 (第3世代のCore iシリーズの頃) からは5つまでセットできるようになっています。アラームは1回限りのセットも可能ですが、間隔を指定して定期的に実行させることも可能です。1つしか無い頃は、例えば初回を8時に、間隔を24時間にセットして毎日8時に起動させるというような使い方でしたが、これだと休みの曜日も8時に起動してしまいます。5つに増えたことにより、就業日(月曜から金曜まで等)の起動時刻をそれぞれ指定して間隔を7日間になるようにセットしておくような運用が可能になりました。それでも祝日や年末年始のような長期の休暇等には対応できないのですが・・・
Alarm Clockの良い部分と残念な部分
これまで書いたように良い部分だけでなく残念な部分もあります。
良い部分
実行時にネットワーク接続が無くてもOK(もちろん設定時は必要)
実行時に通信が行われないので、台数がとても多い場合はネットワークの負荷の低減が期待出来る
残念な部分
祝日対応などの小回りが利かない。長期の休みがある場合は設定を一旦クリアして後日再設定するような対策が必要になります。
PCの内蔵時計の精度は昔から良くはないです。OSが起動するとNTPで同期して補正されますが、長くPCを起動しない場合は驚く程ズレます。
運用環境において残念な部分を回避でき、良い部分のメリットを受けられるようであれば積極的に使うべきかと思います。
早速コマンドレットで
Alarm Clock関連のコマンドレットはGet-AMTAlarmClock, Set-AMTAlarmClock、Clear-AMTAlarmClockの3つです。まずSet-AMTAlarmClockでアラームをセットします。今回もCerdential Objectを使います。Credentialオブジェクトについては第17回を参照してください。
アラームを1つセットする場合
Set-AMTAlarmClock -ComputerName:クライアントPCのFQDN -AlarmTime:初回起動日時 -Credential $amtCredのように指定します。
初回起動日時はyyyy-MM-ddThh:mm:ssのようなフォーマットで指定します。もちろん過ぎた日時は指定出来ません。実行されるとアラーム設定は消えます。
Get-AMTAlarmClockで現在の設定内容を確認します。次回の起動日時が表示されます。
繰り返す場合はSet-AMTAlarmClockに-Intervalという引数を追加します。DD-hh:mm:ssのようなフォーマットで間隔を指定します。
再びGet-AMTAlarmClockで現在の設定内容を確認します。次回の起動日時に加えて起動間隔が表示されます。
複数アラームのセット
複数セットする場合は設定ごとに名前を付けます。これによりどの設定かを区別させます。ですが・・・
2種類のアラームをセットしましたが、後にセットしたアラーム1つしか表示されません。どうも上書きされてしまっているようです。
バグです!
コマンドレットのソースを見ると問題があることが分かりました。
PowerShellモジュールのVer.18.0.1.1では
Set-AMTAlarmClock.ps1の304行目
Get-AMTAlarmClock.ps1の271行目
Clear-AMTAlarmClock.ps1の211行目
にある
if($temp[0] -lt "8")
を
if([int]$temp[0] -lt 8)
と書き換えます。これだけです。モジュールのバージョンによっては行数が変わるかもしれません。
このように修正は至極簡単なのですが、当然ながら改ざんにあたるのでスクリプトに付加されている署名は無効になります。このため、修正版を実行するにはPowerShellの実行ポリシーをゆるく(Bypass)してあげる必要が出てしまいます。色々と問題がありそうですが、残念ながらインテル社で修正を行い署名を付け直した物をリリースするまではこうするより無いと思います。中の人に期待です。
修正版では
修正したモジュールを試してみました。期待通りの動作です。アラーム設定の名前も表示されています。
アラーム設定の削除
最後に、アラーム設定を削除するにはClear-AMTAlarmClockを使用します。アラーム設定の名前を指定するとその設定のみを削除し、名前の指定が無いと全ての設定を削除します。