スタートアップスクリプトが完了するまでログインを待機させる荒い方法を。
はじめにグループポリシーで以下を設定しておきます。
- コンピューターの構成→管理用テンプレート→システム→スクリプト→ログオン スクリプトを同期的に実行する : 有効
- コンピューターの構成→管理用テンプレート→システム→グループ ポリシー→ログオン スクリプトの遅延を構成する : 有効 (0 分)
これで、ログオンスクリプトの実行が完了するまでデスクトップの表示を待機させることができるかと。
次に、スタートアップスクリプトの最後に以下のような処理を追加しておきます。
New-Item -ItemType File -Path C:\Scripts\progress.txt -Force | Out-Null $aclrule = New-Object System.Security.AccessControl.FileSystemAccessRule @("Everyone", "FullControl", "Allow") $acl = Get-Acl C:\Scripts\progress.txt $acl.AddAccessRule($aclrule) Set-Acl C:\Scripts\progress.txt -AclObject $acl
これで、スタートアップスクリプトが終了するタイミングでフラグのファイルが作成されます。
次にログオンスクリプトとして以下のようなスクリプトを登録しておきます。
$count = 0 while (-not (Test-Path C:\Scripts\progress.txt) -and $count -lt 60){ Start-Sleep -Seconds 1 $count += 1 $count } Remove-Item C:\Scripts\import-progress.txt -Force
これで、スタートアップスクリプトが完了するか、60 秒経過するまでユーザーのログオンを待機させることができるかと。
スタートアップスクリプトはログオン後に実行されることもある (ログオン前に実行される保証がない) ため、ログオンスクリプトの同期実行を使用した荒い方法でした。