2015/01/01

PowerShell タスク スケジューラのタスクをリモートから実行する方法

新年おめでとうございます。
本年も「元「なんでもエンジニ屋」のダメ日記」を何卒宜しくお願い致します。

さて、新年一つ目の記事です。
Windows Server のタスク スケジューラに登録しているタスクをリモートから実行したい事がたまにありませんか?
都度リモート デスクトップ接続し手動でタスクを実行・・・面倒です。
今回は、PowerShellを使ってタスク スケジューラのタスクをリモートから実行する方法をメモ。
2014.01.01 各サンプルに「セッションを破棄」を追記しました

前提条件

  1. ローカル及びリモートでEnable-PSRemoting コマンドレットを実行済みである事
    1. WinRMサービスが起動している
    2. Firewallのルールを追加している
  2. リモートからの要求を許可するリスナ設定済みである事

タスク スケジューラのタスクをリモートから実行する

調査した限り、リモート環境によって実行するPowerShell コマンドレットが異なりました
Windows 7/Windows Server 2008 R2以下の場合
XXX-ScheduledTask コマンドレットはWindows8/Windows Server 2012以上+Windows PowerShell 4.0の環境でしか使えません。
※Windows 7 SP1にWMF4.0をインストールしましたが該当するコマンドレットはありませんでした。
この環境では、PSセッションを新規作成し、Invoke-Command コマンドレットを使ってタスクを実行します。
リモートのタスクを実行するには、schtasks.exe を使います。
#セッションを新規作成
$s = New-PSSession -ComputerName <サーバー名> -Credential <ドメイン名\ユーザー名>
#実行したいタスク名を確認
Invoke-Command -Session $s -ScriptBlock{schtasks.exe /query}
#タスク実行
Invoke-Command -Session $s -ScriptBlock{schtasks.exe /run /tn "<タスク名>"} -AsJob
#タスクの実行状態を確認
Get-Job -Id X
#ジョブを削除
Remove-Job -Id X
#セッションを破棄
Remove-PSSession -Session $s
Windows 8/Windows Server 2012以上の場合~PSSessionを使う
PSセッションを新規作成し、Invoke-Command コマンドレットを使ってタスクを実行します。
#セッションを新規作成
$s = New-PSSession -ComputerName <サーバー名> -Credential <ドメイン名\ユーザー名>
#タスク名を確認
Invoke-Command -Session $s -ScriptBlock{Get-ScheduledTask}
#タスク実行
Invoke-Command -Session $s -ScriptBlock{Get-ScheduledTask -TaskName "<タスク名>" | Start-ScheduledTask} -AsJob
#タスクの実行状態を確認
Get-Job -Id X
#ジョブを削除
Remove-Job -Id X
#セッションを破棄
Remove-PSSession -Session $s
Windows 8/Windows Server 2012以上の場合~CIMSessionを使う
CIMセッションを新規作成し、Start-ScheduledTask コマンドレットを使ってタスクを実行します。
#セッションを新規作成
$c = New-CimSession -ComputerName <サーバー名> -Credential <ドメイン名\ユーザー名>
#タスク名を確認
Get-ScheduledTask -CimSession $c
#タスク実行
Get-ScheduledTask -CimSession $c -TaskName "<タスク名>" | Start-ScheduledTask -AsJob
#タスクの実行状態を確認
Get-Job -Id X
#ジョブを削除
Remove-Job -Id X
#セッションを破棄
Remove-CimSession -CimSession $c
余談:まだまだ知らない事ばかり・・・
Technet ライブラリ「サーバー マネージャーでのリモート管理の構成」を読んで初めて知った事がいくつかあったので、こちらもメモしておきます。
まだまだ知らない事ばかりですね。。。
  1. ビルトイン Administrator アカウント以外のローカル Administrator グループのアカウントでサーバーをリモートで管理できるようにするには、リモート ユーザー アカウント制御 (UAC) の LocalAccountTokenFilterPolicy レジストリ設定を構成する必要がある
  2. Windows Server 2012 のサーバー マネージャーは、リモート接続に WinRM と分散コンポーネント オブジェクト モデル (DCOM) を使用する。
    Windows Server 2008 および Windows Server 2008 R2 を実行しても、Windows Management Framework 3.0 の更新プログラムが適用されていないサーバーとの通信には DCOM を使用する
参考にしたサイト
スポンサーリンク

スポンサーリンク