none
ActiveDirectoryのグループポリシーにて、ログイン抑止しつつ、プログラムのインストールを行うには RRS feed

  • 質問

  • いつもお世話になっております。

    以下の件につきまして質問をさせていただきます。

    環境

    ドメインサーバ:Windows Server 2012 R2

    クライアント:Windows8.1 Update1

    インストール(GACに登録したりmsiを使用したサイレントインストール)を実行するバッチを自作し、グループポリシーにて配信することで、各端末の起動時(スタートアップが望ましいです)に特定のドメインユーザによってバッチが起動し、完了するまでログオンを抑止することを目的としております。

    Web資料や文献を参考に以下を試してみたのですが、希望通りの動作を行えませんでした。

    1.タスクスケジューラを用いて起動。

     →ログオン時またはスタートアップ時にタスクを起動させることはできたのですが、インストール最中にログオンができてしまい、希望通りの動作を行えませんでした。

    2.スタートアップスクリプトを用いて起動。

     →こちらも同様にスタートアップ時に起動させることができましたが、ログオンができてしまう状態です。

    3.ログオンスクリプトを用いて起動。

     →この場合、コンピュータのポリシーで「ログオンスクリプトを同期的に実行する」を有効にすることで、ログオンは抑止できたのですが、ログオンスクリプトのため、バッチを起動させるユーザを指定することができませんでした。

    上記を試してみたのですが、スタートアップ時にインストールを完了させるという希望の動作を行うことができませんでした。

    何かよい解決方法がございましたらご教示いただきたく思います。よろしくお願いいたします。


    • 編集済み umiumio 2015年10月29日 9:26
    2015年10月29日 9:23

回答

  • チャブーンです。

    #内容をわかりやすく書き換えてみました

    私の回答の骨子ですが、強制ログオフは「ログオンスクリプト」で行い、アプリケーションインストールは「スタートアップスクリプト」で行うというものです。

    アプリケーションのインストールは、スタートアップスクリプトで行う方法が一般に適切です。スタートアップスクリプトはシステム権限で動作し、インストールを行う権限をもっていますので、インストール作業自体は正常に完了します。また、ログオンスクリプトとは無関係に実行されます。

    一方ログオンスクリプトは該当ユーザ権限で実行されますので、インストールの可否はそのユーザの権限に左右されます。ログオンスクリプトの実行中に(スタートアップスクリプトにより任意に行われている)「イベントログによる『インストール済みマーク』が存在するかどうか」を確認することでログオン時点の状況がわかりますので、これを見てログオフを行わせる、というものになります。

     また、残念ですが、スタートアップスクリプトはもともと同期的に実行されるものなので(グループポリシーでは非同期にできるそうです)この方法はおっしゃる要件には使えないようです。この点は申し訳ありません。


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。



    2015年10月30日 9:04
    モデレータ

すべての返信

  • チャブーンです。

    この件ですが、コンピュータ自身が「インストール中アプリケーションの有無を判定し、ユーザログオンを制限する」ということは不可能です。ユーザログオンを制御するのはwinlongon.exeですが、このアプリケーションをカスタム的に制御する仕組みを標準では持っていないからです。(winlogon.exeの中身である「GINA」は差し替えできますので、その中で制御する仕組みは作れるかもしれませんが、プログラミングが必要です)

    どうしてもこのようなふるまいをさせたい場合、「ユーザログオン時に条件判定し、条件を満たさない場合は強制ログオフする」というログオンスクリプトを作ることになるでしょう。条件としては、以下のものがあるのではないでしょうか?

    1. [プログラム]の画面で表示されるプログラムに該当するものが存在するか(Get-WMIObject Win32_Product で呼び出せます)
    2. プログラムのインストール(のスクリプト)で、インストール完了後にイベントログで記録させる仕組みを用意しておき、そのイベントログが存在するかどうかで判定

    [プログラム]の画面で表示されるのが「プログラムがインストール完了した状況」なのかどうかを確認し、もしそうであれば1の方法が簡単ですし、そうでなかった場合は「インストール完了を記録したイベントログ」を確認するようにすれば、確実だと思います。


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。



    2015年10月30日 2:11
    モデレータ
  • チャブーンさん。ご回答いただきまして、ありがとうございます。

    ログオンスクリプトで設定し、未インストール状態を検出した時点で強制ログオフさせるということは思いつきませんでした。当環境においては、提示していただきました「2」の方法が有効であると思いますので、参考にさせていただきたいと思います。

    確認方法がわからなく、申し訳ありませんが、重ねて質問をさせていただきたいと思います。

    ログオンスクリプトによって起動されたバッチは、強制ログオフをおこなった状態でも、継続して動作し続けることができるのでしょうか。

    よろしくお願いいたします。

    2015年10月30日 8:50
  • チャブーンです。

    #内容をわかりやすく書き換えてみました

    私の回答の骨子ですが、強制ログオフは「ログオンスクリプト」で行い、アプリケーションインストールは「スタートアップスクリプト」で行うというものです。

    アプリケーションのインストールは、スタートアップスクリプトで行う方法が一般に適切です。スタートアップスクリプトはシステム権限で動作し、インストールを行う権限をもっていますので、インストール作業自体は正常に完了します。また、ログオンスクリプトとは無関係に実行されます。

    一方ログオンスクリプトは該当ユーザ権限で実行されますので、インストールの可否はそのユーザの権限に左右されます。ログオンスクリプトの実行中に(スタートアップスクリプトにより任意に行われている)「イベントログによる『インストール済みマーク』が存在するかどうか」を確認することでログオン時点の状況がわかりますので、これを見てログオフを行わせる、というものになります。

     また、残念ですが、スタートアップスクリプトはもともと同期的に実行されるものなので(グループポリシーでは非同期にできるそうです)この方法はおっしゃる要件には使えないようです。この点は申し訳ありません。


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。



    2015年10月30日 9:04
    モデレータ