別ドメインのリモートサーバにタスクスケジュールを設定する

1. 環境

  • WindowsServer2012R2
  • Powershell4.0(詳細は以下の通り)
PS >  $PSVersionTable

Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.34014
BuildVersion                   6.3.9600.17090
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

2. 背景

  • ドメインに所属する複数のリモートサーバに対して、CLIから一括してタスクスケジュールを設定したい。
  • "schtasks"*1を使おうかと思ったが、WindowsServer2012から"Register-ScheduledTask"*2コマンドレットが追加されたため、そちらを試してみる。

3. 設定方法

ドメインへのリモートサーバへのタスクスケジュール設定順序&方法は以下の通り。

(1) リモートセッション作成

"New-PSSession"*3を用いて、リモートサーバへのセッションを作成する。

以降の設定では、ここで作成したセッションを"Invoke-Command"*4の引数に指定してリモートサーバ上で各種処理を行う。


(2) タスクトリガー作成

Register-ScheduledTaskで新規タスクを作成する前に、まず当該タスクの実行間隔やタイミングを「タスクトリガー」として指定する必要がある。タスクトリガーの作成には"New-ScheduledTaskTrigger"*5コマンドレットを用いる。

例えば、タスクを指定日時に一回のみ実行する場合は以下のようにタスクトリガーを作成する。

Invoke-Commandの"-Scriptblock"オプションでは、リモートサーバ上での処理内容を記載する。上記では、"$trigger"変数をリモートサーバ上で作成し、以降の処理で利用可能としている。

また、ローカルサーバ上で作成した変数はリモートサーバ上では直接使用できないため、"-ArgumentList"オプションでリモートサーバへ渡す必要がある。複数の変数を渡したい場合は、カンマ区切りで複数変数を記載すれば良い。


(3) タスクアクション作成

次に、タスクで実行する処理内容を「タスクアクション」として指定する。タスクアクションの作成には"New-ScheduledTaskAction"*6コマンドレットを用いる。


(4) タスク設定

事前に作成したトリガーとアクションを用いて、Register-ScheduledTaskにて新規タスクを作成する。


(5) リモートセッション破棄

最後に、"Remove-PSSession"*7コマンドレットにて、作成したリモートセッションを破棄する。