もっと詳しく

Windowsグループポリシーを使用すると、コンピューターの起動/シャットダウン時またはユーザーのログオン/ログオフ時にさまざまなスクリプトファイルを実行できます。 GPOを使用して、ドメインコンピューターで従来のバッチログオンスクリプトを実行するだけではありません(.bat.cmd.vbs)だけでなく、PowerShellスクリプトを実行するためにも(.ps1)起動/シャットダウン/ログオン/ログオフ中。

最新バージョンのWindowsでは、GPOエディターからログオン/ログオフPowerShellスクリプトを直接実行できます(以前は、.batバッチファイルから.ps1ファイルをパラメーターとして呼び出す必要がありました。 powershell.exe 実行可能)。

コンテンツ:

  • グループポリシーを使用してWindowsの起動時にPowerShellスクリプトを実行する方法は?
  • ユーザーのログオン/ログオフ時にWindowsPowerShellスクリプトを実行する

ドメイングループポリシー管理コンソールを実行します(GPMC.msc)、新しいポリシー(GPO)を作成し、ユーザーまたはコンピューターを使用してターゲットのActive Directoryコンテナー(OU)に割り当てます(WMI GPOフィルターを使用して詳細なポリシーのターゲット設定を行うことができます)。 ポリシーに切り替える 編集 モード。

PS1スクリプトをいつ実行するかに応じて、PowerShellスクリプトを実行するGPOセクションを選択する必要があります。

  • ユーザーがコンピューターにログオン(ログオフ)するときにPSスクリプトを実行する場合(ユーザーの環境設定またはプログラムを構成するため:たとえば、ADユーザーのプロパティに基づいてOutlook署名を自動的に生成する場合、スクリーンセーバーをカスタマイズする、または画面設定を開始します)、GPOセクションに移動する必要があります: ユーザー設定->ポリシー->Windows設定->スクリプト(ログオン/ログオフ);
  • コンピューターの起動時(レガシープロトコルを無効にするため:NetBIOSおよびLLMNR、SMBv1、コンピューターのセキュリティ設定の構成など)またはコンピューターのシャットダウン前にPowerShellスクリプトを実行する場合は、コンピューターを使用してGPOセクションに移動する必要があります。設定: [コンピューターの構成]->[ポリシー]->[Windowsの設定]->[スクリプト(起動/シャットダウン)]。

グループポリシーを使用してWindowsの起動時にPowerShellスクリプトを実行する方法は?

コンピューターの起動時にPowerShellスクリプトを実行する必要があるとします。 を選択 起動 ポリシー、およびに移動します パワーシェル スクリプト タブ。

次に、PowerShellスクリプトを含むファイルをドメインコントローラーにコピーする必要があります。 ps1ファイルをドメインコントローラーのNetlogonディレクトリにコピーします(たとえば、 woshub.comnetlogon)。

スタートアップPowerShellスクリプトを構成するため、NTFSを確認する必要があります。読み取りと実行」の権限 Domain Computers および/または Authenticated Users ps1ファイルのアクセス許可のグループ。

gpo起動のPowerShellスクリプトファイルをドメインコントローラーのnetlogonフォルダーにコピーします

今クリック 追加 Netlogonのps1スクリプトファイルへのUNCパスを指定します。

グループポリシーを介してWindowsの起動時にPowerShellスクリプトを実行する

GPOを介して複数のPowerShellスクリプトを実行する場合は、を使用してスクリプトが実行される順序を制御できます。 上下 ボタン。

コンピューターの起動中にPowerShellスクリプトを正しく実行するには、[コンピューターの構成]->[管理用テンプレート]->[システム]->[グループポリシー]セクションのポリシーを使用して、スクリプトが起動するまでの遅延時間を構成する必要があります。 「ログオンスクリプト遅延の構成」 ポリシーを設定し、ログオンスクリプトを開始する前に分単位の遅延を指定します(初期化を完了し、必要なすべてのサービスをロードするのに十分です)。 通常、ここに1〜2分入れれば十分です。

