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

コンピュータ

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

スクリプト

ファイル名:Set-TimerDaily.ps1

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

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

.EXAMPLE
Set-TimerDaily -TaskName "MyTask" -Time "03:00" -FileName "notepad.exe" -Option ""

#>

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 "\" -TaskName $TaskName -User $env:USERNAME -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'

    $logDir = [System.IO.Path]::Combine([Environment]::GetFolderPath("MyDocuments"), "Logs")
    if (-not (Test-Path $logDir)) {
        New-Item -ItemType Directory -Path $logDir | Out-Null
    }

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

※注意事項
Windows7では実行不可

説明

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

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

コメント