実現したいこと
Pythonでシャットダウンやログオフ前にファイルを実行するタスクを
タスクスケジューラーに作成したいです。
仕様
Pythonでログオフ直前にbatファイルを実行するタスクをタスクスケジューラーに設定し
batファイルは起動したらjsonファイルにログオフ時間を記録する
※将来的にはPythonをexeファイルに変換し、配布する予定です。
発生している問題・分からないこと
イベントビューワーに保存されているID=7002をトリガーとして
Pythonにて設定しましたがログオフやシャットダウンしても指定したbatファイルが動きません
該当のソースコード
import subprocess # subprocessモジュールをインポート # バッチファイルのパス batch_file_path = 'C:\\Users\\user\\Desktop\\log.bat' # タスクの名前 task_name = 'RunBatchOnDisconnect' # タスクを作成するコマンド、XPathクエリ内のシングルクオートをエスケープ command = ( f'schtasks /create /tn "{task_name}" /tr "{batch_file_path}" /sc ONEVENT ' f'/ec System /mo "*[System[Provider[@Name=\'Service Control Manager\'] and EventID=7002]]"' ) # コマンドを実行 try: subprocess.run(command, check=True, shell=True) print("タスクが正常にスケジュールされました。") except subprocess.CalledProcessError as e: print(f"エラーが発生しました: {e}")
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
検索した結果下記のように設定すればいけると思いましたがうまくいきません
補足
特になし
いきなり最終形のテストをしているように見えます。
Pythonプログラムを作るのは、まず「手作業でタスクスケジューラー画面からタスクを登録してみてうまく行った」とこを確認してからですが、そこはOKで期待通りの動作をしたというなのでしょうか?
ActiveDirectoryを使っていれば、ログオフスクリプトを登録できるはずですが、ADを使ってないということですかね。
期待通りには動作しておりません。まず手作業での設定につまずいておりました。
ActiveDirectoryというのに知見がなかった為、調べてみます。
ありがとうございます。
> まず手作業での設定につまずいておりました。
手作業の設定段階での問題であれば、Pythonは全く関係ありませんね。
ActiveDirectoryに知見がないと言うことは、現時点では使っていないということでしょうか?
AD導入からだと設計含め、大仕事になりますね。それが良いのかどうか。
「ID=7002 を拾えば良い」というのは実績があることなのでしょうか?
Qiitaでもらった回答は、どうなんですか?
https://qiita.com/bobobobo/questions/77948ae8d4bf37d3b3c3
otn様
ご回答ありがとうございます。
>ActiveDirectoryに知見がないと言うことは、現時点では使っていないということでしょうか?
→現時点では使っていないです。
「ID=7002 を拾えば良い」というのは実績があることなのでしょうか?
→実績はありません。
hiroki-o様
ご回答ありがとうございます。
また、qiitaの方も見ていただきありがとうございます。
そちらに関してはまだ検証できておりませんがhiroki-o様としては
qiitaで頂いたご意見はいかがでしょうか?
回答2件
あなたの回答
tips
プレビュー