Functions/commands.ps1

function Invoke-Commands(
    [Parameter(Mandatory = $true)]
    [ValidateNotNullOrEmpty()]
    [object[]]$commands,
    [string[]]$excludeList) {
    foreach ($command in ($commands | Where-Object {($_.PSObject.Properties.Name -CNotIn $excludeList)})) {
        Invoke-SimpleCommand $command
    }
}

function Invoke-SimpleCommand(
    [Parameter(Mandatory = $true)]
    [ValidateNotNullOrEmpty()]
    [object]$command) {
    if ($property -isnot [string]) {
        $cmdName = $command.PSObject.Properties.Name
        $cmdExec = $command.PSObject.Properties.Value
        Write-Host "Execute command '$cmdName': '$cmdExec'..." -ForegroundColor Cyan
    }
    else {
        $cmdExec = $command
        Write-Host "Execute command '$cmdExec'..." -ForegroundColor Cyan
    }
    Invoke-Expression $cmdExec
}

function Install-ConfigSection(
    [Parameter(Mandatory = $true)]
    [object]$option, 
    [Parameter(Mandatory = $true)]
    [ValidateNotNullOrEmpty()]
    [string]$sectionName,
    [Parameter(Mandatory = $true)]
    [ValidateNotNullOrEmpty()]
    [string]$PropertyCommandListName = "commands"
) {
    if (!$options -or !$options.commandName -or $options.isDisabled) {
        Write-Warning "${sectionName}: 'options' or 'commandName' not found or is currently 'disabled'. Skipped"
        return
    }

    if ($options.$PropertyCommandListName -and $options.$PropertyCommandListName.Count -gt 0) {
        $command = "$($options.commandName) $($options.prefix) "
        foreach ($package in $options.$PropertyCommandListName) {
            $command += "${package} "
        }
        Write-Warning "trying to invoke command: ${command}"
        Invoke-Expression $command
    }
    else {
        Write-Host "${sectionName}: ${PropertyCommandListName} not found!"
    }
}