Functions/Platforms/Get-PASPlatform.ps1

# .ExternalHelp psPAS-help.xml
function Get-PASPlatform {
    [CmdletBinding(DefaultParameterSetName = "targets")]
    param(
        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = "platforms"
        )]
        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = "targets"
        )]
        [boolean]$Active,

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

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

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

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = "dependents"
        )]
        [switch]$DependentPlatform,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = "groups"
        )]
        [switch]$GroupPlatform,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = "rotationalGroups"
        )]
        [switch]$RotationalGroup,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = "targets"
        )]
        [string]$SystemType,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = "targets"
        )]
        [boolean]$PeriodicVerify,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = "targets"
        )]
        [boolean]$ManualVerify,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = "targets"
        )]
        [boolean]$PeriodicChange,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = "targets"
        )]
        [boolean]$ManualChange,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = "targets"
        )]
        [boolean]$AutomaticReconcile,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = "targets"
        )]
        [boolean]$ManualReconcile

    )

    BEGIN {

    }#begin

    PROCESS {

        switch ($PSCmdlet.ParameterSetName) {

            "platforms" {

                Assert-VersionRequirement -RequiredVersion 11.1

                #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 | ConvertTo-QueryString

                If ($null -ne $queryString) {
                    #Build URL from base URL
                    $URI = "$URI`?$queryString"
                }

                break

            }

            "platform-details" {

                Assert-VersionRequirement -RequiredVersion 9.10

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

                break

            }

            "targets" {

                Assert-VersionRequirement -RequiredVersion 11.4

                $URI = "$Script:BaseURI/API/Platforms/$($PSCmdlet.ParameterSetName)"

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

                $queryString = $boundParameters | ConvertTo-FilterString | ConvertTo-QueryString

                If ($null -ne $queryString) {

                    $URI = "$URI`?$queryString"

                }

                break

            }

            default {

                Assert-VersionRequirement -RequiredVersion 11.4

                $URI = "$Script:BaseURI/API/Platforms/$($PSCmdlet.ParameterSetName)"

                break

            }

        }

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

        If ($null -ne $result) {

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

                $result = $result | Select-Object -ExpandProperty Platforms

                switch ($PSCmdlet.ParameterSetName) {

                    "11_1" {
                        $result = $result |
                            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
                                    }
                                }
                            }

                        break
                    }

                    "targets" {
                        $result = $result |
                            Select-Object PlatformID, Active, @{ Name = 'Details'; Expression = { [pscustomobject]@{
                                        "ID"                          = $_.ID
                                        "Name"                        = $_.Name
                                        "SystemType"                  = $_.SystemType
                                        "AllowedSafes"                = $_.AllowedSafes
                                        "CredentialsManagementPolicy" = $_.CredentialsManagementPolicy
                                        "PrivilegedAccessWorkflows"   = $_.PrivilegedAccessWorkflows
                                        "PrivilegedSessionManagement" = $_.PrivilegedSessionManagement
                                    }
                                }
                            }
                        break
                    }

                    "groups" {
                        $result = $result |
                            Select-Object PlatformID, Active, @{ Name = 'Details'; Expression = { [pscustomobject]@{
                                        "ID"   = $_.ID
                                        "Name" = $_.Name
                                    }
                                }
                            }
                        break
                    }

                    "dependents" {
                        $result = $result |
                            Select-Object PlatformID, @{ Name = 'Details'; Expression = { [pscustomobject]@{
                                        "ID"                            = $_.ID
                                        "Name"                          = $_.Name
                                        "NumberOfLinkedTargetPlatforms" = $_.NumberOfLinkedTargetPlatforms
                                        "CredentialsManagementPolicy"   = $_.CredentialsManagementPolicy
                                    }
                                }
                            }
                        break
                    }

                    "rotationalGroups" {
                        $result = $result |
                            Select-Object PlatformID, Active, @{ Name = 'Details'; Expression = { [pscustomobject]@{
                                        "ID"          = $_.ID
                                        "Name"        = $_.Name
                                        "GracePeriod" = $_.GracePeriod
                                    }
                                }
                            }
                        break
                    }

                }

            }

            #Return Results
            $result |

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

        }

    }#process

    END { }#end

}