トップページ»3.2.Microsoft»Active Directory内全PCの省電力対策

3.2.Microsoft



Active Directory内全PCの省電力対策

チームマイナス6%参加記念(ていうかこの記事書く予定だったから参加しとこうみたいな)ということで、そこそこPC台数が多くてユーザーをActive Directoryで管理している企業、団体向け省電力ネタを一つ。(でも規模がでかいところは何らかの対策してるのが常識?)

要はAD内にあるPCを使用していないときにディスプレイやハードディスクの電源を落とす方法。 探したんだけどなかなか実際にやってる所が見つからなかったので自分でやってみた。 使ったのはAD側がWindows 2003 Serverでクライアント側がWindows 2000 ProfessionalとWindows XP Professinal。

先に効果から書いてしまうと、

  • 消費電力削減(台数に応じて経費削減にも効果あり)
  • CRT、液晶の焼け低減(表示部の寿命が伸びる可能性あり)

消費電力のほうは例えば液晶のPCが500台、CRTのPCが500台、一日2時間使わない状態、稼働日数20日間とすると、(ほんとざっくりですが)

(液晶0.06kW×500台+CRT0.1kW×500台)×2時間×20日
=3,200kW/月 の削減

費用効果的には小さいかもしれませんが、無駄なエネルギー消費を抑える意味は無くはないということで。




どうやって実現するか

2003ADのグループポリシーの中に各クライアントの電源設定みたいのがあればいいんだけど、自分が探してみた限り見つからない。 なので今回は全ユーザーが入っているOUのグループポリシー中にあるログオンスクリプトでやってみた。 ユーザーのログオンスクリプトとしてなので、ユーザーがログオンする都度設定される。

各クライアントの電源関係の設定はWindows 2003 Server中に入っているpowercfg.exeを使う。

Windows Server 2003 で
Powercfg.exe を使用する方法

http://support.microsoft.com/?kbid=324347

但し、上の文に書かれている一文、

Windows 2000 など、その他のオペレーティング システムでも動作する可能性がありますが、マイクロソフトでは Windows Server 2003 ファミリ以外での動作を保証していません。また、そのような使用はサポートしていません。その他のオペレーティング システムでこのツールを使用する場合は、自己の責任において使用してください。

それから、

The Powercfg.exe tool is
not supported in Windows 2000

http://support.microsoft.com/kb/888742/ja

この文中に、

The Powercfg.exe tool is not supported in Microsoft Windows 2000. This is true even though the version of Powercfg.exe that is included in Windows Server 2003 may work in Windows 2000.

と書かれている通り、powercfg.exeをWindows 2000に使うことはサポート外だという点がちょっと引っかかる。 でもMS的にはサポート外だということだけで、実際にやってみると動作的に問題なさそうなので良し。(良いのか?) あとWindows 9x系ですが手元にもう無いので試してません。(レガシーのログオンスクリプトでやればADの問題は回避できるけどpowercfg.exeがどうだろう…) まだ残っている場合は注意が必要。

ちなみに今回例としてpowercfg.exeに渡すパラメーターは以下の通りとしました。

モニタの電源を切る (AC) 5 分後
モニタの電源を切る (DC) 5 分後
ハード ディスクの電源を切る (AC) 15 分後
ハード ディスクの電源を切る (DC) 15 分後
システム スタンバイ (AC) 行わない
システム スタンバイ (DC) 30 分後
システム休止状態 (AC) 行わない
システム休止状態 (DC) 60 分後
プロセッサ調整 (AC) ADAPTIVE
プロセッサ調整 (DC) DEGRADE

powercfg /?で設定方法出るので必要に応じてパラメーターを変えていきます。

実際の作業内容

ドメインコントローラー上(又はActive Directory管理ツール)で以下の作業を行う。

Active Directory ユーザーとコンピュータを起動
左ペインのツリーでドメイン、又は下位に全ユーザーが存在するOUを右クリック、プロパティ表示
グループポリシータブをクリック
既存グループポリシーがある場合はそれを選択して編集をクリック
無い場合は新規をクリック、適当な名前を付け編集
グループポリシーオブジェクトエディタの左ペインで以下を開く
ユーザーの構成→Windowsの設定→スクリプト
右ペインでログオンをダブルクリック
ファイルの表示をクリック
開いたフォルダに以下のファイルをコピー

c:\WINDOWS\ServicePackFiles\i386\powercfg.exe

フォルダのメニューバーでファイル→新規作成→テキストドキュメントの順にクリック
ファイル名変更できる状態なので、powercfg.bat(又は任意の.batファイル名)にリネーム
powercfg.batを右クリックし編集をクリック(メモ帳が起動する)
以下の内容を入力
powercfg.exe /C 組織の電源設定
powercfg.exe /X 組織の電源設定 /monitor-timeout-ac 5 /monitor-timeout-dc 5 /disk-timeout-ac 15 /disk-timeout-dc 15 /standby-timeout-ac 0 /standby-timeout-dc 30 /hibernate-timeout-ac 0 /hibernate-timeout-dc 60 /processor-throttle-ac ADAPTIVE /processor-throttle-dc DEGRADE
powercfg.exe /S 組織の電源設定

