Functions/OrganizationRequest.ps1
|
function Invoke-AzDevOpsOrganizationRequest { param ([string]$Uri, [hashtable]$Headers, [string]$Method = 'Get', [string]$Body) $parameters = @{ Uri = $Uri; Headers = $Headers; Method = $Method; UseBasicParsing = $true; ErrorAction = 'Stop' } if ($Body) { $parameters.Body = $Body } try { $response = Invoke-WebRequest @parameters } catch { $reason = 'RequestFailed' if ($_.Exception -is [Microsoft.PowerShell.Commands.HttpResponseException]) { $statusCode = [int]$_.Exception.Response.StatusCode if ($statusCode -in 401, 403) { $reason = 'PermissionDenied' } elseif ($statusCode -in 404, 410, 429 -or $statusCode -ge 500) { $reason = 'EndpointUnavailable' } } Set-AzDevOpsCollectionStatus -Status Unavailable -ReasonCode $reason throw "Organization evidence request failed ($reason)." } if ($response.Content -match '<html|Sign In') { Set-AzDevOpsCollectionStatus -Status Unavailable -ReasonCode PermissionDenied throw 'Organization evidence request failed (PermissionDenied).' } try { return ConvertFrom-Json -InputObject $response.Content -ErrorAction Stop } catch { Set-AzDevOpsCollectionStatus -Status Unavailable -ReasonCode MalformedResponse throw 'Organization evidence response is not valid JSON (MalformedResponse).' } } function Test-AzDevOpsOrganizationDataType { param ($Data, [string[]]$BooleanProperties, [string[]]$StringProperties, [string[]]$AllowEmptyStringProperties) if ($null -eq $Data) { return } foreach ($property in $BooleanProperties + $StringProperties) { if ($null -eq $Data.$property) { continue } $valid = if ($property -in $BooleanProperties) { $Data.$property -is [bool] } else { $Data.$property -is [string] -and ($property -in $AllowEmptyStringProperties -or -not [string]::IsNullOrWhiteSpace($Data.$property)) } if (-not $valid) { $Data.$property = $null Set-AzDevOpsCollectionStatus -Status Partial -ReasonCode SchemaChanged } } } |