Windows 7タスクスケジューラの非表示設定が機能しない


37

マシン上で1時間ごとに実行するデーモンプロセスがあり、チェックHiddenボックスをオンにしても機能しません。タスクのプロパティ

1時間ごとにタスクが実行されますが、.NETコンソールアプリが実行されている黒いコマンドウィンドウが表示されます。これは、タスクが完了するまで表示され続け、その後消えます。これは非常に迷惑です。ポップアップが表示され、実行中の操作が中断されるためです。

ここに画像の説明を入力してください

私は本当にそれを隠したいのですが、どうすればこれを修正できますか?



2
リンクされた質問には、非表示の 設定は記載されていません。
bwDraco

@DragonLordあなたは正しいですが、この質問が「なぜ非表示にならないのか」、それとも実際に「このボックスの表示を止めるにはどうすればよいのか」ということを判断するのは難しいです。
Ƭᴇcʜιᴇ007

@ techie007:質問、ウィンドウを非表示にする方法です。これは、非表示のチェックボックスでできると思います。しかし、そのリンクされた記事は、私の投稿で示したタスクスケジューラGUIではなく、スクリプトとコマンドラインタスクスケジューラとシェルスクリプトを扱っています。GUIを使用してこれを実現する方法を知っていますか?
ジョシュアフランク

ほとんどの場合、タスクスケジューラGUIだけからはできません。通常、タスクのアクション(つまり、バッチファイルまたはスクリプト)によって実行されている内容を変更して、ポップアップしているサブウィンドウを非表示にする必要があります。それが他の質問がカバーしていることであり、だからこそ私はそれを可能性のあるpeとしてフラグを立てた。:)
Ƭᴇcʜιᴇ007

回答:


45

[ユーザーがログオンしているかどうかに関係なく実行する]チェックボックスをオンにすると、実行可能ファイルがバックグラウンドで実行されます。


4
それと同じくらい簡単です。この答えは受け入れられるべきです。
ロルブ

ありがとうございました。反対の問題がありました。私が欲しかったディスプレイにコンソールを、そうではありませんでした!
ランディステグバウアー14

12
これには、タスクと共にパスワードを保存する必要があり、次回パスワードが変更されたときに隠されます(通常、エンタープライズ環境のドメインポリシーによって強制されます)。
フィリップムニン

@PhilippMunin特定のユースケースでは、「パスワードを保存しない」のチェックボックスにチェックを入れることで逃げることができます。タスクはローカルコンピューターリソースにのみアクセスできます。 '、これはパスワードの入力を不要にします。
ヒマダイン

20

Windows 7のスケジュールされたタスクが非表示で実行されているのはなぜですか?これが起こる理由を説明する必要があります。

また、このTechNetの説明一般的なタスクのプロパティの状態:

タスクの一般的なプロパティは、[タスクのプロパティ]または[タスクの作成]ダイアログボックスの[全般]タブに表示されます。タスクの一般的なプロパティには、タスク名、作成者、説明、セキュリティオプション、タスクが構成されているオペレーティングシステム、およびタスクを非表示にするかどうかを制御するプロパティが含まれます。

タスクフォルダーにタスクを作成するときは、タスクに名前を付ける必要があります。同じタスクフォルダにある場合、2つのタスクに同じ名前を付けることはできません。タスクの説明はオプションです。

タスクセキュリティオプションは、タスクを実行するセキュリティコンテキストを指定します。詳細については、「タスクセキュリティコンテキスト」を参照してください。

既定では、非表示のタスクはタスクスケジューラのユーザーインターフェイスに表示されません。[表示]メニューで[非表示のタスクを表示]を選択すると、非表示のタスクを表示できます。[タスクのプロパティ]または[タスクの作成]ダイアログボックスの[全般]タブで[非表示]チェックボックスをクリックすると、タスクが非表示になります。

これは、チェックボックスがスケジュールされている実際のプログラムではなく、スケジューラーのUIからタスク自体を隠すだけであることを意味していませんか?


それはそのように聞こえますが、それもしません。スケジューラでタスクを確認できます。見えないオブジェクトを操作する奇妙なUIです。
ジョシュアフランク

2
[表示]メニューで[ 非表示のタスク表示]をオンにしましたか?
カラン

1
ああ、私がやったので、それはそれを説明しています。ありがとう。もちろん、「Hidden」は思ったとおりに動作しないため、非表示のタスクは必要ありません。これは管理者専用のツールであり、管理者は一般的に物を隠したくないので、隠されたタスクはどのような目的に役立ちますか?
ジョシュアフランク

2
確か、このオプションを使用したことはありません。あなたの質問は、それが何をしたかを見るために初めて調べたものです。:)ところで、ユーザーをSYSTEMに変更する代わりに、「ユーザーがログオンしているかどうかに関係なく実行する」を選択すると問題は解決しますか?
カラン

18

さて、さらに調査を重ねた結果、StackOverflowでこの答えが見つかりました。

