Scripts/Copy-BPATask.ps1
function Copy-BPATask { <# .SYNOPSIS Copies an AutoMate BPA task. .DESCRIPTION Copy-BPATask can copy a task object within, or between servers. .PARAMETER InputObject The object to copy. .PARAMETER Name The new name to set on the object. .PARAMETER Folder The folder to place the object in. .PARAMETER BPAServer The server to copy the object to. .INPUTS The following BPA object types can be modified by this function: Task .EXAMPLE # Copy task "Start Service" from server1 to server2 Get-BPATask "Start Service" -BPAServer server1 | Copy-BPATask -Folder (Get-BPAFolder TASKS -BPAServer server2) -BPAServer server2 .EXAMPLE # Copy task "Start Service" with new name "Restart Service" Get-BPATask "Start Service" | Copy-BPATask -Name "Restart Service" .NOTES Author(s): : David Seibel Contributor(s) : Date Created : 11/09/2016 Date Modified : 02/08/2018 .LINK https://github.com/davidseibel/PoshBPA #> [CmdletBinding()] param( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] $InputObject, [ValidateNotNullOrEmpty()] [string]$Name, [ValidateScript({$_.TypeName -eq "Folder"})] $Folder, [string]$BPAServer ) BEGIN { $currentDate = Get-Date $nullDate = Get-Date "12/31/1899 7:00:00 PM" if ($BPAServer) { $user = Get-BPAUser -BPAServer $BPAServer | Where-Object {$_.Name -ieq ($BPAConnectionInfo | Where-Object {$_.Server -eq $BPAServer}).Credential.UserName} } } PROCESS { foreach ($obj in $InputObject) { if ($obj.TypeName -eq "Task") { $guid = "{$((New-Guid).Guid)}" if ($BPAServer) { # Copy from one BPA server to another if ($obj.BPAServer -ne $BPAServer) { if ($Folder) { if ($Folder.BPAServer -ne $BPAServer) { throw "Folder specified exists on $($Folder.BPAServer), the folder must exist on $BPAServer!" } } else { $Folder = Get-BPAFolder -ID $user.TaskFolderID -BPAServer $BPAServer } } $server = $BPAServer } else { $user = Get-BPAUser -BPAServer $obj.BPAServer | Where-Object {$_.Name -ieq ($BPAConnectionInfo | Where-Object {$_.Server -eq $obj.BPAServer}).Credential.UserName} $server = $obj.BPAServer } $copy = Get-BPATask -ID $obj.ID -BPAServer $obj.BPAServer $copy.ID = $guid $copy.CreatedBy = $user.ID $copy.CreatedOn = $currentDate $copy.EndedOn = $nullDate $copy.ResultCode = 0 $copy.ResultText = "" $copy.ModifiedOn = $currentDate $copy.StartedOn = $nullDate $copy.Version = 1 $copy.VersionDate = $currentDate if ($Name) { $copy.Name = $Name } if ($Folder) { $copy.ParentID = $Folder.ID } $copy | New-BPAObject -BPAServer $server Get-BPATask -ID $guid -BPAServer $server } else { Write-Error -Message "Unsupported input type '$($obj.TypeName)' encountered!" -TargetObject $obj } } } } |