functions/public/Remove-PSProjectTask.ps1

Function Remove-PSProjectTask {
    [cmdletbinding(SupportsShouldProcess)]
    [OutputType('None')]
    [alias('alias')]
    Param(
        [Parameter(
            Position = 0,
            Mandatory,
            HelpMessage = "Enter the task ID")]
        [ValidateNotNullOrEmpty()]
        [Alias("ID")]
        [Int]$TaskID,
        [Parameter(
            HelpMessage = "Enter the parent path to the psproject.json file, e.g. c:\scripts\mymodule.")]
        [ValidateScript({ Test-Path $_ })]
        [alias("FullName")]
        [String]$Path = "."
    )

    Begin {
        $PSDefaultParameterValues["_verbose:Command"] = $MyInvocation.MyCommand
        $PSDefaultParameterValues["_verbose:block"] = "Begin"
        $PSDefaultParameterValues["_verbose:ANSI"] = "[1;38;5;195m"
        _verbose -message $strings.Starting
        _verbose -message ($strings.PSVersion -f $PSVersionTable.PSVersion)
        _verbose -message ($strings.UsingHost -f $host.Name)
        _verbose -message ($strings.UsingModule -f $PSProjectStatusModule)
    } #begin

    Process {
        $PSDefaultParameterValues["_verbose:block"] = "Process"
        $cPath = Convert-Path $Path
        $json = Join-Path $cPath -ChildPath psproject.json
        If (Test-Path -path $json) {
            _verbose ($strings.ProcessTasks -f $json)
            $in = Get-Content -Path $json | ConvertFrom-Json
            $t = Get-PSProjectTask -id $TaskID
            if ($t.TaskID -gt 0) {
                _verbose ($strings.RemoveTask -f $t.TaskDescription,$t.TaskID)
                $updated = $in.tasks | Where-Object {$_ -ne $t.TaskDescription}
                $in.Tasks = $updated

                $in.LastUpdate = Get-Date
                $in | ConvertTo-Json | Out-File -FilePath $json
            }
            else {
                Write-Warning ($strings.NoTaskID -f $TaskID)
            }
        }
        else {
            Write-Warning ($strings.missingJson -f $cPath)
        }

    } #process

    End {
        $PSDefaultParameterValues["_verbose:Command"] = $MyInvocation.MyCommand
        $PSDefaultParameterValues["_verbose:block"] = "End"
        $PSDefaultParameterValues["_verbose:ANSI"] = "[1;38;5;195m"
        _verbose $strings.Ending
    } #end

} #close New-PSProjectStatus



Register-ArgumentCompleter -CommandName Remove-PSProjectTask -ParameterName TaskID -ScriptBlock {
    param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter)

    #PowerShell code to populate $WordToComplete
    Get-PSProjectTask | ForEach-Object {
            # completion text,listitem text,result type,Tooltip
            [System.Management.Automation.CompletionResult]::new($_.TaskID, $_.TaskID, 'ParameterValue', $_.TaskDescription)
        }
}