Public/Commands/New-JCCommand.ps1
Function New-JCCommand { [CmdletBinding()] param ( [Parameter(Mandatory, ValueFromPipelineByPropertyName = $True)] [string] $name, [Parameter(Mandatory, ValueFromPipelineByPropertyName = $True)] [string] [ValidateSet('windows', 'mac', 'linux')] $commandType, [Parameter(Mandatory, ValueFromPipelineByPropertyName = $True)] [string] $command, [Parameter( ValueFromPipelineByPropertyName = $True)] [string] [ValidateSet('trigger', 'manual')] $launchType = 'manual', [Parameter( ValueFromPipelineByPropertyName = $True)] [string] $timeout = '120' ) DynamicParam { $dict = New-Object System.Management.Automation.RuntimeDefinedParameterDictionary If ($commandType -eq "windows") { $attr = New-Object System.Management.Automation.ParameterAttribute $attr.HelpMessage = "Enter shell type" $attr.ValueFromPipelineByPropertyName = $true $attrColl = New-Object System.Collections.ObjectModel.Collection[System.Attribute] $attrColl.Add($attr) $attrColl.Add((New-Object System.Management.Automation.ValidateSetAttribute('powershell', 'cmd'))) $param = New-Object System.Management.Automation.RuntimeDefinedParameter('shell', [string], $attrColl) $dict.Add('shell', $param) } If ($commandType -ne "windows") { $attr = New-Object System.Management.Automation.ParameterAttribute $attr.HelpMessage = "Enter run as user" $attr.ValueFromPipelineByPropertyName = $true $attrColl = New-Object System.Collections.ObjectModel.Collection[System.Attribute] $attrColl.Add($attr) $param = New-Object System.Management.Automation.RuntimeDefinedParameter('user', [string], $attrColl) $dict.Add('user', $param) } 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 ($JCAPIKEY.length -ne 40) {Connect-JConline} $hdrs = @{ 'Content-Type' = 'application/json' 'Accept' = 'application/json' 'X-API-KEY' = $JCAPIKEY } if ($JCOrgID) { $hdrs.Add('x-org-id', "$($JCOrgID)") } $URL = "https://console.jumpcloud.com/api/commands/" Write-Verbose 'Initilizing NewCommandsArray' $NewCommandsArray = @() } process { Write-Verbose "commandType is $CommandType" switch ($commandType) { mac { if ($PSBoundParameters["user"] -eq $null) { $PSBoundParameters["user"] = "000000000000000000000000" } $body = @{ name = $name command = $command commandType = "mac" launchType = $launchType timeout = $timeout user = $PSBoundParameters["user"] } } windows { if ($PSBoundParameters["shell"] -eq $null) { $PSBoundParameters["shell"] = "powershell"` } $body = @{ command = $command commandType = "windows" launchType = $launchType name = $name timeout = $timeout shell = $PSBoundParameters["shell"] } } linux { if ($PSBoundParameters["user"] -eq $null) { $PSBoundParameters["user"] = "000000000000000000000000" } $body = @{ command = $command commandType = "linux" launchType = $launchType name = $name timeout = $timeout user = $PSBoundParameters["user"] } } Default { Write-Host 'No Command Type' break } } if ($PSBoundParameters['launchType'] -eq 'trigger') { $body.Add('trigger', $PSBoundParameters['trigger']) } $jsonbody = $body | ConvertTo-Json $NewCommand = Invoke-RestMethod -Uri $URL -Method POST -Body $jsonbody -Headers $hdrs -UserAgent 'Pwsh_1.8.2' $NewCommandsArray += $NewCommand } end { Return $NewCommandsArray } } |