BuildScripts/AddTaskFunctions/Add-JobTask.task.ps1
Set-Alias jobs Add-JobTask function Add-JobTask { <# .SYNOPSIS Add tasks to the job list of another without needing to modify the original task .EXAMPLE Build | jobs task1, task2 This will add tasks `task1` and task2 to the jobs list of Build .EXAMPLE jobs @(task1, task2) Build #> param( # The primary task or phase to add the -TaskList to as jobs [Parameter( Mandatory, Position = 1, ValueFromPipeline, ValueFromPipelineByPropertyName )][string]$Name, # The task(s) that will be added to the list of jobs in the task in -Name [Parameter( Mandatory, Position = 0 )] [Array]$TaskList, # Replace the current jobs list with the tasks in -TaskList # tasks in -TaskList are appended to the end by default [Parameter()] [switch]$Replace ) begin { Write-Debug "`n$('-' * 80)`n-- Begin $($MyInvocation.MyCommand.Name)`n$('-' * 80)" } process { $allTasks = ${*}.All.Keys $validTasks = [System.Collections.Generic.List[object]]@() $errorMessage = "Could not add {0} as a job of {1}. '{2}' in not a valid task name" if ($allTasks -contains $Name) { Write-Debug "$Name is a valid task" foreach ($item in $TaskList) { if ($item -is [string]) { if ($item[0] -eq '?') { $taskName = $item.Substring(1) } else { $taskName = $item } if ($allTasks -contains $taskName) { Write-Debug "Adding $taskName as job of $Name" #! We add the original taskList item, regardless of the '?' $validTasks.Add($item) } else { throw ($errorMessage -f $item, $Name, $item) } } elseif ($item -is [scriptblock]) { Write-Debug "Adding scriptblock as job of $Name" $validTasks.Add($item) } elseif ($item -is [hashtable]) { Add-BuildTask $Name @Jobs -Source $MyInvocation } else { throw ("Cannot add a $($item.GetType()) as a job of $Name" ) } } } else { throw ($errorMessage -f $item, $Name, $Name) } } end { if ($Replace) { Write-Debug '-Replace called, clearing current job list first' $null = ${*}.All[$Name].Jobs.Clear() } Write-Debug "Task list verified, adding $($validTasks.Count) jobs to $Name" ${*}.All[$Name].Jobs += $validTasks if ($MyInvocation.PipelinePosition -lt $MyInvocation.PipelineLength) { Write-Debug "Sending $Name to pipeline" $Name | Write-Output } Write-Debug "`n$('-' * 80)`n-- End $($MyInvocation.MyCommand.Name)`n$('-' * 80)" } } |