



連載目次

対象OS：Windows Server 2003／Windows Server 2012 R2



解説

Windows Server 2003のタスクスケジューラには、タスクを他のコンピューターに移行するためのエクスポート機能が備わっていない。

それでもWindows Server 2003同士であれば、タスクの実体である.jobファイルをコピーすれば移行は可能だ。しかし、移行先がWindows Server 2008以降のタスクスケジューラだと、.jobファイルを読み込む機能はなく、この方法では移行できない。

だが、移行先の新サーバー（Windows Server 2012 R2）から旧サーバー（Windows Server 2003）にリモート接続すると、タスクのエクスポート／インポートによる移行が実現できる。本TIPSではその具体的な手順と注意点を説明する。

操作方法

本TIPSで説明する移行方法では、新サーバーのタスクスケジューラから旧サーバーへネットワーク経由で接続できる必要がある。それには両サーバー間でMicrosoft Windowsネットワークの通信が可能でなければならない。オフラインでは移行できない。

旧サーバーが新サーバーとは別のネットワーク（例えばDMZ）に接続されている場合は、一時的にVPNを設けるなどして、接続を確立していただきたい。

また本TIPSでは、Windows Server 2008以降のタスクスケジューラの基本的な機能が利用できることを前提としている。タスクスケジューラの基本的な使い方については、TIPS「タスクスケジューラの基本的な使い方（Windows 7／8／8.1編）」を参照していただきたい。

●タスクスケジューラを使って、旧サーバーのタスクをエクスポートする

まずは旧サーバーのタスクをXMLファイルにエクスポートする。それには、新サーバーでタスクスケジューラを起動して、そこから旧サーバーに接続し、タスクのエクスポートを実行する。旧サーバーを直接操作する必要はなく、新サーバーからリモートで接続できればよい。

旧サーバーのタスクをエクスポートする（その1）

まずは新サーバー（Windows Server 2012 R2）上でタスクスケジューラを起動する。タスクスケジューラは、サーバーマネージャーの［ツール］メニューか、コントロールパネルの［管理ツール］から起動できる。

（1） ［タスク スケジューラ (ローカル)］を選択して右クリックする。

（2） 表示されたメニューの［別のコンピューターへ接続］をクリックする。 ▼ 旧サーバーのタスクをエクスポートする（その2）

これはタスクスケジューラから接続するリモートコンピューターを選ぶためのダイアログ。

（3） ［別のコンピューター］を選ぶ。

（4） 旧サーバー（移行元のWindows Server 2003サーバー）のコンピューター名を指定する。

（5） サインイン中のアカウントとは別のユーザーアカウントでリモートコンピューターに接続する機能。ただしこれはWindows Server 2003へ接続する場合には利用できない。ここで認証に失敗する場合は事前に、コントロールパネルの［資格情報マネージャー］−［Windows 資格情報］−［Windows資格情報の追加］で、旧サーバーで認証できる管理者アカウントを指定しておく（古い記事だが、TIPS「異なるドメイン／ワークグループのサーバへシームレスにアクセスする方法」が参考になる）。 ▼ 旧サーバーのタスクをエクスポートする（その4）

旧サーバーとの接続が確立したタスクスケジューラ。

（7） 旧サーバーのコンピューター名がここに表示されているはずだ。

（8） ［タスク スケジューラ ライブラリ］を選ぶと、この右側のペインに旧サーバーのタスク一覧が表示される。

（9） 移行したいタスクを選んで右クリックする。

（10） ［エクスポート］をクリックするとファイル保存ダイアログが表示されるので、タスクのエクスポートファイルを保存する。形式は自動的にXMLが選択される。



以上でタスクのエクスポート作業は完了だ。

●タスクスケジューラを使って、新サーバーにタスクをインポートする

次に、新サーバーにタスクのXMLファイルをインポートする。それには、新サーバーでタスクスケジューラをあらためて起動し、前述の手順で作成した旧サーバーのタスクのXMLファイルを指定してインポートする。

新サーバーにタスクをインポートする（その1）

前述のインポート作業とは別に、新サーバーでタスクスケジューラをあらためて起動する。

（1） ここに「ローカル」と表示されること、すなわち新サーバーに接続していることを確認する。

（2） 移行するタスクの保存先フォルダーを選択する。分類を要するほどタスク数が多くなければ、［タスク スケジューラ ライブラリ］を選べばよい。

（3） （2） を右クリックして［タスクのインポート］をクリックすると、ファイルオープンダイアログが表示されるので、先ほどエクスポートしたタスクのXMLファイルを指定する。 ▼ 新サーバーにタスクをインポートする（その2）

前述のファイルオープンダイアログで［開く］ボタンをクリックすると、このタスク作成ダイアログが現れる。必要に応じて設定を変更しておく。ただし名前以外はタスク作成後でも修正できる。

