none
SYSTEMアカウントでMSGBOXを表示させる方法 RRS feed

  • 質問

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

    PowerShellを使用し、SYSTEMアカウントでMSGBOXを表示させるスクリプトを作成しております。

    MSGBOXの表示自体はWSHのpopupを使用し、コマンド(SYSTEMアカウント以外)からの実行で表示させることはできております。

    同一のスクリプトをタスクスケジューラやPsExecを使用してSYSTEMアカウントで実行すると、

    スクリプトは実行されますがMSGBOXが表示されません。

    SYSTEMアカウントによるMSGBOX起動に関して制限等があるのかご教示ください。

    以下、スクリプトのMSGBOXを表示させてる記述

    ---------------------------------------------------

    (New-Object -ComObject wscript.shell).popup("ポップアップメッセージ",30,"",0) | out-null

    2015年12月3日 2:47

すべての返信

  • 質問する際には最初にご自分の環境ぐらいは書きましょうよ。

    Vista, Windows Server 2008 以降ですと、セキュリティ対策として導入された Session 0 分離の影響があるのかもしれません。

    Session 0 とは何かについての詳細は以下のページからダウンロードできる Word 文書を見てください。

    Impact of Session 0 Isolation on Services and Drivers in Windows
    https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn653293(v=vs.85).aspx

    つまり、SYSTEM アカウントで起動されるものはサービスとして Session 0 で動くので、MSGBOX を表示しようとすると "any attempt that a service makes to render graphics fails." ということになるのかも。

    上記は想像・思いつきレベルで、検証などを行って確認したわけではありません。ハズレでしたら失礼しました。

    2015年12月3日 3:17
  • o, さま よろしく。

    ご存知かとは思いますが、System はサービス系の最上位アカウントです。
    MSGBOX 等のインターフェイスは基本的には難しいのではないでしょうか。

    PowerShell に拘らないのであれば、
    System.Windows.Forms クラスに、MessageBoxOptions 列挙体があり、
    その中に ServiceNotification がありますので、これを使えば OK かと。

    例によって、VB コードですが。

    MessageBox.Show("message", _
                                   "title", _
                                   MessageBoxButtons.OK, _
                                   MessageBoxIcon.Exclamation, _
                                   MessageBoxDefaultButton.Button1, _
                                   MessageBoxOptions.ServiceNotification)

    サービスでも MessageBox が表示される筈です。  尚、引数は途中を省略出来ません。


    2015年12月3日 3:25
  • チャブーンです。

    この件ですが、表示できないこと自体は、ほかの方から示唆いただいた通り、Session 0の分離の影響だと思います。SYSTEMアカウントで実行したプロセスはSession 0に含まれますが、他のセッション(デスクトップ)に対してアクセスできないようになっているためだと思います。

    http://blogs.technet.com/b/askperf/archive/2007/04/27/application-compatibility-session-0-isolation.aspx

    タスクマネージャの[プロセス]タブの「セッションID」(なければ[列の選択]から追加してください)で該当プロセスが「0」となっているかどうかで確認できるかと思います。

    http://blogs.technet.com/b/askperf/archive/2015/02/18/help-my-scheduled-task-does-not-run.aspx
    (内容としては同じ技術的な説明をしています)


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




    2015年12月3日 3:31
  • SurferOnWww様

    返信ありがとうございます。

    環境の記載を失念しておりました。申し訳ございません。

    既に本件に関する見解をいただいておりますが、念のため、環境を以下に記載します。

    【実行環境】

    Windows8.1(評価版) 64bit

    Powershell ver 4.0

    2015年12月3日 4:11