functions/Set-JS7InventoryItem.ps1
function Set-JS7InventoryItem { <# .SYNOPSIS Adds or updates the configuration of a JOC Cockpit inventory item, e.g. a workflow .DESCRIPTION Any inventory objects can be stored to JOC Cockpit. the objects are passed on as PowerShell objects and are converted by the cmdlet to their native JSON reperesentation. .PARAMETER Path Specifies the folder, sub-folder and name of the object, e.g. a workflow path that should be stored to the inventory. .PARAMETER Type Specifies the object type which is one of: * FOLDER * WORKFLOW * JOBCLASS * JOBRESOURCE * LOCK * JUNCTION * FILEORDERSOURCE * WORKINGDAYSCALENDAR * NONWORKINGDAYSCALENDAR * SCHEDULE .PARAMETER Object Specifies the object that should be stored to the inventory. This parameter expects a PowerShell custom object [PSCustomObject] as e.g. returned by the Get-JS7InventoryItem cmdlet. The custom object is converted to JSON by this cmdlet. .PARAMETER Valid Specifies that the inventory object has been validate before using this cmdlet If such orders exist with a Controller and the -Submit parameter is used then they are cancelled and re-created. .PARAMETER AuditComment Specifies a free text that indicates the reason for the current intervention, e.g. "business requirement", "maintenance window" etc. The Audit Comment is visible from the Audit Log view of JOC Cockpit. This parameter is not mandatory, however, JOC Cockpit can be configured to enforce Audit Log comments for any interventions. .PARAMETER AuditTimeSpent Specifies the duration in minutes that the current intervention required. This information is visible with the Audit Log view. It can be useful when integrated with a ticket system that logs the time spent on interventions with JobScheduler. .PARAMETER AuditTicketLink Specifies a URL to a ticket system that keeps track of any interventions performed for JobScheduler. This information is visible with the Audit Log view of JOC Cockpit. It can be useful when integrated with a ticket system that logs interventions with JobScheduler. .OUTPUTS This cmdlet does not return any output. .EXAMPLE $fos = Get-JS7InventoryItem -Path /JS7Demo/08_FileWatching/jdFilesTxt -Type FILEORDERSOURCE Set-JS7InventoryItem -Path /JS7Demo/08_FileWatching/jdFilesTxt -Type FILEORDERSOURCE -Object $fos Stores the inventory object of a file order source. .LINK about_js7 #> [cmdletbinding(SupportsShouldProcess)] param ( [Parameter(Mandatory=$True,ValueFromPipeline=$True,ValueFromPipelinebyPropertyName=$True)] [string] $Path, [Parameter(Mandatory=$True,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [ValidateSet('FOLDER','WORKFLOW','JOBCLASS','JOBRESOURCE','LOCK','JUNCTION','FILEORDERSOURCE','WORKINGDAYSCALENDAR','NONWORKINGDAYSCALENDAR','SCHEDULE')] [string] $Type, [Parameter(Mandatory=$True,ValueFromPipeline=$True,ValueFromPipelinebyPropertyName=$True)] [PSCustomObject] $Object, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [switch] $Valid, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [string] $AuditComment, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [int] $AuditTimeSpent, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [Uri] $AuditTicketLink ) Begin { Approve-JS7Command $MyInvocation.MyCommand $stopWatch = Start-JS7StopWatch if ( !$AuditComment -and ( $AuditTimeSpent -or $AuditTicketLink ) ) { throw "$($MyInvocation.MyCommand.Name): Audit Log comment required, use parameter -AuditComment if one of the parameters -AuditTimeSpent or -AuditTicketLink is used" } } Process { if ( $Path.endsWith('/') ) { throw "$($MyInvocation.MyCommand.Name): path has to include folder, sub-folder and object name" } Write-Debug ".. $($MyInvocation.MyCommand.Name):" } End { $body = New-Object PSObject Add-Member -Membertype NoteProperty -Name 'path' -value $Path -InputObject $body Add-Member -Membertype NoteProperty -Name 'objectType' -value $Type -InputObject $body Add-Member -Membertype NoteProperty -Name 'valid' -value ($Valid -eq $True) -InputObject $body Add-Member -Membertype NoteProperty -Name 'configuration' -value $Object -InputObject $body if ( $AuditComment -or $AuditTimeSpent -or $AuditTicketLink ) { $objAuditLog = New-Object PSObject Add-Member -Membertype NoteProperty -Name 'comment' -value $AuditComment -InputObject $objAuditLog if ( $AuditTimeSpent ) { Add-Member -Membertype NoteProperty -Name 'timeSpent' -value $AuditTimeSpent -InputObject $objAuditLog } if ( $AuditTicketLink ) { Add-Member -Membertype NoteProperty -Name 'ticketLink' -value $AuditTicketLink -InputObject $objAuditLog } Add-Member -Membertype NoteProperty -Name 'auditLog' -value $objAuditLog -InputObject $body } if ( $PSCmdlet.ShouldProcess( 'inventory item', '/inventory/store' ) ) { [string] $requestBody = $body | ConvertTo-Json -Depth 100 $response = Invoke-JS7WebRequest -Path '/inventory/store' -Body $requestBody if ( !$response.StatusCode -eq 200 ) { throw ( $response | Format-List -Force | Out-String ) } } Trace-JS7StopWatch -CommandName $MyInvocation.MyCommand.Name -StopWatch $stopWatch Update-JS7Session } } |