Scripts/Remove-BPAWorkflowLink.ps1

function Remove-BPAWorkflowLink {
    <#
        .SYNOPSIS
            Removes a link from a BPA workflow
 
        .DESCRIPTION
            Remove-BPAWorkflowLink can remove links from a workflow object.
 
        .PARAMETER InputObject
            The link object to remove.
 
        .INPUTS
            The following BPA object types can be modified by this function:
            WorkflowLink
 
        .EXAMPLE
            # Remove all links from workflow "Some Workflow"
            (Get-BPAWorkflow "Some Workflow").Links | Remove-BPAWorkflowVariable -Name "emailAddress"
 
        .NOTES
            Author(s): : David Seibel
            Contributor(s) :
            Date Created : 02/12/2018
            Date Modified : 06/07/2018
 
        .LINK
            https://github.com/davidseibel/PoshBPA
    #>

    [CmdletBinding(SupportsShouldProcess=$true,ConfirmImpact='Medium')]
    param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        $InputObject
    )
    PROCESS {
        :objectloop foreach ($obj in $InputObject) {
            $shouldUpdate = $false
            switch ($obj.Type -as [BPAConstructType]) {
                "WorkflowLink" {
                    $updateObject = Get-BPAObject -ID $obj.WorkflowID -Types Workflow
                    if (($updateObject | Measure-Object).Count -eq 1) {
                        $updateObject.Links = @($updateObject.Links | Where-Object {$_.ID -ne $obj.ID})
                        $shouldUpdate = $true
                    } else {
                        Write-Warning "Multiple workflows found for ID $($obj.WorkflowID)! No action will be taken."
                        continue objectloop
                    }
                }
                default {
                    Write-Error -Message "Unsupported input type '$($obj.TypeName)' encountered!" -TargetObject $obj
                }
            }
            if ($shouldUpdate) {
                $updateObject | Set-BPAObject
            } else {
                Write-Verbose "$($updateObject.TypeName) '$($updateObject.Name)' does not contain a link with ID $($obj.ID)."
            }
        }
    }
}