2012年1月10日火曜日

Windows Vista,7,2008でログオンスクリプトによるネットワークドライブ接続に失敗する

ネットワークドライブが見えない!
Active Directory環境において、グループポリシーのログオンスクリプトを利用して自動的にネットワークドライブに接続させようとしても、うまくいかないことがある。
私が最近遭遇したのは、ログオンスクリプトをVBSで書いていてWScript.NetworkオブジェクトのMapNetworkDriveメソッドでネットワークドライブを割り当てたのに、マイコンピュータに表示されないしnet useコマンドでも表示されないというもの。MapNetworkDriveメソッドの結果をログファイルに出力してみると、結果(Err.Number)は0。つまり「スクリプト的には処理に成功している」のだが、「実際にはネットワークドライブが使えない」という状況であった。
一体何が起こっているのか?
調査の結果、technetに該当記事を見つけた。
Windows Vista を使用したグループ ポリシーの展開のページ中程、「Windows Vista の消費設定 - ユーザー アカウント制御のためにグループ ポリシー スクリプトが失敗する」 セクションがそれである。

少し(かなり?)分かりにくい文章なので、現象が発生する条件を言い換えると、「Vista以降でUACが有効になっている場合で、ローカルPCの管理者権限を持つ(ローカルPCのAdministratorsグループのメンバの)ユーザでログオンした場合」に、この現象が起こる。ローカルPCに対して一般ユーザ権限しか持たないユーザでログオンすれば、この現象は起こらない。
詳細を図に示してみた。
Figure.1 ログオンスクリプトとエクスプローラの実行権限の違い
管理者ユーザでログオンすると、ログオンスクリプトはUACで昇格された権限(Elevated User Token)で実行されて、ネットワークドライブがマップされる。ところが、その後にユーザがエクスプローラを起動すると、これはUACで制限された権限(Limited User Token)で実行される。昇格した権限でマップしたネットワークドライブは、制限された権限で実行したエクスプローラからは見えない、ということらしい。
一方、管理者ユーザ以外(一般ユーザ)でログオンすると、ログオンスクリプトも制限された権限で実行され、エクスプローラも同じく制限された権限で実行されるため、ネットワークドライブを見ることができる。
解決策:ネットワークドライブマップを制限された権限で実行する
先ほどのTechnetのページの一番下の方に、「付録 A : LaunchApp.wsf」というセクションがある。こいつは、スクリプトを制限された権限で実行するためのWrapper。使い方は簡単で、ログオンスクリプトとしてLaunchApp.wsfを実行するようにしておき、その引数として、実際に実行したいスクリプト(今回で言えばネットワークドライブをマップするスクリプト)のパスを与えてやればよい。
LaunchApp.wsfを利用した時の動作イメージを下図に示す。

Figure.2 LaunchApp.wsf使用時の動作概念

0 コメント:

コメントを投稿