Functions/Platforms/Get-PASPlatform.ps1

function Get-PASPlatform {
    <#
.SYNOPSIS
Retrieves details of Vault platforms.

.DESCRIPTION
Request platform configuration information from the Vault.

11.1+ can return details of all platforms.
Filters can be used to retrieve a subset of the platforms

For 9.10+, the "PlatformID" parameter must be used to retrieve details of a single
specified platform from the Vault.

The output contained under the "Details" property differs depending
on which method (9.10+ or 11.1+) is used.

.PARAMETER Active
Filter active/inactive platforms

.PARAMETER PlatformType
Filter regular/group platforms

.PARAMETER Search
Filter platform by search pattern

.PARAMETER PlatformID
The unique ID/Name of the platform.

.EXAMPLE
Get-PASPlatform

Return details of all platforms

.EXAMPLE
Get-PASPlatform -Active $true

Get all active platforms

.EXAMPLE
Get-PASPlatform -Active $true -Search "WIN_"

Get active platforms matching search string "WIN_"

.EXAMPLE
Get-PASPlatform -PlatformID "CyberArk"

Get details of specific platform CyberArk

.NOTES
Minimum CyberArk version 9.10
CyberArk version 11.1 required for Active, PlatformType & Search paramters.

.LINK
https://pspas.pspete.dev/commands/Get-PASPlatform
#>


    [CmdletBinding(DefaultParameterSetName = "11_1")]
    param(
        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = "11_1"
        )]
        [boolean]$Active,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = "11_1"
        )]
        [ValidateSet("Regular", "Group")]
        [string]$PlatformType,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = "11_1"
        )]
        [string]$Search,

        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = "legacy"
        )]
        [Alias("Name")]
        [string]$PlatformID
    )

    BEGIN {
        $MinimumVersion = [System.Version]"9.10"
        $RequiredVersion = [System.Version]"11.1"
    }#begin

    PROCESS {

        If ($PSCmdlet.ParameterSetName -eq "11_1") {

            Assert-VersionRequirement -ExternalVersion $Script:ExternalVersion -RequiredVersion $RequiredVersion

            #Create request URL
            $URI = "$Script:BaseURI/API/Platforms"

            #Get Parameters to include in request
            $boundParameters = $PSBoundParameters | Get-PASParameter

            #Create Query String, escaped for inclusion in request URL
            $queryString = ($boundParameters.keys | ForEach-Object {

                    "$_=$($boundParameters[$_] | Get-EscapedString)"

                }) -join '&'

            #Build URL from base URL
            $URI = "$URI`?$queryString"

        }

        ElseIf ($PSCmdlet.ParameterSetName -eq "legacy") {

            Assert-VersionRequirement -ExternalVersion $Script:ExternalVersion -RequiredVersion $MinimumVersion

            #Create request URL
            $URI = "$Script:BaseURI/API/Platforms/$($PlatformID | Get-EscapedString)"

        }

        #Send request to web service
        $result = Invoke-PASRestMethod -Uri $URI -Method GET -WebSession $Script:WebSession

        If ($result) {

            #11.1 returns result under "platforms" property
            If ($result.Platforms) {

                $result = $result | Select-Object -ExpandProperty Platforms |
                Select-Object @{ Name = 'PlatformID'; Expression = { $_.general.id } }, @{ Name = 'Active'; Expression = { $_.general.active } }, @{ Name = 'Details'; Expression = { [pscustomobject]@{
                            "General"                   = $_.general
                            "properties"                = $_.properties
                            "linkedAccounts"            = $_.linkedAccounts
                            "credentialsManagement"     = $_.credentialsManagement
                            "sessionManagement"         = $_.sessionManagement
                            "privilegedAccessWorkflows" = $_.privilegedAccessWorkflows
                        }
                    }
                }

            }

            #Return Results
            $result |

            Add-ObjectDetail -typename "psPAS.CyberArk.Vault.Platform"

        }

    }#process

    END { }#end

}