Scripts/Lock-BPAObject.ps1

function Lock-BPAObject {
    <#
        .SYNOPSIS
            Locks an AutoMate BPA object.
 
        .DESCRIPTION
            Lock-BPAObject receives BPA object(s) on the pipeline, or via the parameter $InputObject, and locks the object(s).
 
        .PARAMETER InputObject
            The object(s) to be locked.
 
        .INPUTS
            The following objects can be locked by this function:
            Workflow
            Task
            Process
 
        .EXAMPLE
            Get-BPAWorkflow "My Workflow" | Lock-BPAObject
 
        .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
    )

    PROCESS {
        foreach ($obj in $InputObject) {
            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   }
                default     { Write-Error -Message "Unsupported input type '$($obj.TypeName)' encountered!" -TargetObject $obj  }
            }

            $user = Get-BPAUser -BPAServer $obj.BPAServer | Where-Object {$_.Name -ieq $BPAConnectionInfo.Credential.UserName}
            $update.LockedBy = $user.ID            
            $update | Set-BPAObject
            Write-Verbose "Locked $($obj.TypeName) '$($obj.Name)'."
        }    
    }
}