Scripts/Move-BPAObject.ps1

function Move-BPAObject {
    <#
        .SYNOPSIS
            Moves an AutoMate BPA object.
 
        .DESCRIPTION
            Move-BPAObject receives BPA object(s) on the pipeline, or via the parameter $InputObject, and moves the object(s) to the specified folder.
 
        .PARAMETER InputObject
            The object(s) to be moved.
 
        .INPUTS
            The following objects can be moved by this function:
            Workflow
            Task
            Process
            TaskAgent
            ProcessAgent
            AgentGroup
            User
            UserGroup
 
        .EXAMPLE
            Get-BPAWorkflow "My Workflow" | Move-BPAObject -Folder (Get-BPAFolder -Path \WORKFLOWS)
 
        .NOTES
            Author(s): : David Seibel
            Contributor(s) :
            Date Created : 11/07/2016
            Date Modified : 05/01/2018
 
        .LINK
            https://github.com/davidseibel/PoshBPA
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        $InputObject,
        
        [Parameter(Mandatory = $true, Position = 0)]
        [ValidateScript({$_.TypeName -eq "Folder"})]
        $Folder
    )

    PROCESS {
        foreach ($obj in $InputObject) {
            if ($Folder.Path -like "\$(([BPATypeDictionary]::($obj.TypeName)).RootFolderName)*") {
                if ($obj.ParentID -ne $Folder.ID) {
                    switch ($obj.TypeName) {
                        "Workflow"     { $update = Get-BPAWorkflow -ID $obj.ID -BPAServer $obj.BPAServer   }
                        "Task"         { $update = Get-BPATask -ID $obj.ID -BPAServer $obj.BPAServer       }
                        "Condition"    { $update = Get-BPACondition -ID $obj.ID -BPAServer $obj.BPAServer  }
                        "Process"      { $update = Get-BPAProcess -ID $obj.ID -BPAServer $obj.BPAServer    }
                        "Agent"        { $update = Get-BPAAgent -ID $obj.ID -BPAServer $obj.BPAServer      }
                        "AgentGroup"   { $update = Get-BPAAgentGroup -ID $obj.ID -BPAServer $obj.BPAServer }
                        "User"         { $update = Get-BPAUser -ID $obj.ID -BPAServer $obj.BPAServer       }
                        "UserGroup"    { $update = Get-BPAUserGroup -ID $obj.ID -BPAServer $obj.BPAServer  }
                        default        { Write-Error -Message "Unsupported input type '$($obj.TypeName)' encountered!" -TargetObject $obj    }
                    }
                    $update.Path     = Join-Path -Path $Folder.Path -ChildPath $Folder.Name
                    $update.ParentID = $Folder.ID
                    $update | Set-BPAObject
                    Write-Verbose "Moved $($obj.TypeName) '$($obj.Name)' to folder $(Join-Path -Path $Folder.Path -ChildPath $Folder.Name)."
                } else {
                    Write-Verbose "$($obj.TypeName) '$($obj.Name)' is already in folder $(Join-Path -Path $Folder.Path -ChildPath $Folder.Name)."
                }
            } else {
                Write-Error -Message "Invalid folder path $(Join-Path -Path $Folder.Path -ChildPath $Folder.Name) for object type '$($obj.TypeName)'!" -TargetObject $obj
            }
        }
    }
}