タスクスケジューラに毎日指定時刻に実行するタスクを登録するスクリプト

コンピュータ

Windows10には、時刻やOSの起動等をきっかけに(トリガー)にプログラムを自動的に実行するタスクスケジューラという機能があります。なかなか多機能で良いのですが、反面設定する項目が多いので、シンプルに毎日指定時刻にプログラムが実行されるタスクのスクリプトを書いてみました。

スクリプト

<#
.SYNOPSIS
タスクスケジューラーに毎日指定時刻に実行するタスクを登録する。
<CommonParameters> はサポートしていません

.DESCRIPTION
Windows10のみ動作確認
TaskPathはユーザー名/タスク名

.EXAMPLE
Set-TimerDaily "タスク名" "時刻" "実行ファイル名" "オプション"

.PARAMETER Exc
引数にういて

#>

function Set-TimerDaily
{
    param(
        [string]
        $TaskName,
        [string]
        $Time,
        [string]
        $FileName,
        [string]
        $Option
    )
    begin {}

    process {

        # トリガー
        $Trigger = New-ScheduledTaskTrigger -Daily -at $Time

        # アクション
        $Action = New-ScheduledTaskAction -Execute $FileName -Argument $Option

        # ユーザー名
        $Username = $env:USERNAME

        # 登録
        Register-ScheduledTask -TaskPath "\${Username}\${TaskName}\" -TaskName $TaskName -User "SYSTEM" -RunLevel Highest -Trigger $Trigger -Action $Action
    }
    end {}
}
if (-not($MyInvocation.PSCommandPath)) {
    $TaskName = "日次ユーザーバックアップ"
    $Time = "03:00:00"
    $FileName = 'robocopy.exe'
    $Option = [Environment]::GetFolderPath("MyDocument") + ' \\FILESERV\share\Users\VRPC2ND /S /R:0 /LOG+:' + [Environment]::GetFolderPath("MyDocument") + '\Logs\ROBOCOPY.LOG'

    Set-TimerDaily -TaskName $TaskName -Time $Time -FileName $FileName -Option $Option
}

説明

指定時刻(03:00:00)になるとrobocopy.exeDocumentフォルダを別なパソコンの共有フォルダ(\\fileserv\Users\VRPC2ND)へバックアップが開始します。ログはDocuments\Logs\ROBOCOPY.LOGに出力されます。
このタスクの実行ユーザーはSYSTEMで実行され、バックエンドで実行されるのでウィンドウは表示されません。

関数のオプションは必要最低限にしましたが、実行ユーザーやスリープ時の処理などはハードコーディングしていますので、必要があれば変更することになります。

注意事項

Windows7では実行不可

コメント