スケジュールされたタスクをバックグラウンドで実行するようにセットアップするには、タスクを実行しているユーザーをSYSTEMに変更すると、画面に何も表示されません。

コメントは、これがタスクに完全な権利を付与することを指摘しています。これは迷惑かもしれませんが、この場合は受け入れられます。

それでも、Hiddenこれを行わない場合はどうなりますか?また、プログラムを実行しているユーザーアカウントが、表示されているかどうかに関係があるのはなぜですか?


上記の私の返信を読んで、それが何をするのか説明するかもしれません。
カラン

2
このSUの答えは、出力が表示されないようにするため、別のユーザーとして実行するという考えに触れています。「システム」として実行する特別な理由はないと思いますが、そのタスクを実行するためのユーザーを、許可するように選択した権限で作成することができます。
Ƭᴇcʜιᴇ007

しかし、なぜ設定されたユーザーがウィンドウの可視性に影響するのでしょうか?
ジョシュアフランク

1
SYSTEMアカウントは他のユーザーのEFS暗号化ファイルにアクセスできないことに注意してください。
Zero3

11

究極のソリューション

  • タスクを実行しているユーザーをSYSTEMに変更すると、ユーザーの下ではなくコマンドが実行されます
  • 「ユーザーがログオンしているかどうかに関係なく実行する」のチェック-タスクでパスワードを保存する必要があり、次回のパスワード変更(通常、エンタープライズ環境のドメインポリシーによって強制されるもの)を隠します

それらがあなたにとっての取引ブレーカーである場合、究極の解決策は、以下のようなJSスクリプトファイルを作成することです。

WScript.CreateObject("WScript.Shell")
.Run('powershell -File C:\\Path\\To\\MyScript.ps1', 0,true);

これをjsファイル(myjob.js)として保存し、タスクスケジューラに追加します: ここに画像の説明を入力してください Enjoy


また、CscriptではなくWscript.exeを使用してスクリプトを実行する必要があります。そうしないと、黒いコンソールウィンドウがしばらく表示される場合があります。
BBK

私のために働いているVBScriptの別の例を次に示します。faqforge.com
BBK

2

「ユーザーがログオンしているかどうかに関係なく実行する」を選択すると、非表示のオプションが機能します。これを選択した後、資格情報を提供する必要があることに注意してください。


1

両方 :

  • タスクを実行しているユーザーをSYSTEMに変更する」
  • 「ユーザーがログオンしているかどうかに関係なく実行する」のチェック

は黒いコマンドウィンドウを防止しますが、欠点に注意してください。Windowsがヘッドレススタイルの環境でタスクを起動するため、PowerShellの 'AutoIt'やSendKeysなどのGUIオートメーションツールで作業ができなくなります。


1

デフォルト設定のままにして、ウィンドウを表示せずに実行を生成する短いカスタムプログラムを作成します。たとえば、コマンドプロンプトウィンドウを表示せずにバッチファイルを実行するには、次のコードを使用します。「RunBatchFile.exe(path_to_batch_file)」を生成するようにタスクを設定します。

class Program
{
    static void Main(string[] args)
    {
        try
        {
            if (args.Length < 1)
            {
                Console.WriteLine("No batch file");
                Console.WriteLine("Usage: RunBatchFile (path)");
                Environment.Exit(1);
            }

            if (!File.Exists(args[0]))
            {
                Console.WriteLine("Batch file {0} not found", args[0]);
                Console.WriteLine("Usage: RunBatchFile (path)");
                Environment.Exit(1);
            }

            // Set to batch file's folder
            string startIn = Path.GetDirectoryName(args[0]);
            if (!string.IsNullOrEmpty(startIn) && Directory.Exists(startIn))
                Directory.SetCurrentDirectory(startIn);

            // Start
            ProcessStartInfo pi = new ProcessStartInfo()
            {
                FileName = args[0],
                UseShellExecute = true,
                WindowStyle = ProcessWindowStyle.Hidden
            };
            Process.Start(pi);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception: " + ex.ToString());
        }
    }
}

1
そして、私が作る魔法は具体的に隠されているとProcessWindowStyle.Hidden思います、具体的には正しい部分によるものですか?私はここでそれについて何かを参照してください。msdn.microsoft.com/en-us/library/...
ポンジュースIT

はい、それはウィンドウを隠すものです。これがないと、ウィンドウがポップアップします。
アレスアバター

1
記述されたこのコードは、ShellExecuteで実行されるすべてのもので動作します。
AresAvatar

0

PowerShellのスケジュールされたタスク(GPOを使用して展開していた)でこの問題が発生していました。私はコマンドウィンドウでそれをラップすることになりました:

CMD
/Q /D /C "powershell.exe -Command "& '\\MYDOMAIN\netlogon\MyPowerShellScript.ps1'""

これは質問に答える可能性がありますが、なぜそうするのかの説明を提供できれば、より良い答えになるでしょう。
DavidPostill
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.