ログオンスクリプト遅延ポリシー

PowerShellスクリプトでWindowsネットワークを使用している場合は、「スタートアップポリシーの処理待機時間を指定する一部のGPOの「」オプション([コンピューターの構成]->[ポリシー]->[管理用テンプレート]->[システム]->[グループポリシー])。 ここで60秒から始めてみることができます。 このポリシーを有効にすると、コンピュータは起動スクリプトを実行する前にネットワークの可用性の通知を60秒待ちます。 これは通常、Windowsネットワークスタックを初期化するのに十分な時間です。

gpoパラメータ:起動ポリシー処理待機時間

Windows Server2012R2およびWindows8.1以降では、GPOのPowerShellスクリプトは、バイパスモードのNetLogonディレクトリから実行されます。 これは、PowerShellスクリプト実行ポリシーの設定が無視されることを意味します。 別の共有フォルダーからスクリプトを実行する場合、またはネットワーク上にWindows7またはWindowsServer 2008R2クライアントがまだある場合は、PowerShellスクリプト実行ポリシーを構成する必要があります。

既定では、Windowsのセキュリティ設定ではPowerShellスクリプトの実行は許可されていません。 PowerShellスクリプト実行ポリシー設定の現在の値は、 Get-ExecutionPolicy コマンドレット。 ポリシーが構成されていない場合、コマンドは 制限付き (すべてのスクリプトがブロックされます)。 PowerShellスクリプトを実行するためのセキュリティ設定は、「スクリプトの実行をオンにする」ポリシー([GPOコンピューターの構成]セクション->[管理用テンプレート]->[Windowsコンポーネント]->[Windows PowerShell])。 可能なポリシー値:

  • 署名されたスクリプトのみを許可する (AllSigned)–署名されたPowerShellスクリプトのみを実行できます(「PowerShellスクリプトにデジタル署名する方法は?」)—これはセキュリティの観点から最適なオプションです。
  • ローカルスクリプトとリモート署名スクリプトを許可する (RemoteSigned)–ローカルおよび署名されたリモートスクリプトを実行できます。
  • すべてのスクリプトを許可する (無制限)– PowerShellスクリプトの実行を許可するため、最も安全でないオプション。

PowerShellスクリプト実行ポリシー

PowerShellスクリプト実行ポリシーの設定のいずれかが適切でない場合は、PowerShellスクリプトをで実行できます。 バイパス モード(スクリプトはブロックされず、警告は表示されません)。

これを行うには、PowerShellスクリプトを 起動 -> スクリプト セクション。 このセクションでは、powershell.exe実行可能ファイル(記事で説明されているスクリプトと同様)を呼び出すことにより、PS1スクリプトを実行できます。 設定:

  • スクリプト名: %windir%System32WindowsPowerShellv1.0powershell.exe
  • スクリプトパラメータ: -Noninteractive -ExecutionPolicy Bypass -Noprofile -file %~dp0MyPSScript.ps1

グループポリシーを介してargsでpowershell.exeを実行します

用語 %~dp0 スクリプトディレクトリ(この場合はNETLOGON)へのUNCパスに自動的に変換される環境変数です。

この場合、Bypassパラメーターを使用して(信頼されていない場合でも)PowerShellスクリプトの実行を許可する必要があります。

コンピューターを再起動してGPO設定を更新し、Windowsの起動後にPowerShellスクリプトが実行されることを確認します。

ユーザーのログオン/ログオフ時にWindowsPowerShellスクリプトを実行する

ユーザーがWindowsにログイン(またはログアウト)したときにPowerShellスクリプトを自動的に実行する方法を見てみましょう。

コンピューターの起動時ではなく、ユーザーがWindowsにログインした後(コンピューター上のユーザーごとに)にスクリプトを実行する必要がある場合は、GPOをユーザーと一緒にActiveDirectoryOUにリンクする必要があります。 この場合、PowerShellスクリプトは、GPOの[ユーザー構成]セクションで構成する必要があります。

