functions/New-JS7Subagent.ps1

function New-JS7Subagent
{
<#
.SYNOPSIS
Returns an array with a Subagent object
 
.DESCRIPTION
This cmdlet returns an array with a Subagent object.
 
Consider that the Subagent identification specified with the -SubagentId parameter cannot be modified
for the lifetime of a Subagent.
 
.PARAMETER SubagentId
Specifies a unique identifier for the Subagent. The Subagent ID cannot be changed during the lifetime of a Subagent.
 
.PARAMETER Url
Specifies the URL for which the Subagent is available. A URL includes the protocol (http, https), hostname and port
for which an Agent is operated.
 
.PARAMETER Title
Optionally specifies a title for the Subagent that can later on be used for searching.
 
.PARAMETER DirectorType
Specifies if the Subagent acts as a Director Agent or Subagent only. The following values can be used:
 
* NO_DIRECTOR: the Agent acts as a Subagent only
* PRIMARY_DIRECTOR: the Agent acts as a Primary Director Agent and includes a Subagent
* SECONDARY_DIRECTOR: the Agent acts as a Secondary Director Agent and includes a Subagent
 
.PARAMETER Ordering
Optionally specifies the sequence in which Subagents are returned and displayed by JOC Cockpit.
The ordering is specified in ascening numbers.
 
.PARAMETER GenerateSubagentCluster
Optionally specifies if a Subagent Cluster should be created that holds the Subagent as its unique member.
This option is useful if the Subagent Cluster should be assigned directly to jobs that rely on being
executed with the Subagent only.
 
.INPUTS
This cmdlet accepts pipelined input.
 
.OUTPUTS
This cmdlet returns an array of Subagent objects.
 
.EXAMPLE
$subagents = @()
$subagents += New-JS7Subagent -SubagentId 'subagent_001' -Url https://subagent-2-0-primary:4443
$subagents += New-JS7Subagent -SubagentId 'subagent_0021' -Url https://subagent-2-0-secondary:4443
 
Returns an array of Subagent objects with the specified Subagent ID and URL.
 
.LINK
about_JS7
 
#>

[cmdletbinding(SupportsShouldProcess)]
param
(
    [Parameter(Mandatory=$True,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)]
    [string] $SubagentId,
    [Parameter(Mandatory=$True,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)]
    [Uri] $Url,
    [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)]
    [string] $Title,
    [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)]
    [ValidateSet('NO_DIRECTOR','PRIMARY_DIRECTOR','SECONDARY_DIRECTOR',IgnoreCase = $False)]
    [string] $DirectorType = 'NO_DIRECTOR',
    [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)]
    [int] $Ordering,
    [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)]
    [switch] $GenerateSubagentCluster
)
    Begin
    {
        Approve-JS7Command $MyInvocation.MyCommand
        $stopWatch = Start-JS7StopWatch

        $subagents = @()
    }

    Process
    {
        $subagentObj = New-Object PSObject
        Add-Member -Membertype NoteProperty -Name 'subagentId' -value $SubagentId -InputObject $subagentObj
        Add-Member -Membertype NoteProperty -Name 'url' -value $Url -InputObject $subagentObj

        if ( $Title )
        {
            Add-Member -Membertype NoteProperty -Name 'title' -value $Title -InputObject $subagentObj
        }

        if ( $Ordering )
        {
            Add-Member -Membertype NoteProperty -Name 'ordering' -value $Ordering -InputObject $subagentObj
        }

        if ( $DirectorType )
        {
            Add-Member -Membertype NoteProperty -Name 'isDirector' -value $DirectorType -InputObject $subagentObj
        }

        Add-Member -Membertype NoteProperty -Name 'withGenerateSubagentCluster' -value ($GenerateSubagentCluster -eq $True) -InputObject $subagentObj

        if ( $PSCmdlet.ShouldProcess( 'subagents', 'subagent object' ) )
        {
            $subagents += $subagentObj
        }
    }

    End
    {
        $subagents

        Trace-JS7StopWatch -CommandName $MyInvocation.MyCommand.Name -StopWatch $stopWatch
        Update-JS7Session
    }
}