今話題の元号の発表が4月1日にありますが、もう一つ話題になるのが「働き方改革」。
私の所属しているような中小の企業でも、その波は受けているらしく、会社命令で、社員のパソコンの使用時間を制限するように言われました。ようするに、一定の時刻をもってシャットダウンせよ、というのです。
その是非はさておいて、グループポリシーというものがあるので、簡単にできるだろうと踏んでいたのですが・・
以下の記事については個人的なメモですので、参考にされる際は自己責任でお願いします。
既存の環境
- Samba 4.3 ベースの Active Directory (AD) の環境。
- クライアントPCは、Windows 7 Pro SP1 (64bit) で、全てドメインメンバー。
ゴール
- グループポリシーを使用して、タスクスケジューラでクライアントPCを自動でシャットダウンさせる
- どのユーザーがログオンしていても、あるいはログオンしていなくとも、シャットダウンが実行される事
- ユーザーがアプリケーションを使用していたとしても、容赦なくシャットダウンできること
- ただし、シャットダウンの前に警告のダイアログを表示し、編集しているデータの保存や、タイムカード打刻、ログオフ等ができる猶予を与えること
また、グループポリシー適用方法は、以下のように実施します。
- 電源OFF後、再度電源をOnにしてログオンできないような措置をとること(これについてはまた後日・・)
- OU を作成して、そこにグループポリシーオブジェクト (GPO) をリンクさせ、コンピュータアカウントをOUに移動させる。
グループポリシーオブジェクト (GPO) の作成
以下の説明は、使用しているグループポリシーのテンプレートによって表記が異なる可能性があることを了承してください。
グループポリシーの管理 (GPMC) を開いて、新しいグループポリシーオブジェクトを作成するには、管理エディタの左側のナビゲーションから、[グループポリシーオブジェクト
] を右クリックして、[新規
] とします。
「新しいGPO」というウィンドウが開くので、適当な名前 (ここでは、client_shutdown_policy
とします) をつけて[OK
]。
すると、グループポリシー管理エディタ (GPME) が開きます。
グループポリシーにタスクを追加
グループポリシー管理エディタ (GPME) が開いたら、以下のように設定します。
ナビゲーションツリーを次のようにたどります。
[コンピューターの構成
] → [基本構成
] → [コントロールパネルの設定
] → [タスク
]
タスクの一覧 (空のはずです) が表示されるので、そこで右クリックして、
[新規作成
] → [タスク (Windows Vista およびそれ以降 )
]
で、新しいタスク ( Windows Vista およびそれ以降) のプロパティ が表示されます。
内容は以下のようにします。
[全般] タブ
ここでは、タスクの全般に関する部分を設定します。
主には、タスクを実行するユーザアカウントに関する設定です。
- 操作: 更新
- 名前: 任意 (ここでは、「自動シャットダウン」 としています)
- セキュリティオプション
- タスクの実行時に使うユーザーアカウント:
NT AUTHORITY\SYSTEM
- ユーザーがログオンしているときのみ実行する
- タスクの実行時に使うユーザーアカウント:
タスクの実行時に使うユーザーアカウントは、そのまま手入力で入れてください。NT
と AUTHORITY
の間には、半角のスペースが入ります。
残りの項目はそのままで大丈夫です。
[トリガー] タブ
ここでは、タスクをいつ実行するのかに関して設定します。
トリガーを新規で一つ追加します。
タスクの開始: は スケジュールに従う として、毎日19:00にタスクを実施する場合は次の画像のとおりです。
曜日ごとに設定したい場合は、毎週 にしてどの曜日にタスクを実施するのか選択できます。
必ず、[有効
] にチェックが入っているのを確認してください。
[操作] タブ
操作タブの操作っておかしな訳にも思えますが、英語版では Action という項目名になってるのではないかと想像します。要するに、タスクでどんなアクションを起こすのかを設定します。
[新規
] ボタンで、操作を一つ追加します。
- 操作: プログラムの開始
- プログラム/スクリプト:
C:\windows\system32\shutdown.exe
- 引数の追加:
/f /s /t 60 /c "60秒後にシャットダウンします"
その他はそのままで、[OK
] とします。
その他のタブ
その他のタブについては、必要に応じて設定してください。
単純に、パソコンをシャットダウンさせるだけであれば、ここまでの設定で大丈夫です。
一通り設定を終えたら、[OK
] を押します。すると、タスクの一覧に今作成したタスクが登録されたと思います。
グループポリシー管理エディタ を閉じて、グループポリシーの内容が適用させます。
OU (組織単位) の作成と GPO のリンク
グループポリシーの管理 のナビゲーションツリーで、任意の名前のOUを作成します。
このOUに先程作成した GPO をリンクさせます。
その後、コンピュータアカウントを、先程の OU に入れます。
そのためには、Active Directory ユーザーとコンピューター(ADUC) を開きます。
ADUC のナビゲーションツリーに先程の OU が見当たらない場合は、[最新の情報に更新
] することで表示されるはずです。
その OU に、シャットダウンさせたいコンピューターアカウントを移動させます。
GPO 適用の確認
GPO がコンピューターに適用されるまでは少々時間がかかります。
もし今すぐに結果を見たい場合には、該当するコンピュータ上のコマンドラインで、
GPUPDATE /FORCE
を実行します。
その後、タスクスケジューラで確認するか、コマンドラインで
SCHTASKS
で、タスクの一覧が表示されますので、コマンドでも確認できます ( grep
コマンドが欲しくなりますが・・)。
ただし、気をつけないといけないのは、一般ユーザー (いわゆるDomain Users
) でログオンした場合は、その該当タスクを見ることができないので注意です。必ず管理ユーザー(Domain Admins
に所属しているユーザー)で確認してください1。
また、SCHTASKS
コマンドは /S
オプションをつけることで、リモートホストのタスクの一覧を見ることができます。
SCHTASKS /S ホスト名
躯(むくろ)の山
ここから以降は、躯の山、、つまり私がつまずいたり失敗した検証の山になります。
前項までの設定ができて、テストや実施に問題がなかった場合はここから以降の部分は読まなくても大丈夫です。
NGパターン
タスクの設定で、NGになるパターンです。いずれも、タスク設定の 全般 タブに関連します。
ユーザーアカウントをAdministratorに
ユーザーを MYDOMAIN\Administrator
とした場合、「ユーザーがログオンしているかどうかにかかわらず実行する」とした場合はOKパターンになります。ただしこの場合、パスワードを設定しておく必要があります。
このパスワードは、暗号化されているとはいえ、ポリシーファイル (XMLファイル) にテキストとして記載されてしまうので、気になる方にとってはNGになります。
また、同様に「パスワードを保存しない」にチェックした場合は、
イベントID: 4098「アクセスが拒否されました」
となって、タスクの登録に失敗します。
ユーザーアカウントを BUILTIN\SYSTEM に
これが一番ハマったNGパターンです。
[全般
]タブの中の、ユーザーアカウントを入力するところで、[ユーザーまたはグループの変更
] ボタンをクリックして、[場所
] をドメインではなく、 ローカルコンピューターのホスト名をクリックし[OK
]します。
それから、オブジェクト名にSYSTEM
と入力し、[名前の確認
]ボタンを押し、[OK
] をクリックすると、ユーザーアカウントが「BUILTIN\SYSTEM
」と表示された上、さらにその下の項目がグレーアウトされた状態になり、あたかもこれが正しい選択かのよう に見せますが、実はこれが罠です。
ポリシーを適用させると、次のようなイベントが記録されます。
ログの名前: Application
ソース: Group Policy Scheduled Tasks
イベント ID: 4098
shutdown_clients_policy {****}' グループ ポリシー オブジェクトの コンピューター '自動シャットダウン' 基本設定項目は、エラー コード '0x80070534 アカウント名とセキュリティ ID の間のマッピングは実行されませんでした。' このエラーは非表示にされました。 で失敗したため適用されませんでした
なんだか、へんてこりんな感じの訳になっていますが、ちなみに英語では次のようにります。
The computer ‘Auto Shutdown’ preference item in the `client_shutdown_policy {****}’ Group Policy object did not apply because it failed with error code ‘0x80070534 No mapping between account names and security IDs was done.’ This error was suppressed.
BUILTIN\SYSTEM
と セキュリティIDが一致しない為みたいです。
これは、ドメインのSystem
アカウントでも同様のエラーが発生しますので、これもやはりNGになります。
NT AUTHORITY\SYSTEM も怪しい場合がある
このページの最初の方で OKパターン として書いているNT AUTHORITY/SYSTEM
の場合ですが、これも当初はエラーが出ていました。
次のようなイベントです。
ログの名前: Application
ソース: Group Policy Scheduled Tasks
イベント ID: 4098
'client_shutdown_policy_test {****}' グループ ポリシー オブジェクトの コンピューター '自動シャットダウン' 基本設定項目は、エラー コード '0x80041316 タスク XML に予期しないノードが含まれています。' このエラーは非表示にされました。 で失敗したため適用されませんでした
これも同様に、英語での記述例を次に示します。
The computer ‘Auto Shutdown’ preference item in the ‘client_shutdown_policy {****}’ Group Policy object did not apply because it failed with error code ‘0x80041316 The task XML contains an unexpected node.’ This error was suppressed.
もしも NT AUTHORITY\SYSTEM
使用して設定して、グループポリシーが適用されない場合、次のような回避策があります。
回避策
OKパターンでもGPOが適用されない場合は、以下のようにしてみてください。
- 該当しているグループポリシーのIDを調べます (先程のログの
{********}’
の部分です2) - sysvol 共有にアクセスし、XMLファイルを特定する。
例:\\Server\sysvol\mydomail.local\{********}\Machine\Preferences\ScheduledTasks\ScheduledTasks.xml
- XMLファイルを編集し、
<LogonType>Interactive Token</LogonType>
を まるごと削除 して保存します。 - 再度、グループポリシーを適用させます。
これで、適用されるはずです。
参考サイト: GPO – Issue Deploying A Scheduled Task Running As “SYSTEM”
まとめ
先にも書いたように、一般ユーザーでは管理用のタスクが見えないことを発端として、数々の問題があり、途中でタスクスケジューラではなくて、スタートアップスクリプトで行こうか・・とまでなりましたが、なんとかできました。
いろいろググっていく中で、これはいつものことですが、日本語のサイトではあまり情報が得られなかったのと、アメリカを中心とした英語圏での情報もイマイチな感じでしたが、最後の最後になって核心的なことを記載した記事が見つかって、助かりました。
0件のコメント