Functions/Helper/Task/Get-ValentiaTask.ps1

#Requires -Version 3.0

#-- Public Module Functions to load Task --#

# Task

<#
.SYNOPSIS
Load Task File format into $valentia.context.tasks.$taskname hashtable.
 
.DESCRIPTION
Loading ps1 file which format is task <taskname> -Action { <scriptblock> }
 
.NOTES
Author: guitarrapc
Created: 20/June/2013
 
.EXAMPLE
task taskname -Action { What you want to do in ScriptBlock}
--------------------------------------------
This is format sample.
 
.EXAMPLE
task lstest -Action { Get-ChildItem c:\ }
--------------------------------------------
Above example will create taskkey as lstest, run "Get-ChildItem c:\" when invoke.
#>

function Get-ValentiaTask
{
    [CmdletBinding()]  
    param
    (
        [Parameter(Position = 0, mandatory = $true, HelpMessage = "Input TaskName you want to set and not dupricated.")]
        [string]$Name = $null,

        [Parameter(Position = 1, mandatory = $false, HelpMessage = "Write ScriptBlock Action to execute with this task.")]
        [scriptblock]$Action = $null
    )

    # Load Task
    Write-Verbose $valeWarningMessages.warn_import_task_begin
    $newTask = @{
        Name = $Name
        Action = $Action
    }

    # convert into LowerCase for keyname
    Write-Verbose $valeWarningMessages.warn_import_task_end
    $taskKey = $Name.ToLower()

    # Get current context variables
    Write-Verbose $valeWarningMessages.warn_get_current_context
    $currentContext = $valentia.context.Peek()

    # Check dupricate key name
    if ($currentContext.tasks.ContainsKey($taskKey))
    {
        throw $valeErrorMessages.error_duplicate_task_name -F $Name
    }
    else
    {
        $valeWarningMessages.warn_set_taskkey | Write-ValentiaVerboseDebug
        $currentContext.tasks.$taskKey = $newTask
    }

    # return taskkey to determin key name in $valentia.context.tasks.$taskkey
    return $taskKey

}