定時処理をWindowsのタスクスケジュールで管理

Windowsで定時処理を行う際に、UWSCのような自動操縦系のアプリを使って定時で処理をするのですが、どうしてもUWSCなので実行できな処理がある場合は、Windowsのタスクスケジュールでも定時に設定して実行させることができます。

なお、呼び名が「タスクスケジュール」なのか「タスクスケジューラ」なのかWindows内で表記か揺れているような。

今回は、puttyのSCPを実行するバッチを、Windows8.1 もしくはWindows10でのタスクスケジューラの設定方法をまとめてみました。

### puttyをインストールしてSCPのバッチを書く

SCPはサーバにセキュアにファイルを転送するコマンドです。SSHによる暗号化や、ユーザ認証にキー交換が使えるために、セキュアなデータ転送が行えます。

#### puttyからアプリをダウンロード

puttyは、GUIを持つWindowsアプリですがコマンドラインツールも使えます。

Download PuTTY
https://www.putty.org

#### puttyからアプリをインストール
インストーラーは無く、解凍するとフォルダーが作成され、実行できるイメージが配置されます。私は、解凍場所を自分のホームディレクトリ下にしましたが、お好みでどうぞ。
インストールしたら、パスを確認してコピーしておきます。puttyのアイコンを探してプロパティを表示して、該当箇所を右クリックでコピーしましょう。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194223/0bc75cb8-7893-00da-5a75-8d3cbf17eb05.png)

メモ帳を開いてコピーしたパスを貼り付けして、行末にputty.exeを追記して、名前をつけて保存します。
<img width="702" alt="02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194223/8270668f-9a53-80c9-0852-79f48f0c50e2.png">

#### puttyをつかったファイルのアップロードのバッチを書く
ここからはputtyのコマンドラインのSCPをつかって、Windowsのバッチを書く方法です。
1. 認証の準備
SCPのサーバへの認証方法はSSHのキー交換を使うことを前提にします。秘密キーと公開キーの作成方法は別の記事を参照してください。また、puttyの場合は、秘密キーはppk形式なので必要ならppkに変換を行います。また、公開キーは接続先のサーバに追加しておいてください。

2. 接続先サーバの情報
サーバ側のアドレスとSSHのポート情報を確認してください。SSHのポートは22ですが、管理者が変更してる場合があります。

3. 接続先サーバのアップロード場所の確認
サーバ側にアップロード用のフォルダが必要な場合は作成を、また不要な場合は指定のフォルダのフルパスを確認してください。フォルダのパーミッションは、アクセスするユーザのアカウントでの書き込みができればOKです。必要ないなら、777などとしないように注意してください。

4. アップロードファイルの準備
Windowsパソコンにアップロードするファイルを準備します。今回はホームの下にuploadフォルダを作成しました。ファイルですが、text.txt test2.txt test3.csvの3つを用意してuploadフォルダに置いておきます。

#### バッチを記載する
では、いよいよバッチの記載を始めます。解説しながら、追記をしていきますので完成形は最終行になります。

まずputtyのSCPコマンドラインの起動部分です。

```
C:\Users\[自分のホーム]\[インストール先フォルダ]\pscp.exe
```
pscp.exeはコマンドラインのEXEです。これにプライベートキーを追記します。-i がキー指定のオプションです。それに続く記述がプライベートキーへのパスになります。

```
C:\Users\[自分のホーム]\[インストール先フォルダ]\pscp.exe -i C:\Users\[自分のホーム]\[自分の秘密キー].ppk 
```

では、いよいよ転送するファイルの指定です。送信元を先に書いて、送信先を後に書きます。逆にすると大切なファイルが上書きされてしまうので気をつけてください。uploadフォルダにある全てのファイルをサーバのホーム直下に作ったuploadフォルダに転送します。\*.\*と書くとフォルダのファイルを全て送信します。csvのみ送信したいときは、*.csvとするとcsv拡張子がついたファイルのみ送信してくれます。

```
C:\Users\[自分のホーム]\[インストール先フォルダ]\pscp.exe -i C:\Users\[自分のホーム]\[自分の秘密キー].ppk C:\Users\[自分のホーム]\upload\*.* [アカウント名]@[サーバアドレス]:/home/[アカウント名]/upload/
```

