【PowerShell】Windowsのログオンスクリプトを自動展開する方法|GPOとの連携も紹介

【PowerShell】Windowsのログオンスクリプトを自動展開する方法|GPOとの連携も紹介 PowerShell

Windows環境では、ログオン時に特定の処理を実行する「ログオンスクリプト」がよく使われます。たとえばネットワークドライブの割り当てや、設定ファイルの同期などが代表的な用途です。PowerShellを使えば、これらのスクリプトを複数のPCに自動展開することが可能です。本記事では、PowerShellを活用したログオンスクリプトの展開方法と、グループポリシー(GPO)との連携手順について紹介します。

ログオンスクリプトの基本的な配置先

Active Directory環境では、ログオンスクリプトは以下のディレクトリに配置します。

\\<ドメイン名>\SYSVOL\<ドメイン名>\scripts

この場所に配置されたスクリプトは、グループポリシーで指定することで、ユーザーのログオン時に自動実行されます。

PowerShellスクリプトの準備

たとえば、以下のようなPowerShellスクリプトをログオン時に実行させたいとします。

# logon_script.ps1
New-PSDrive -Name "Z" -PSProvider FileSystem -Root "\\server\share" -Persist

このスクリプトは、ネットワークドライブZをマウントする処理を行います。

PowerShellでログオンスクリプトを配布

複数の端末に対してログオンスクリプトを自動で配置するには、以下のようなPowerShellスクリプトが有効です。

# 対象のPC一覧を取得(CSVでも可)
$computers = @("PC01", "PC02", "PC03")

# 配布するスクリプトのパス
$localScriptPath = "C:\Deploy\logon_script.ps1"
$targetFolder = "C$\Windows\System32\GroupPolicy\User\Scripts\Logon"

foreach ($pc in $computers) {
    $dest = "\\$pc\$targetFolder"
    if (Test-Path $dest) {
        Copy-Item -Path $localScriptPath -Destination $dest -Force
    }
}

このスクリプトは、対象の端末に対してログオンスクリプトをリモートコピーするものです。事前に管理者権限での接続が可能な状態にしておく必要があります。

グループポリシーでのログオンスクリプト指定

スクリプトを展開しただけでは実行されません。以下の手順でGPOにログオンスクリプトを設定します。

  1. グループポリシー管理コンソールを開く
  2. 対象のGPOを右クリックし「編集」を選択
  3. 「ユーザーの構成」→「Windowsの設定」→「スクリプト(ログオン/ログオフ)」を開く
  4. 「ログオン」をダブルクリックし、「追加」でPowerShellスクリプトを指定

なお、PowerShellスクリプトの場合、logon_script.ps1 の実行に対応するようGPOの「PowerShellスクリプトの実行ポリシー」も構成しておくと確実です。

PowerShellの実行ポリシーを制御するGPO設定

PowerShellの実行がブロックされることを防ぐため、以下のGPOも併せて設定しておきます。

ユーザーの構成
└ 管理用テンプレート
  └ Windows コンポーネント
    └ Windows PowerShell
      └ スクリプト実行を有効にする = 有効(制限付きまたは無制限)

これにより、PowerShellスクリプトの実行が許可され、ログオンスクリプトも正常に動作するようになります。

まとめ

PowerShellを使えば、ログオンスクリプトの作成から展開、GPOによる適用までを自動化できます。管理対象のPCが多い環境では特に有効で、標準化されたログオン処理や初期設定の自動化に役立ちます。必要に応じてバージョン確認やエラーハンドリングを加えて、堅牢な運用を目指しましょう。