Windows8.1のログオンスクリプトは5分後に実行される

今日偶然気付いたのですが、Windows 8.1 や Windows Server 2012 R2 では、ログオンから5分後にやっとログオンスクリプトが実行されます。

(Windows 7 や Windows 8 では、ログオン直後に実行されます。)

 

 

この動作についてマイクロソフト社のサポートサイト(http://support.microsoft.com)に情報が出ていました。

不具合ではないようです。

Logon scripts do not run for five minutes after a user logs on to a Windows 8.1-based computer

※ URL 末尾の /en を /ja に書き換えれば、日本語版になります。機械翻訳ですが。

 

 

グループポリシー「ログオン スクリプトの遅延を構成する」の設定により、ログオン直後に実行させることも、任意の時間だけ遅延させることもできるようになっています。

 

 

この「遅延機能」の目的は、どうやらログオン時の処理を軽減し、デスクトップ画面表示を早めることのようです。

その意図するところは理解できなくもないのですが、ちょっとありがた迷惑ではないかと思います。

 

ServerManager.exe

Windows Server 2008 の「サーバー マネージャ」と Windows Server 2008 R2 の「サーバー マネージャー」の実体は、「Microsoft管理コンソール(mmc.exe)」のスナップインの一つである「ServerManager.msc」でした。

 

 

一方、Windows Server 2012 や Windows Server 2012 R2 の「サーバー マネージャー」はプロセスとして独立し、「%systemroot%¥System32」にある「ServerManager.exe」になっています。

そのため、コマンドプロンプトや「ファイル名を指定して実行」に「ServerManager.msc」と打ち込んでも起動出来ません。

 

フォレストとドメインの機能レベルを下げてみた。

フォレストやドメインの機能レベルは、一度上げてしまったが最後、二度と下げる事はできない・・・

そう思ってました。

が、どちらも「2008R2以上のレベルから、2008まで」なら、下げられることを確認しました。

※Technetの下記ページによると、フォレストの機能レベルを下げる事ができるのは「Active Directory のごみ箱が有効になっていないとき」という条件付きだそうです。

AD DS のインストールおよび削除に関する新機能

 

 

上記ページには肝心の手段が書いていないのですが、PowerShellでできることが判明しました。

フォレストの機能レベルなら「Set-ADForestMode」、ドメインの機能レベルなら「Set-ADDomainMode」です。

※Windows Server2008R2の場合は、予め「ActiveDirectory」モジュールをインポートしておく必要があります。

 

 

これらのコマンドレットの必須パラメーターは二つだけです。

「-Identity」でドメイン名を、「-ForestMode(ないし-DomainMode)」で下げたいレベルを指定します。

フォレストのルートドメイン「test.com」でフォレストの機能レベルを2008にする場合は、

Set-ADForestMode -Identity test.com -ForestMode windows2008forest

と書きます。

 

 

この方法により、Windows Server 2012やWindows Server 2012R2のドメインコントローラーで、両機能レベルを「2012」や「2012R2」から「2008」まで下げることもできました。

※上げることもできました。

Start Screen Layout

Windows Server 2012 R2 (preview版) から新たに追加されたグループポリシー「Start Screen Layout」を設定してみました。

「コンピューターの構成」と「ユーザーの構成」の両方において、

「ポリシー」 => 「管理用テンプレート」  => 「タスクバーと[スタート]メニュー」  

の中に有ります。

※ローカルグループポリシーでも、ポリシーという階層が無いこと以外は同じです。

 

 

対象は Windows 8.1 以降なので、残念ながら Windows 8 に適用しても意味は無いのですが、 そう言われればやってみたくなるのが人情というもの。

ドメインコントローラーとして構築した Windows Server 2012 R2 の「ユーザーの構成」側でこのグループポリシーを有効化し、ドメインのメンバーである Windows 8 に適用させてみました。そして結果を確認するため、Windows 8 側で "rsop" コマンドにより「ポリシーの結果セット」を開きます。

すると、思った通り「管理用テンプレート」の中に「タスクバーと[スタート]メニュー」は無く、「レジストリの追加設定」がありました。これは、自身に存在しないグループポリシーが適用された場合の表示です。

そしてその中身も「Start Screen lauout」ではなく、一つのレジストリキー配下の二つのレジストリ値となっています。

[レジストリキー]

HKEY_CURRENT_USER¥Software¥Policies¥Microsoft¥Windows¥Explorer

[レジストリ値]

-  LockedStartLayout (REG_DWORD)  "1"

-  StartLayoutFile (REG_SZ)  "(空欄)" 

 

 

このレジストリキーは、デフォルトの状態では Windows 8.1 にも存在しないものです。このグループポリシーが適用されることで、始めて作成されます。

二つ目のレジストリ値が 空欄 なのは、グループポリシーの設定時に入力していなかったためです。このグループポリシーは有効にするだけでは意味が無く、レイアウトを定義する XML ファイルのパスを入力してやる必要があるのです。

 

 

XML ファイルを自分で書かないと駄目なのか・・・ と早とちりして挫折しかけましたが、グループポリシーの説明文(英語)をちゃんと読んでみると、PowerShell でエクスポート出来ることが分かりました。

Windows 8.1 ないし Windows Server 2012 R2 (ドメインコントローラーである必要はありません。)で雛形となるレイアウトを作っておき、そのコンピューターの powerShell で

"export-startlayout -path layout.xml -as xml"

というコマンドレットを実行します。これにより、現在のレイアウトを記述したXMLファイルがカレントディレクトリに作成されます。

 

 

このコマンドレットについては、早くも TechNet に解説が載っていました。

■ Start Screen Cmdlets in Windows PowerShell

http://technet.microsoft.com/library/dn283399(v=wps.630).aspx

※このページに載っているコマンドレットは、どれも PowerShell4.0 でしか使えないようです。

 

 

このXMLファイルをネットワーク上の共有フォルダに置いておき、そのパスをグループポリシーとして設定してやることで、適用先のドメインユーザーのスタート画面を統一出来るようです。

当然、ドメインユーザーはその共有フォルダへのアクセス権を持つ必要があると思われるのですが、今回の検証ではその手順は省いてちょっとズルしました。

グループポリシーが適用された Windows 8.1 のローカルディスク上に、Windows Server 2012 R2 にてエクスポートしたXMLファイルをコピーします。それからレジストリエディタを開き、上記「二つ目のレジストリ値」に直接そのファイルパスを書き込みます。

そうしてサインアウト&再サインインしたところ、スタート画面に元々あった「カレンダー」や「天気」等のタイルが ほとんど無くなり、Windows Server 2012 R2 のスタート画面が再現されました。

正確に言うと、「サーバーマネージャー」と「管理ツール」が欠けた状態です。サーバーマネージャーは元々サーバーOSにしか無いものなので当然なのですが、管理ツールまで無いのは不思議です。

 

 

XMLファイルをブラウザやメモ帳で開いてみると分かりますが、個々のアプリケーションは「AppID」という識別子により記述されています。

コンピューターにインストールされている各アプリケーションのAppIDは、powerShell の "get-startapps | fl" というコマンドレットで確認出来るのですが、Windows 8.1 で実行してみたところ、「管理ツール」のAppIDはありませんでした。(コントロールパネルの中には有るのに・・・)

 

 

なお、"get-startapps | fl" により確認出来た「電卓」の AppID を XML ファイルに書き足してやる事で、スタート画面に「電卓」を表示させる事が出来ました。

 

Windows Server 2012 R2 Preview のスタートチップ

画面左下に復活(?)したスタートボタンのようなモノは、正しくはスタートチップ(Starttip)と呼ぶそうです。

前回、普通にクリックすればスタート画面が表示されるだけであると書きましたが、右クリックしてみると、スタートメニューっぽいメニューが表示されました。

内容は以下の通りです。

    ・ プログラムと機能

    ・ 電源オプション

    ・ イベント ビューアー

    ・ システム

    ・ デバイスマネージャー

    ・ ネットワーク接続

    ・ ディスクの管理

    ・ コンピューターの管理

    ・ Windows PowerShell

    ・ Windows PowerShell (管理者)

    ・ タスクマネージャー

    ・ コントロールパネル

    ・ エクスプローラー

    ・ 検索

    ・ ファイル名を指定して実行

    ・ シャットダウン >

    ・ デスクトップ

 

シャットダウンが出来るのはいいですね。クリックすると、右側に選択肢が展開され、[シャットダウン] か [再起動] が選べます。

 

一番下の [デスクトップ] が何のためにあるのか一瞬疑問に思ったのですが、すぐに分かりました。

スタート画面などデスクトップ以外の画面でも、画面左下隅にポインターを寄せればスタートチップを表示出来るため、そこで [デスクトップ] をクリックすればデスクトップに戻ることができます。

 

Windows Server 2012 R2 Preview をセットアップ。

2ちゃんねるに「もう Technet でダウンロード出来る。」と書いてあったので、さっそくココからISOをダウンロードして、セットアップしてみました。

 

 

OSのバージョンはやはり 6.3 。ビルドは 9431

PowerShell のバージョンは 4.0 、IIS は 8.5 に上がっていました。

 

 

タスクバーの左端にスタートボタンが復活! していましたが、押してもスタート画面になるだけ。Windows Server 2008 R2 以前のようなスタートメニューは復活していませんでした。

 

 

gpedit.msc で、グループポリシーの中を見てみると・・・

コンピューターの構成の「管理用テンプレート」直下にあるフォルダだけでも、

・サーバー

・タスクバーと[スタート]メニュー

の二つが増えています。

後者はどうやら、スタート画面のレイアウトや、表示されるアプリケーションをコントロールできるポリシー群のようです。Windows 8 が出たばかりの頃には、スタート画面をグループポリシーで管理出来ないか、という問い合わせがよくあったそうなので、その声に応えたわけですね。(対象は Windows 8.1 以降ですが。)

 

 

netsh コマンドはまだありました。