Public/Pipeline/Check/Configuration/Get-AdoCheckConfiguration.ps1
|
function Get-AdoCheckConfiguration { <# .SYNOPSIS Get a list of check configurations for a specific resource. .DESCRIPTION This function retrieves check configurations for a specified resource within an Azure DevOps project. You need to provide the resource type and resource ID to filter the results. .PARAMETER CollectionUri Optional. The collection URI of the Azure DevOps collection/organization, e.g., https://dev.azure.com/my-org. .PARAMETER ProjectName Optional. The name or id of the project. .PARAMETER ResourceType Mandatory. The type of the resource to filter the results. E.g., 'environment'. .PARAMETER ResourceName Mandatory. The name of the resource to filter the results. .PARAMETER DefinitionType Optional. The type(s) of check definitions to filter the results. Valid values are 'approval', 'preCheckApproval', 'postCheckApproval', 'branchControl', and 'businessHours'. .PARAMETER Id Mandatory. The ID of the check configuration to retrieve. .PARAMETER Expands Optional. Specifies additional details to include in the response. Default is 'none'. Valid values are 'none' and 'settings'. .PARAMETER Version Optional. The API version to use for the request. Default is '7.2-preview.1'. The -preview flag must be supplied in the api-version for such requests. .LINK - https://learn.microsoft.com/en-us/rest/api/azure/devops/approvalsandchecks/check-configurations/get - https://learn.microsoft.com/en-us/rest/api/azure/devops/approvalsandchecks/check-configurations/list .EXAMPLE $params = @{ CollectionUri = 'https://dev.azure.com/my-org' ProjectName = 'my-project-1' ResourceType = 'environment' ResourceName = 'my-environment-tst' } Get-AdoCheckConfiguration @params -Verbose Retrieves check configurations for the specified environment within the project using provided parameters. .EXAMPLE $params = @{ CollectionUri = 'https://dev.azure.com/my-org' ProjectName = 'my-project-1' ResourceType = 'environment' Expands = 'settings' } @( 'my-environment-tst', 'my-environment-dev' ) | Get-AdoCheckConfiguration @params -Verbose Retrieves check configurations for the specified environments within the project using provided parameters, demonstrating pipeline input. .EXAMPLE Get-AdoCheckConfiguration -Id 1 -Expands 'settings' -Verbose Retrieves the check configuration with ID 1, including its settings. .EXAMPLE $params = @{ CollectionUri = 'https://dev.azure.com/my-org' ProjectName = 'my-project-1' ResourceType = 'environment' ResourceName = 'my-environment-tst' DefinitionType = 'approval' Expands = 'settings' } Get-AdoCheckConfiguration @params -Verbose Retrieves check configurations for the specified environment filtered by the 'approval' definition type. .EXAMPLE $params = @{ CollectionUri = 'https://dev.azure.com/my-org' ProjectName = 'my-project-1' ResourceType = 'environment' ResourceName = 'my-environment-tst' DefinitionType = 'approval', 'preCheckApproval' Expands = 'settings' } Get-AdoCheckConfiguration @params -Verbose Retrieves check configurations for the specified environment filtered by multiple definition types. #> [CmdletBinding(SupportsShouldProcess, DefaultParameterSetName = 'ConfigurationList')] param ( [Parameter(ValueFromPipelineByPropertyName)] [ValidateScript({ Confirm-CollectionUri -Uri $_ })] [string]$CollectionUri = $env:DefaultAdoCollectionUri, [Parameter(ValueFromPipelineByPropertyName)] [Alias('ProjectId')] [string]$ProjectName = $env:DefaultAdoProject, [Parameter(Mandatory, ValueFromPipelineByPropertyName, ParameterSetName = 'ConfigurationList')] [ValidateSet('endpoint', 'environment', 'variablegroup', 'repository')] [string]$ResourceType, [Parameter(Mandatory, ValueFromPipelineByPropertyName, ValueFromPipeline, ParameterSetName = 'ConfigurationList')] [string]$ResourceName, [Parameter(ValueFromPipelineByPropertyName, ParameterSetName = 'ConfigurationList')] [ValidateSet('approval', 'preCheckApproval', 'postCheckApproval', 'branchControl', 'businessHours')] [string[]]$DefinitionType, [Parameter(Mandatory, ValueFromPipelineByPropertyName, ParameterSetName = 'ConfigurationById')] [int32]$Id, [Parameter(ValueFromPipelineByPropertyName)] [ValidateSet('none', 'settings')] [string]$Expands = 'none', [Parameter(HelpMessage = 'The -preview flag must be supplied in the api-version for such requests.')] [Alias('ApiVersion')] [ValidateSet('7.1-preview.1', '7.2-preview.1')] [string]$Version = '7.2-preview.1' ) begin { Write-Verbose ("Command: $($MyInvocation.MyCommand.Name)") Write-Debug ("CollectionUri: $CollectionUri") Write-Debug ("ProjectName: $ProjectName") Write-Debug ("ResourceType: $ResourceType") Write-Debug ("ResourceName: $ResourceName") Write-Debug ("Expands: $Expands") Write-Debug ("ApiVersion: $Version") Confirm-Default -Defaults ([ordered]@{ 'CollectionUri' = $CollectionUri 'ProjectName' = $ProjectName }) } process { try { $QueryParameters = [System.Collections.Generic.List[string]]::new() $DefinitionRefIds = [System.Collections.Generic.List[string]]::new() if ($id) { $uri = "$CollectionUri/$ProjectName/_apis/pipelines/checks/configurations/$id" } else { $resourceId = $null switch ($ResourceType) { 'environment' { $typeParams = @{ CollectionUri = $CollectionUri ProjectName = $ProjectName Name = $ResourceName } $resourceId = (Get-AdoEnvironment @typeParams).Id } default { Write-Warning "ResourceType '$ResourceType' is not supported yet." return } } if (-not $resourceId) { return } $uri = "$CollectionUri/$ProjectName/_apis/pipelines/checks/configurations" # If DefinitionType is provided, resolve it to get the definitionRef if ($DefinitionType) { foreach ($definitionType_ in $DefinitionType) { $definitionRef = Resolve-AdoCheckConfigDefinitionRef -Name $definitionType_ $DefinitionRefIds.Add($definitionRef.id) } $Expands = 'settings' } # Build query parameters if ($ResourceType) { $QueryParameters.Add("resourceType=$ResourceType") } if ($resourceId) { $QueryParameters.Add("resourceId=$resourceId") } } if ($Expands -ne 'none') { $QueryParameters.Add("`$expand=$Expands") } $params = @{ Uri = $uri Version = $Version QueryParameters = if ($queryParameters.Count -gt 0) { $queryParameters -join '&' } else { $null } Method = 'GET' } if ($PSCmdlet.ShouldProcess($ProjectName, $Id ? "Get check configuration: $Id" : "Get Check Configurations: $ResourceType/$ResourceName")) { try { $results = (Invoke-AdoRestMethod @params) if ($Id) { $results = @($results) } else { if ($DefinitionRefIds.Count -gt 0) { $results = $results.value | Where-Object { $DefinitionRefIds -contains $_.settings.definitionRef.id } } else { $results = $results.value } } foreach ($c_ in $results) { $obj = [ordered]@{ id = $c_.id } if ($c_.settings) { $obj['settings'] = $c_.settings } $obj['timeout'] = $c_.timeout $obj['type'] = $c_.type $obj['resource'] = $c_.resource $obj['createdBy'] = $c_.createdBy.id $obj['createdOn'] = $c_.createdOn $obj['project'] = $ProjectName $obj['collectionUri'] = $CollectionUri [PSCustomObject]$obj } } catch { if ($_.ErrorDetails.Message -match 'NotFoundException') { Write-Warning "Check configuration with ID $Id does not exist, skipping." } else { throw $_ } } } else { Write-Verbose "Calling Invoke-AdoRestMethod with $($params | ConvertTo-Json -Depth 10)" } } catch { throw $_ } } end { Write-Verbose ("Exit: $($MyInvocation.MyCommand.Name)") } } |