Public/Invoke-TaskScript.ps1

function Invoke-TaskScript {
<#
.SYNOPSIS
    A short one-line action-based description, e.g. 'Tests if a function is valid'
.DESCRIPTION
    A longer description of the function, its purpose, common use cases, etc.
.EXAMPLE
    PS C:\> Invoke-TaskScript -machineId 'Machines-419' -ScriptBlock '$env:computername'
    Executes the script $env:computername' on Machines-419 and returns a task object
.EXAMPLE
    PS C:\> Test-MyTestFunction -Verbose
    Explanation of the function or its result. You can include multiple examples with additional
#>

    param (
        # Parameter help description
        [Parameter(Mandatory = $true,
            ValueFromPipeline = $true,
            ValueFromPipelineByPropertyName = $true)]
        [string[]]
        $MachineId,
        [String]
        $ScriptBlock,
        [String]
        $Description,
        [int]
        $MaxTargetsPerTask
    )
    # TODO: Replace machineID with Machine Object and
    Test-OctopusConnection | out-null
    # split machineArray into chunks of $MaxTargetsPerTask https://stackoverflow.com/a/26850233
    if ($machineId.count -gt $MaxTargetsPerTask -and $MaxTargetsPerTask) {
        $counter = [pscustomobject] @{ Value = 0 }
        $groups = $machineId | Group-Object -Property { [math]::Floor($counter.Value++ / $MaxTargetsPerTask) }
        foreach ($item in $groups) {
            Invoke-TaskScript -machineId $item.group -ScriptBlock $ScriptBlock -Description $Description
        }

    }

    $repo._repository.Tasks.ExecuteAdHocScript($ScriptBlock, $machineId, $environmentId, $roles , $Description)
    #Invoke-TaskScript -machineId 'Machines-419' -ScriptBlock '$env:computername'
}


#Invoke-Script -machineId 'Machines-419' -ScriptBlock '$env:computername'