Public/Monitor/New-TBMonitor.ps1
|
function New-TBMonitor { <# .SYNOPSIS Creates a new configuration monitor. .DESCRIPTION Creates a new UTCM configuration monitor that tracks specified resources for drift against a baseline. Accepts resources directly or from pipeline. .PARAMETER DisplayName The display name for the monitor. .PARAMETER Description Optional description of the monitor. .PARAMETER BaselineDisplayName Optional display name for the baseline. Defaults to '<DisplayName> Baseline'. .PARAMETER BaselineDescription Optional description for the baseline. .PARAMETER Resources Array of baseline resource objects to monitor. .PARAMETER Parameters Optional hashtable of key-value pairs for baseline parameter values. .EXAMPLE New-TBMonitor -DisplayName 'MFA Monitor' -Resources $resources #> [CmdletBinding(SupportsShouldProcess = $true)] [OutputType([PSCustomObject])] param( [Parameter(Mandatory = $true)] [string]$DisplayName, [Parameter()] [string]$Description, [Parameter()] [string]$BaselineDisplayName, [Parameter()] [string]$BaselineDescription, [Parameter(ValueFromPipeline = $true)] [object[]]$Resources, [Parameter()] [hashtable]$Parameters ) begin { $allResources = [System.Collections.ArrayList]::new() } process { if ($Resources) { foreach ($resource in $Resources) { $null = $allResources.Add($resource) } } } end { $bodyParams = @{ DisplayName = $DisplayName } if ($Description) { $bodyParams['Description'] = $Description } if ($BaselineDisplayName) { $bodyParams['BaselineDisplayName'] = $BaselineDisplayName } if ($BaselineDescription) { $bodyParams['BaselineDescription'] = $BaselineDescription } if ($Parameters) { $bodyParams['Parameters'] = $Parameters } if ($allResources.Count -gt 0) { $warningTracker = @{} $converted = foreach ($r in $allResources) { ConvertTo-TBBaselineResource -Resource $r -WarningTracker $warningTracker } $bodyParams['Resources'] = $converted } $body = ConvertTo-TBMonitorBody @bodyParams $uri = '{0}/configurationMonitors' -f (Get-TBApiBaseUri) if ($PSCmdlet.ShouldProcess($DisplayName, 'Create configuration monitor')) { Write-TBLog -Message ('Creating monitor: {0}' -f $DisplayName) $response = Invoke-TBGraphRequest -Uri $uri -Method 'POST' -Body $body return ConvertFrom-TBMonitorResponse -Response $response } } } |