Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?

タスクスケジューラーの設定

概要

Windowsのタスクスケジューラーでプログラムを定期的に実行するノウハウを共有する。

想定ケース

プログラム(program.exe)を毎日特定の時間に起動する。 実行ログをファイル(YYYYMMDD_hhmmss.log)に残す。

タスクスケジューラーの設定

タスクスケジューラーの履歴を有効化する

  1. [Win]+[R]を押して「ファイル名を指定して実行」を開き、「eventvwr」を実行する。
  2. イベントビューアーで[アプリケーションとサービスログ]>[Microsoft]>[Windows]を展開、[TaskScheduler]を選択する。
  3. [Operational]のプロパティを開き、「ログを有効にする」のチェックを入れる。
  4. [適用]、[OK]を押して設定を保存したらOSを再起動する。

PowerShellスクリプトの実行権限を設定する

  1. 管理者権限でPowerShellを開き、「PowerShell Set-ExecutionPolicy RemoteSigned」を実行する。(1度のみ)

タスクスケジューラーでタスクを作成する

  1. [Win]+[R]を押して「ファイル名を指定して実行」を開き、「control schedtasks」を実行する。
  2. タスクスケジューラーの[操作]から「タスクの作成」を押す。
  3. タスクの設定をしていく。
  4. [全般]で以下の設定をする。
    * 名前 : 任意のタスクの名前(e.g. WakeUpProgram)
    * セキュリティオプション
    • タスク実行時に使うユーザーアカウント : ユーザーアカウントを選択
    • 最上位の特権で実行する:チェックを入れる
      * 構成 : Widnows 10
  5. [トリガー]で以下の設定をする。
    [新規]を押してトリガーを設定する。
    トリガーは「毎日」、開始日時「YYYY/MM/DD」「hh:mm:ss」を設定する。
    1日のうち指定した間隔で繰り返し開始するときは[繰り返し間隔]にチェックを入れて設定する。
    1日のうち複数の特定の時間に開始するときは複数のトリガーを作成する。
  6. [操作]で以下の設定をする。
    操作は「プログラムの開始」を選択する。
    プログラムをPowerShellで起動するように設定する。
    * プログラム/スクリプト : %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe
    * 引数の追加 : -Command "<path-to-script>/script.ps1"
    * 開始オプション : PowerShellのカレントディレクトリを設定する。パスは""で囲まない。(e.g. C:\)
  7. [条件]で以下の設定をする。
    * [タスクを実行するためにスリープを解除する]にチェックを入れる。

タスクスケジューラー以外の設定

自動ログオン

  1. [Win]+[R]を押して「ファイル名を指定して実行」を開き、「netplwiz」を実行する。
  2. 「ユーザーがこのコンピューターを使うには、ユーザー名とパスワードの入力が必要」のチェックを外す。

スリープ解除時のパスワード入力省略

  1. 「設定」を開き、[アカウント]>[サインインオプション]を開く。
  2. [インインを求める]で「なし」を選択する。

高速スタートアップの無効化

  1. コントロールパネルを開き、[電源オプション]>[電源ボタンの動作を選択する]を開く。
  2. 「現在利用可能ではない設定を変更します」を押す。
  3. 「高速スタートアップを有効にする」のチェックを外す。

PowerShellスクリプト

プログラムを実行、標準出力をログファイル(YYYYMMDD_hhmmss.log)に残す。

ログファイルのファイル名は現在の日時から取得している。 パイプで繋ぐことで標準出力をログファイルに書き出す。

$now = Get-Date -format "yyyyMMdd_HHmmss"
cd "<path-to-program>"
./program.exe | Tee-Object -FilePath ($now + ".log")

シャットダウン、またはスリープにする。

スリープにはPSToolsのpsshutdown.exeを利用する。 引数によってシャットダウンとスリープを選択できる。 ここでは60秒後に実行するように設定している。

Param(
  [Int]$arg = 0
)

# If arg is 0, Sleep. Otherwise, Shutdown.
if($arg -ne 0){
  shutdown /s /f /t 60
}
else{
  cd "<path-to-pstools>/PSTools"
  ./psshutdown.exe /d /t 60 /accepteula
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.