ポリシーを特定のコンピューターのすべてのユーザーに適用する場合は、ポリシーをコンピューターのOUにリンクし、 ユーザーグループポリシーのループバック処理モードを構成する [コンピューターの構成]->[管理用テンプレート]->[システム]->[グループポリシー]のパラメーター)。 ループバック処理を有効にしない場合、[ユーザー構成]セクションのパラメーターはユーザーに適用されません。 詳細については、「ユーザーまたはコンピューターに適用されないグループポリシー」の投稿を確認してください。

この例では、ユーザーのログイン時間をテキストログファイルに書き込む単純なPowerShellスクリプトを使用します。

  1. PowerShellスクリプトファイルをにコピーしますwoshub.comNETLOGON ActiveDirectoryドメインコントローラー上のフォルダー。
  2. [ユーザーの構成]->[ポリシー]->[Windowsの設定]->[スクリプト]->[ログオン]に移動します。
  3. [PowerShellスクリプト]タブに移動し、PS1スクリプトファイルを追加します(たとえば、UNCパスを使用します) woshub.comNETLOGONUserLog.ps1 );ユーザーのgpoログオンPowerShellスクリプトを実行します
  4. ターゲットコンピューターでユーザーに再ログインします。
  5. ユーザーがログインすると、PowerShellスクリプトがGPOを介して自動的に起動されます。
  6. イベントIDにより、ユーザーログオンスクリプトが正常に実行されたことを確認できます。 5018Microsoft-Windows-イベントビューアのグループポリシー/操作セクション:
    Completed Logon script for woshubjsmith in 11 seconds.

    イベントビューアでのgpoログオンスクリプト実行イベント

スクリプトが終了するまでユーザーがデスクトップにアクセスできないようにする場合は、GPOパラメーターを有効にする必要があります ログオンスクリプトを同期的に実行する ([コンピューターの構成]–>[管理用テンプレート]->[システム]->[ログオン])。 この場合、explorer.exeプロセスは、すべてのポリシーとログオンスクリプトが完了するまで開始されません(これにより、ユーザーのログオン時間が長くなります!)。

スクリプトは現在のユーザー権限で実行されることに注意してください。 ユーザーがコンピューターの管理者特権を持っていて、ユーザーアカウント制御(UAC)設定が有効になっている場合、PowerShellスクリプトは昇格された特権を必要とする変更を行うことができません。

昇格されたユーザー権限でPowerShellログオンスクリプトを実行するには、スケジューラタスクを使用できます。

  1. [ユーザーの構成]->[設定]->[コントロールパネルの設定]->[スケジュールされたタスク]で新しいタスクスケジューラジョブを作成します。
  2. 全般的 タブで、現在のユーザーに代わってタスクを開始することを指定します %LogonDomain%%LogonUser を有効にします Run with highest privileges オプション;shedulerタスクを使用して管理者としてgpoログオンスクリプトを実行する
  3. 引き金 タブで、タスクを開始するように指定します ログオン時;ユーザーのログオン時にPowerShellスクリプトを実行する
  4. でPowerShellスクリプトファイルへのパスを指定します 行動 タブ:

アクション:プログラムを開始する
プログラム/スクリプトC:WINDOWSsystem32WindowsPowerShellv1.0powershell.exe
引数の追加(オプション)-ExecutionPolicy Bypass -command "& woshub.comNetlogonYour_PS_Script.ps1"

GPOを介したWindowsスケジューラタスクの構成の詳細をご覧ください。

このようなPowerShellスクリプトは、管理者として実行されます(ドメインユーザーがローカルのAdministratorsグループに追加されている場合)。

一部のログオンスクリプトは、コンピューターへの最初のログイン時にユーザーごとに1回だけ実行する必要があります(作業環境の初期化、フォルダーまたは構成ファイルのコピー、ショートカットの作成など)。 これは、GPOを使用してスクリプトを1回だけ実行できるようにする簡単なトリックです。

The post GPOを使用したPowerShellスタートアップ(ログオン)スクリプトの実行 appeared first on Gamingsym Japan.