（4） デフォルトでは、指定したXMLファイルのファイル名がタスクの名前になる。これはタスク作成後に修正できないので、この時点で適宜修正すること。

（5） 新サーバーのタスクスケジューラの機能をフルに活用するには、ここで最新のOSを選んでおく。

（6） 新サーバーでユーザーアカウント制御（UAC）が有効な場合、指定しているアカウントに管理者権限があっても、このチェックボックスがオフだと管理者権限でタスクが実行されない。管理者権限が必要なら、チェックを入れてオンにする。 ▼ 新サーバーにタスクをインポートする（その3）

通常のタスク作成・修正時と同様に、指定したアカウントの認証ダイアログが表示されるので、パスワードを入力する。



以上でタスクのインポート作業は完了だ。

●schtasksコマンドを使って、コマンドラインでタスクを移行する

移行すべきタスクがたくさんある場合は、Windowsに標準装備されているschtasksコマンドを利用するとよい。コマンドラインやバッチコマンドでタスクの移行作業を自動的に実行しやすいからだ。

旧サーバーのタスク一覧を確認するには、新サーバーでコマンドプロンプトを管理者権限で起動してから、次のようにschtasksコマンドを実行する（findコマンドを併用することで、タスク名のみを抽出している）。

schtasks /Query /S ＜旧サーバー名＞ /U ＜ユーザー名＞ /P ＜パスワード＞ /FO LIST | find "タスク名:"





＜ユーザー名＞と＜パスワード＞には、旧サーバーにリモート接続するためのユーザーアカウント名とそのパスワードを指定する。ドメイン環境で、新サーバーにサインインしたユーザーアカウントが旧サーバーでも通用する場合、これらの指定は省いてよい（簡略化のため、以下のコマンドラインでは省略している）。

複数のスケジュール（タスクを起動するサイクル）が登録されているタスクが存在する場合、上記のコマンドラインを実行すると、スケジュールの数だけタスク名が重複して出力されるので注意が必要だ。

さてタスク名を確認したら、次のコマンドラインでタスクの内容をXMLファイルにエクスポートする。

schtasks /Query /S ＜旧サーバー名＞ /TN "＜タスク名＞" /XML > ＜エクスポートファイル名＞





最後に、次のコマンドラインでエクスポートファイルから新サーバー上にタスクを作成する。

schtasks /Create /TN "＜タスク名＞" /XML ＜エクスポートファイル名＞ /RU ＜実行アカウント名＞ /RP "＜実行アカウントのパスワード＞"





＜実行アカウント名＞と＜実行アカウントのパスワード＞には、対象のタスクを実行するのに用いるアカウントの情報を指定する。＜実行アカウントのパスワード＞を指定しないと、コマンド実行後にパスワードの入力が求められる。

以上の作業で新サーバーにタスクが作成されたはずだ。タスクの設定を変更するには、前述のタスクスケジューラのほか、schtasks /Changeコマンドも利用できる。その詳細は「schtasks /Change /?」と実行すると表示されるヘルプを参照していただきたい。

●タスクによってはリモートから参照できず、エラーが生じることがある

新サーバーからタスクスケジューラあるいはschtasksコマンドで旧サーバーに接続した際、特定のタスクだけが参照できず、リストアップもエクスポートもエラーが発生して失敗することがある（このとき、旧サーバーでは正常にプロパティを参照できる）。

リモート接続時に特定のタスクでエラーが発生したときのタスクスケジューラの挙動

これは新サーバーのタスクスケジューラで、リモートの旧サーバーに接続した直後の画面。

（1） ［タスク スケジューラ ライブラリ］を選択する。

（2） エラーが生じるタスクの数だけ、「タスク スケジューラ サービスが利用できません。タスク スケジューラはサービスへの再接続を試行します。」というメッセージボックスが繰り返し表示される。［OK］ボタンをクリックするとタスクの一覧が表示されるものの、エラーが生じたタスクは一覧に現れず、エクスポートもできない。



schtasks /Queryコマンドで参照した場合は、「エラー: パラメーターが間違っています。」というエラーメッセージが表示される。

筆者がこのエラーに遭遇したとき、その原因は特定できなかった。こうした場合は手動でタスクを作り直すしかないだろう。すなわち、旧サーバーでプロパティを開いてパラメーターをメモし、新サーバーで新たにタスクを作成して、メモしたパラメーターを反映することになる。

タスクで起動される実行ファイルは、別途新サーバーにセットアップする必要がある（上記の作業では移行されない）。タスクを実行する前に、まずは実行ファイルを手動で直接起動して、正常に実行できるか確認しよう。

その後で、手動でタスクの起動を試してみよう。旧サーバーのように正しく実行できなかった場合は、タスクの設定や実行ファイルの設定などを見直すこと。

「Tech TIPS」