以上で、バッチの記述は終わりました。出来上がったらメモ帳に名前をつけて保存します。拡張子は.batとしてください。

#### バッチを試す
デスクトップにアイコンができるので、ダブルクリックをすると実行されます。初回に実行すると、SSHの接続情報を保管するか聞かれますのでYを押すと一瞬で処理が終わって送信が完了します。2回目は、一瞬コマンド画面が表示されてデータが送信されます。

もしうまくいかないときは、バッチの内容をコピーして、「コマンド」を起動して貼り付けして実行してみてください。問題があれば、内容を表示してくれます。「コマンド」画面で処理が行えるようになるまで修正して、完成したら先ほどのbatファイルの内容を変更してください。

### バッチをタスクスケジュールで動かす
前段が長くなりましたが、バッチをタスクスケジュールに登録をしてみましょう。

#### タスクスケジュールを起動する
タスクスケジュールは、コントロールパネルの中のシステムとセキュリティの一覧にあります。
<img width="596" alt="04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194223/006ea731-58dc-1bd6-1b77-5fec6c071107.png">

タスクスケジュールの操作画面は下図のようになっています。
<img width="599" alt="05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194223/e0c20c52-9d83-3363-3058-23b21d306c09.png">

左側はタスクスケジュールのエクスプローラ、真ん中は設定されているタスクの内容、右は操作説明になります。

#### タスクスケジュールにタスクを追加する
1. タスクの追加を開始
基本タスクの作成を選びます。
<img width="309" alt="4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194223/e57c30c1-ae4d-6951-3237-ba4ac516ac2e.png">

2. タスクに名前をつける
「名前」の箇所にタスクスケジュールのエクスプローラに表示される名称を入力します。バッチ名称と同じにしておくとよいです。
<img width="595" alt="5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194223/4e9cf2e3-c773-ccf8-7e5c-f73011881372.png">

3. タスクの実行間隔をざっくり選択
トリガー画面が表示されますので、タスクの実行間隔をざっくり選びます。今回は毎日実行するので「毎日」を選びました。
<img width="594" alt="6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194223/7d9ea3df-2179-d174-90a9-d95ac77363f7.png">

4. 実行間隔の詳細を設定
ざっくり選んで次へ押すと、詳細な実行時刻を選択できます。おそらく前の選択内容で、この詳細設定内容が異なると思いますので、実行間隔にしたがって希望の設定を入れてください。
<img width="598" alt="7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194223/63f08249-8aea-73cf-ac77-2f8e919bb2e3.png">

5. 実行するタスクの種類を選択
操作を設定も、ざっくり種類を選んでから、詳細画面で設定します。今回はバッチですので「プログラムの開始」を選択します。
<img width="530" alt="8.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194223/45de4e62-595e-aad7-e75b-a75b95723c68.png">

6. バッチの選択
やっとバッチを選択する画面にたどり着きました。参照を開いて作成したバッチを選択してください。バッチの起動の際に引値も渡せるようになっていますが今回は使用しません。
<img width="596" alt="9.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194223/fa9f58c4-2891-3067-1120-ee0bff7a6bb8.png">

7. 確認画面
設定内容に問題がなければ完了を押してください。
<img width="590" alt="10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194223/fcd9da73-b6a8-2a10-b48e-3df5ee307605.png">

以上で、タスクスケジューラにバッチを定時に実行するように設定ができました。

#### 設定されたタスクを確認する
左側のタスクスケジュールのエクスプローラの「タスクスケジューラライブラリ」を選択すると、中央に設定ずみのタスクが一覧で表示されます。その中に、先ほど設定したスケジュールの名称が表示されます。サンプルでは、5時20分、6時、7時20分に同じバッチが実行されるように設定されているのがわかります。
<img width="591" alt="11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194223/7b3775e0-dbd7-b180-3a43-61cc54d95459.png">
リストからタスクを選択すると、トリガーや実行条件を編集することができます。

実行条件は、追加時の設定内容以外にも詳細な設定が可能です。一度項目を確認しておくと良いです。

あとは、明日実行されたかどうかを確認するだけです。

以上になります。