Scripts/Rename-BPAObject.ps1

function Rename-BPAObject {
    <#
        .SYNOPSIS
            Renames an AutoMate BPA object.
 
        .DESCRIPTION
            Rename-BPAObject receives BPA object(s) on the pipeline, or via the parameter $InputObject, and renames the object(s).
 
        .PARAMETER InputObject
            The object(s) to be locked.
 
        .INPUTS
            The following objects can be renamed by this function:
            Folder
            Workflow
            WorkflowVariable
            Task
            Process
            AgentGroup
            UserGroup
 
        .EXAMPLE
            Get-BPAWorkflow "My Workflow" | Rename-BPAObject "My Renamed Workflow"
 
        .NOTES
            Author(s): : David Seibel
            Contributor(s) :
            Date Created : 11/07/2016
            Date Modified : 02/08/2018
 
        .LINK
            https://github.com/davidseibel/PoshBPA
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        $InputObject,

        [Parameter(Mandatory = $true, Position = 0)]
        [ValidateNotNullOrEmpty()]
        [string]$Name
    )

    PROCESS {
        foreach ($obj in $InputObject) {
            $restResource = ([BPATypeDictionary]::($obj.TypeName)).RestResource
            switch ($obj.TypeName) {
                "Folder" {
                    $update = Get-BPAFolder -ID $obj.ID -BPAServer $obj.BPAServer
                    if ($update.ID -notin (Get-BPAFolderRoot -BPAServer $obj.BPAServer).ID) {
                        $update.Name = $Name
                    } else {
                        throw "A root folder cannot be renamed!"
                    }
                }
                "Workflow"   { 
                    $update = Get-BPAWorkflow -ID $obj.ID -BPAServer $obj.BPAServer
                    $update.Name = $Name
                }
                "Task"       { 
                    $update = Get-BPATask -ID $obj.ID -BPAServer $obj.BPAServer
                    $update.Name = $Name
                }
                "Condition"  { 
                    $update = Get-BPACondition -ID $obj.ID -BPAServer $obj.BPAServer
                    $update.Name = $Name
                }
                "Process"    { 
                    $update = Get-BPAProcess -ID $obj.ID -BPAServer $obj.BPAServer
                    $update.Name = $Name
                }
                "AgentGroup" { 
                    $update = Get-BPAAgentGroup -ID $obj.ID -BPAServer $obj.BPAServer
                    $update.Name = $Name
                }
                "UserGroup"  { 
                    $update = Get-BPAUserGroup -ID $obj.ID -BPAServer $obj.BPAServer
                    $update.Name = $Name
                }
                "WorkflowVariable" { 
                    $update = Get-BPAWorkflow -ID $obj.ParentID -BPAServer $obj.BPAServer
                    $oldNameVar = $update.Variables | Where-Object {$_.ID -eq $obj.ID}
                    $newNameVar = $update.Variables | Where-Object {$_.Name -eq $NewName}
                    if ($null -eq $newNameVar) {
                        $oldNameVar.Name = $Name
                        $restResource = "workflows"
                    } else {
                        throw "Workflow $($update.Name) already contains a variable with the name '$NewName'!"
                    }
                }
                default { 
                    Write-Error -Message "Unsupported input type '$($obj.TypeName)' encountered!" -TargetObject $obj
                }
            }
            $update | Set-BPAObject
            Write-Verbose "Renamed $($obj.TypeName) '$($obj.Name)' to '$($Name)'."
        }
    }
}