scripts/Invoke-pwshake.ps1
function Invoke-pwshake { [CmdletBinding()] param ( [Parameter(Position = 0, Mandatory = $false)] [string]$ConfigPath = "./pwshake.yaml", [Parameter(Position = 1, Mandatory = $false)] [Alias("RunLists", "Roles")] [object[]]$Tasks = @(), [Parameter(Position = 2, Mandatory = $false)] [object]$MetaData = $null, [Alias("WhatIf", "Noop")] [switch]$DryRun ) process { $config = Load-Config -YamlPath $ConfigPath ` | Load-Resources ` | Merge-Includes -yamlPath $ConfigPath ` | Merge-Metadata -metadata $MetaData -tasks $Tasks -yamlPath $ConfigPath ` | Override-Attributes ` | Interpolate-Attributes Log-Verbose "PWSHAKE config:" $config Log-Verbose "$(ConvertTo-Yaml $config)" $config $arranged_tasks = Arrange-Tasks $config Log-Verbose "Arranged tasks:" $config Log-Verbose "$(ConvertTo-Yaml $arranged_tasks)" $config try { Push-Location $config.attributes.work_dir foreach ($task in $arranged_tasks) { Invoke-Task $task $config $dryRun } } finally { Pop-Location } } } |