Private/Find-SharedServicesURL.ps1
function Find-SharedServicesURL { <# .SYNOPSIS Find URL details for ISPSS shared services .DESCRIPTION Given a shared services subdomain or URL value, returns details of URLs for available Shared Services. .PARAMETER subdomain The Shared Services subdomain to return service URL values of. .PARAMETER url The Shared Services URL to return service URL values of. .PARAMETER service Specify to return the API URL of a particular service. .EXAMPLE Find-SharedServicesURL -subdomain somedomain .EXAMPLE Find-SharedServicesURL -url https://someotherdomain.cyberark.cloud .EXAMPLE Find-SharedServicesURL -subdomain somedomain -service pcloud .NOTES Pete Maan 2023 #> [CmdletBinding()] Param( [Parameter( Mandatory = $true, ValueFromPipeline = $true, ParameterSetName = 'Subdomain' )] [string]$subdomain, [Parameter( Mandatory = $true, ValueFromPipeline = $true, ParameterSetName = 'URL' )] [string]$url, [Parameter( Mandatory = $false, ValueFromPipeline = $true )] [ValidateSet( 'analytics', 'audit', 'cem', 'cloud_onboarding', 'component_manager', 'flows', 'idaptive_risk_analytics', 'identity_administration', 'identity_compliance', 'identity_user_portal', 'jit', 'pcloud', 'sca', 'secrets_hub', 'secrets_manager', 'session_monitoring' )] [string]$service ) Begin { $PlatformDiscoveryURL = 'https://platform-discovery.cyberark.cloud/api/v2/services/subdomain/' } Process { if ($PSCmdlet.ParameterSetName -eq 'URL') { $URIObject = [System.UriBuilder]::new($url) $subdomain = $URIObject.host.Split('.') | Select-Object -First 1 } $PlatformDiscoveryURL = $PlatformDiscoveryURL + $subdomain $Result = Invoke-PASRestMethod -URI $PlatformDiscoveryURL -Method GET If ($null -ne $Result) { If ($PSBoundParameters.ContainsKey('service')) { $Services = $Result | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name If ($Services -notcontains $Service) { throw "URL for $service API not found" } Else { $Result | Select-Object -ExpandProperty $service } } Else { $Result } } } End {} } |