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

}