メニューバーでファイル→上書きしてからメモ帳を閉じる
powercfg.batとpowercfg.exeが入っているフォルダを閉じる
ログオンのプロパティウインドウで追加ボタンをクリック
スクリプトの追加ダイヤログのスクリプト名に以下を入力しOKボタンをクリック
powercfg.bat

ログオンのプロパティウインドウのOKボタンをクリック
後は開いているウインドウをOKボタン又は普通に閉じていく

動作確認

反映するまでちょっと待って動作確認。 適当に待ってクライアントでログオンしなおせば良いはず。 すぐに効果を確認したい場合はActive Directory サイトとサービスで今すぐレプリケートか、repadmin /syncallとかしてからクライアントでgpupdateとかしてログオンしなおせばOK。

反映しているか確認する方法は単に消えるか確認すればいいんだけど、コントロールパネル→電源オプション(XPの場合)を開いて電源設定が組織の電源設定になっていて、時間がちゃんと指定どおりになっていればOK。

あと、ユーザーが「一時的に電源消さない設定にしたい」といってきた場合は、上の部分を変更してもらっちゃう事で対応。 次のログオン時には元に戻るので、半強制という感じでしょうか。 ガチガチではなくこの位のゆるさが丁度良い様な気もします。

注意点

画面が自動的にオフになることで、ユーザーが電源ボタンを押しちゃう危険性がでてくると思います。 ユーザーは電源を入れるつもりがずとーんと落とされちゃうパターン。

それから帰宅する際、ディスプレイが消えていることからPCの電源が落ちていると錯覚してそのまま帰っちゃうパターン。 これやられちゃうと本末転倒なので注意が必要です。 powercfg.exeで強制的にハイバネートや休止状態に持っていけるけど、これはこれで問題があるような気もするし…

まぁその辺は運用でうまくやるしかないでしょう。(汗) powercfg.exe /?を良く見た上で検討するということで。

2007-08-01追記:
ハイバネートや休止状態はアレだけど、せめて夜中に生きているPCが無いか監査したいという場合は、単純にICMPの総当りでやってみるというのはどうでしょう。 UNIX寄りな方法ですが、例えばnmap使って192.168.1.0/24の調査する場合、

nmap -sP 192.168.1.0/24|grep -o '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*' > /root/checkpower/uplist_`date +%Y%m%d%H%M%S`.txt

みたいな。 uplist_日時.txtに起きているPCのIPのみがリストアップされます。

ちなみに複数のセグメントを指定してやりたい場合は、target.txtというテキストファイルを作って以下のように調査したいセグメントを記述。

192.168.1.0/24
192.168.2.0/24
192.168.3.0/24

で、

nmap -sP -iL target.txt|grep -o '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*' > /root/checkpower/uplist_`date +%Y%m%d%H%M%S`.txt

とやれば良いかも。 後は上のが夜中に実行されるようにcron仕込むだけです。 できたファイルと管理台帳とかをExcelやAccessでぶつければ犯人?特定可能かも。 クライアントがDHCPとかでダイナミックにIP取ってる場合はだめですけどね。(苦笑)

2007-08-03追記:
こんな記事発見。

職場でのエコ、実行はいまひとつ――米調査
http://www.itmedia.co.jp/news/articles/0708/03/news020.html

米国での話ですが、日本はどうだろう。

やっぱり直接的な自分への負担がないと意識に繋がらないということでしょうか。 間接的には給与という形で関係は無いわけではないと思うんですが。 自分も偉そうな事言えませんけどね。(苦笑)


投稿日 : 2007年7月30日

この記事に関する言及

このエントリーのトラックバックURL:
http://akionweb.com/mt-tb.cgi/389

コメント

とても参考になりました。感謝です。
早速活用させていただきたく存じます。
ありがとうございます。

投稿者 りんりん : 2009年2月11日 12:58

りんりんさん、はじめましてこんにちは。

大分前の記事なので今ではもっと良い方法があるのかもしれませんが、参考にしていただけたなら幸いです。

投稿者 AKI ON WEB : 2009年2月12日 07:56

このページに対する感想、意見をお寄せ下さい。




保存しますか?

(書式を変更するような一部のHTMLタグを使うことができます)

おことわり

当サイトに掲載している全ての情報は、全て当サイト管理者が個人的、実験的に試した事、又は独自に調査したものです。 従ってその情報に誤りがある可能性も多分にあります。 当サイトの情報をそのまま鵜呑みにされませんようお願い申し上げます。 また当サイトの情報を元に作業されたりする場合はそれをご理解頂いた上で、あくまで自己責任の元で行ってください。

トップページ»3.2.Microsoft»Active Directory内全PCの省電力対策