本記事はマイクロソフト社員によって公開されております。
こんにちは。Windows Commercial Support Directory Services チームです。
今回はログオン スクリプトが適用されない、または実行されないという事象が発生したとき、お試しいただきたい設定について紹介いたします。
お試しいただく前に
設定を試す前に、ユーザーから対象ファイルへのアクセスに問題が無いかどうかなど、切り分けを行うことをご検討ください。つまり、ログオン スクリプトによる設定ではなく、ユーザーで直接ログオン スクリプトのファイルを実行できるか、という点です。
具体的には、対象ユーザーにて、エクスプローラーから直接スクリプトが配置されている場所へのパスを入力してアクセスできること、およびファイルが存在していることをご確認ください。
もし、スクリプトをファイル共有上に配置している場合は、ネットワーク観点での切り分けを実施するために、スクリプトの配置場所をローカルのフォルダーとして、ポリシーで設定しているパスもローカルに配置したフォルダーに変更したり、ドメインのグループ ポリシーではなく、ローカル グループ ポリシーで設定したりしても、実行がうまくいかないのかどうかお試しください。
また、ログオン スクリプトがポリシーとして適用されていることをご確認ください。確認の仕方は、まずログオン スクリプトが実行されないユーザーでコマンド プロンプトを起動し、以下のコマンドで出力される html ファイルを開きます。
gpresult /h gp.html
次に、以下の図のように、ユーザーの構成の [ポリシー] - [Windows の設定] - [スクリプト] - [ログオン] にて、実行したいスクリプトが表示されていることを確認します。
上記に問題に問題ないことを確認しても、やはりログオン スクリプトが想定通り実行されないといった場合には、以下の設定をお試しください。
お試しいただきたい設定
ポリシーやスクリプトへのアクセスに問題が無く、それでもログオン スクリプトが実行されない場合、以下の設定をお試しください。
- 高速ログオンの無効化
- 低速リンクの検出の無効化
- WaitForNetwork の設定
- GpNetworkStartTimeoutPolicyValue の設定
以下の各設定の詳細について記載いたします。
1. 高速ログオンの無効化
Windows OS では既定で高速ログオンの機能が有効となっており、ネットワークへの接続が完了する前にグループ ポリシーの処理が始まる場合があります。
高速ログオンを無効化することで、スタートアップおよびログオン時において、ネットワークが初期化されるまで待機します。高速ログオンの機能は、以下のポリシーで無効化することができます。
ポリシー パス : [コンピューターの構成] - [ポリシー] - [管理用テンプレート] - [システム] - [ログオン]
ポリシー名: [コンピューターの起動およびログオンで常にネットワークを待つ]
設定値: [有効] ([有効] を選択することにより、高速ログオンの機能が無効になります。)
2. 低速リンクの検出の無効化
接続されているネットワークが低速リンク (既定では 500 Kbps) として検出された場合、グループ ポリシーの適用処理にかかる時間を削減するため、ログオン時に一部のポリシーを適用しない機能が既定で有効になっております。
接続されるネットワークが低速リンクであると判断された場合、ログオン スクリプトの実行やドライブ マップの処理はスキップされてしまいます。低速リンクの検出は、以下のポリシーで無効化することができます。
ポリシー パス: [コンピューターの構成/ユーザーの構成] - [管理用テンプレート] - [システム] - [グループ ポリシー]
ポリシー名: [グループ ポリシーの低速リンクの検出]
設定値: [有効]
接続速度: 0
** 設定値を [有効] にし、かつ接続速度を 0 にすることにより、すべての回線が高速であるとみなされるようになります。
** 設定値を [無効] にすると、[未構成] に設定しているのと同等の扱いとなります。
3. WaitForNetwork の設定
Winlogon プロセス (ログオン処理などを実施しているプロセス) が Netlogon サービスが起動されるのを待つための設定です。WaitForNetwork は、Winlogon 起動時に Netlogon サービスが起動するのを最大で 2 分間待つ設定となりますが、ログオン時にネットワークの接続を待つ設定ではないことをご留意ください。
手順:
- [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。
- “regedit” と入力し、[OK] ボタンをクリックします。
- レジストリ エディターで、[WaitForNetwork] レジストリを見つけます。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\WaitForNetwork - [WaitForNetwork] という名前のエントリが見つからない場合は、設定が行われていないとご判断ください。
- [Winlogon] を右クリックし、[新規] をポイントし、[DWORD 値] をクリックします。
- [値の名前] ボックスに “WaitForNetwork” と入力します。
- [WaitForNetwork] を右クリックし、[修正] をクリックします。
- [DWORD 値の編集] ダイアログ ボックスで [値のデータ] ボックスに “1” と入力し、[OK] ボタンをクリックします。
- レジストリ エディターを終了します。
4. GpNetworkStartTimeoutPolicyValue の設定
ネットワーク接続が初期化されていないなどの理由でドメイン コントローラーと通信が取れない場合に、コンピューター ポリシーの適用を最大 10 分間試行し、処理が完了するまでログオン画面を表示させないようにする設定です。
手順:
- [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。
- “regedit” と入力し、[OK] ボタンをクリックします。
- 以下を展開し、[GpNetworkStartTimeoutPolicyValue] レジストリを見つけます。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GpNetworkStartTimeoutPolicyValue - [GpNetworkStartTimeoutPolicyValue] という名前のエントリが見つからない場合は、設定が行われていないとご判断ください。
- [Winlogon] を右クリックし、[新規] をポイントし、[DWORD 値] をクリックします。
- 新しい名前として “GpNetworkStartTimeoutPolicyValue” と入力し、Enter キーを押します。
- [GpNetworkStartTimeoutPolicyValue] を右クリックし、[修正] をクリックします。
- [基数] の下の [10 進] をクリックします。
- [値のデータ] ボックスにタイムアウト値として設定する秒数を入力し、[OK] をクリックします。
- レジストリ エディターを終了します。
※ 最大値は 600 です。
リトライ間隔は 2 秒で固定されております。
その他
スクリプト ファイルへのアクセスに問題が無く、ポリシーが適用されており、上記をお試しいただいてもスクリプトが想定通り実行されていない、という場合は、スクリプトがどこまで実行されているのか、そもそも実行されていないのかを判断できるように、スクリプトを改修いただくことをご検討ください。
例えば、バッチ ファイルであればログ ファイルのようなテキスト ファイルを出力するようなコマンドを、ログオン スクリプト内の各処理の前後で実行します。
例)以下のように echo 記述すれば、logfile.txt に処理の開始と終了の日時を記録することができます。
echo %date% %time% start function hogehoge > logfile.txt
rem ここに処理
echo %date% %time% finished function hogehoge >> logfile.txt
変更履歴
2024/09/10: 本ブログの公開