1

私のコンピュータ上のタスクは、私のサーバから日々のバックアップをダウンロードしています。基本的にはです:Windows 10タスクスケジューラ:cmdを表示せずにbashスクリプトを実行

bash.exe -c "cd /mnt/d/server_backups && ./download_backup.sh" 

これは仕事が、しかし、それは常にそれがなかった場合、私は(ゲームをやっているものは何でも、それが中断するので、実際に映画を見て、私を気にしないことになる、CMDウィンドウをポップアップしません、働く)、デスクトップに私を投げるだけです。

明らかに、Windowsセッションゼロ(何でも)がbashで呼び出しを開始できないため、「ユーザーがログに記録されているかどうかを実行する」というタスクを変更することはできません。

cmdウィンドウを表示しないようにするか、それとも私がそれを主に集中させたい、それ以外はすべて最小限にしたいのかを決めることなしに行う別の方法はありますか?

+1

これはCMDウィンドウではなく、コンソールウィンドウです。他のコンソールアプリケーションと同様に、bash.exeは、プロセスが分離された、すなわち 'DETACHED_PROCESS'を実行するようにフラグが付けられていない場合、新しいコンソールを割り当てます。しかし、これをテストしたところ、プロセスコンソールハンドルが設定されていない場合、つまりプロセスをコンソールにアタッチする必要がある場合、WSLが初期化に失敗するようです。あなたのオプションは、ウィンドウを持たないコンソール(つまり 'CREATE_NO_WINDOW')を作成するか、' STARTUPINFO'の 'wShowWindow'フィールドを使って隠しウィンドウを作成することです。 – eryksun

+0

どちらの場合でも、タスクスケジューラはそのレベルの制御を提供しないため、bash.exeプロセスの作成方法を制御できるPythonやPowerShellなどのスクリプト言語が必要です。 – eryksun

+0

Windows Subsystem for Linuxの代わりにCygwinを使用すると想像できますか? – Binarus

答えて

2

あなたは次のように、cmd.exeのウィンドウなしのbashを起動するVBSスクリプトを使用することができます。

hidden_​​launcher.vbsここ

Set WinScriptHost = CreateObject("WScript.Shell") 
WinScriptHost.Run WScript.Arguments(0), 0 
Set WinScriptHost = Nothing 

、我々は第一引数は受信実行、および0 「start the program hidden」を意味します。

今すぐタスクスケジューラでタスクを設定します。

  • プログラムを起動するには:C:\Path\to\hidden_launcher.vbs
  • 引数:これはトリックを行う必要があります"bash.exe -c 'cd /mnt/d/server_backups && ./download_backup.sh' "

を!

+0

良い見えますが、それは私のために働いていません。それをタスクスケジューラや.batファイル(テスト用)に置くことは、明らかに何もせず、.vbsを実行し、2行目、1文字目に "Subindex out of range"というエラーを出します。私が何か悪いことをしているかどうかは分かりません。 – p4x

+1

タスクスケジューラ**の引数フィールドにbash.exe -c 'cd/mnt/d/server_backups && ./download_backup.sh' "'をこの正確な引用符で置きましたか?**二重引用符/一重引用符はそれらがどのように書かれているかを正確に示す)。引数を指定せずにスクリプトを実行しようとすると、エラーがスローされ、1番目のarg(つまり、 "out of range"メッセージ)が検索されます。スクリプトがうまく動作しているかどうかを確認するには、 '' bash.exe -c 'を実行してみてください。/ home/YOUR_USERNAME' "'それをあなたのlinuxルートフォルダに作成します – Aserre

+0

はいこの正確な見積もりの​​議論、私はあなたの答えから直接実際にコピーしました。 – p4x

関連する問題