本年も「元「なんでもエンジニ屋」のダメ日記」を何卒宜しくお願い致します。
さて、新年一つ目の記事です。
Windows Server のタスク スケジューラに登録しているタスクをリモートから実行したい事がたまにありませんか?
都度リモート デスクトップ接続し手動でタスクを実行・・・面倒です。
今回は、PowerShellを使ってタスク スケジューラのタスクをリモートから実行する方法をメモ。
2014.01.01 各サンプルに「セッションを破棄」を追記しました
前提条件
- ローカル及びリモートでEnable-PSRemoting コマンドレットを実行済みである事
- WinRMサービスが起動している
- Firewallのルールを追加している
- リモートからの要求を許可するリスナ設定済みである事
タスク スケジューラのタスクをリモートから実行する
調査した限り、リモート環境によって実行する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 ライブラリ「サーバー マネージャーでのリモート管理の構成」を読んで初めて知った事がいくつかあったので、こちらもメモしておきます。まだまだ知らない事ばかりですね。。。
- ビルトイン Administrator アカウント以外のローカル Administrator グループのアカウントでサーバーをリモートで管理できるようにするには、リモート ユーザー アカウント制御 (UAC) の LocalAccountTokenFilterPolicy レジストリ設定を構成する必要がある
- Windows Server 2012 のサーバー マネージャーは、リモート接続に WinRM と分散コンポーネント オブジェクト モデル (DCOM) を使用する。
Windows Server 2008 および Windows Server 2008 R2 を実行しても、Windows Management Framework 3.0 の更新プログラムが適用されていないサーバーとの通信には DCOM を使用する