Public/Commands/Set-JCCommand.ps1

Function Set-JCCommand {
    [CmdletBinding()]

    param (

        [Parameter(Mandatory,
            ValueFromPipelineByPropertyName = $True, HelpMessage = 'The _id of the JumpCloud command you wish to update.
To find a JumpCloud CommandID run the command:
PS C:\> Get-JCCommand | Select name, _id
The CommandID will be the 24 character string populated for the _id field.'
)]
        [string]
        $CommandID,

        [Parameter(
            ValueFromPipelineByPropertyName = $True, HelpMessage = 'The name of the new JumpCloud command.')]
        [string]
        $name,

        [Parameter(
            ValueFromPipelineByPropertyName = $True, HelpMessage = 'The actual script or command.')]
        [string]
        $command,

        [Parameter(
            ValueFromPipelineByPropertyName = $True, HelpMessage = 'The launch type of the command options are: trigger, manual, repeated, one-time., repeated, one-time.')]
        [string]
        [ValidateSet('trigger', 'manual')]
        $launchType,

        [Parameter(
            ValueFromPipelineByPropertyName = $True, HelpMessage = 'The time the command will run before it times out.')]
        [string]
        $timeout

    )

    DynamicParam {
        If ((Get-PSCallStack).Command -like '*MarkdownHelp') {
            $launchType = 'trigger'
        }
        $dict = New-Object System.Management.Automation.RuntimeDefinedParameterDictionary


        If ($launchType -eq "trigger") {
            $attr = New-Object System.Management.Automation.ParameterAttribute
            $attr.HelpMessage = "Enter a trigger name. Triggers must be unique"
            $attr.ValueFromPipelineByPropertyName = $true
            $attr.Mandatory = $true
            $attrColl = New-Object System.Collections.ObjectModel.Collection[System.Attribute]
            $attrColl.Add($attr)
            $param = New-Object System.Management.Automation.RuntimeDefinedParameter('trigger', [string], $attrColl)
            $dict.Add('trigger', $param)

        }

        return $dict

    }

    begin {

        Write-Verbose 'Verifying JCAPI Key'
        if ([System.String]::IsNullOrEmpty($JCAPIKEY)) { Connect-JConline }

        $hdrs = @{

            'Content-Type' = 'application/json'
            'Accept'       = 'application/json'
            'X-API-KEY'    = $JCAPIKEY
        }

        if ($JCOrgID) {
            $hdrs.Add('x-org-id', "$($JCOrgID)")
        }

        $URL = "$JCUrlBasePath/api/commands/$($CommandID)"

        Write-Verbose 'Initilizing NewCommandsArray'
        $NewCommandsArray = @()
    }

    process {

        $body = @{}

        $getCommand = Get-JCCommand -commandId $CommandId

        foreach ($param in $PSBoundParameters.GetEnumerator()) {

            if ([System.Management.Automation.PSCmdlet]::CommonParameters -contains $param.key) { continue }

            if ($param.key -eq 'CommandID', 'JCAPIKey') { continue }


            $body.add($param.Key, $param.Value)
        }

        if (!$PSBoundParameters.ContainsKey('timeout')) {
            $body.Add("timeout", $getCommand.timeout)
        }

        if (!$PSBoundParameters.ContainsKey('launchType')) {
            $body.Add("launchType", $getCommand.launchType)
            $body.Add("trigger", $getCommand.trigger)
        }
        $body.add("commandType", $getCommand.commandType)
        # Include commandType to body

        $jsonbody = $body | ConvertTo-Json
        Write-Debug "Json = $($jsonbody)"
        $NewCommand = Invoke-RestMethod -Uri $URL -Method PUT -Body $jsonbody -Headers $hdrs -UserAgent:(Get-JCUserAgent)

        $NewCommandsArray += $NewCommand
    }

    end {

        Return $NewCommandsArray

    }
}