質問者
SYSTEMアカウントでMSGBOXを表示させる方法

質問
-
いつもお世話になっております。
PowerShellを使用し、SYSTEMアカウントでMSGBOXを表示させるスクリプトを作成しております。
MSGBOXの表示自体はWSHのpopupを使用し、コマンド(SYSTEMアカウント以外)からの実行で表示させることはできております。
同一のスクリプトをタスクスケジューラやPsExecを使用してSYSTEMアカウントで実行すると、
スクリプトは実行されますがMSGBOXが表示されません。
SYSTEMアカウントによるMSGBOX起動に関して制限等があるのかご教示ください。
以下、スクリプトのMSGBOXを表示させてる記述
---------------------------------------------------
(New-Object -ComObject wscript.shell).popup("ポップアップメッセージ",30,"",0) | out-null
すべての返信
-
質問する際には最初にご自分の環境ぐらいは書きましょうよ。
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." ということになるのかも。
上記は想像・思いつきレベルで、検証などを行って確認したわけではありません。ハズレでしたら失礼しました。
-
o, さま よろしく。
ご存知かとは思いますが、System はサービス系の最上位アカウントです。
MSGBOX 等のインターフェイスは基本的には難しいのではないでしょうか。
PowerShell に拘らないのであれば、
System.Windows.Forms クラスに、MessageBoxOptions 列挙体があり、
その中に ServiceNotification がありますので、これを使えば OK かと。
例によって、VB コードですが。
MessageBox.Show("message", _ "title", _ MessageBoxButtons.OK, _ MessageBoxIcon.Exclamation, _ MessageBoxDefaultButton.Button1, _ MessageBoxOptions.ServiceNotification)
サービスでも MessageBox が表示される筈です。 尚、引数は途中を省略出来ません。
- 編集済み ShiroYuki_Mot 2015年12月3日 3:29 追記
-
チャブーンです。
この件ですが、表示できないこと自体は、ほかの方から示唆いただいた通り、Session 0の分離の影響だと思います。SYSTEMアカウントで実行したプロセスはSession 0に含まれますが、他のセッション(デスクトップ)に対してアクセスできないようになっているためだと思います。
タスクマネージャの[プロセス]タブの「セッションID」(なければ[列の選択]から追加してください)で該当プロセスが「0」となっているかどうかで確認できるかと思います。
http://blogs.technet.com/b/askperf/archive/2015/02/18/help-my-scheduled-task-does-not-run.aspx
(内容としては同じ技術的な説明をしています)
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
- 編集済み チャブーンMVP 2015年12月3日 5:26