Functions/Monitoring/Connect-PASPSMSession.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
function Connect-PASPSMSession {
    <#
.SYNOPSIS
Connect to Live PSM Sessions

.DESCRIPTION
Returns connection data necessary to monitor an active PSM session.

.PARAMETER SessionId
The unique ID of the PSM Live Session.

.PARAMETER ConnectionMethod
The expected parameters to be returned, either RDP or PSMGW.

.EXAMPLE
Connect-PASPSMSession -LiveSessionId $SessionUUID -ConnectionMethod RDP

Returns parameters to connect to Live PSM Session via RDP.

.EXAMPLE
Connect-PASPSMSession -LiveSessionId $SessionUUID -ConnectionMethod PSMGW

Returns parameters to connect to Live PSM Session via HTML5 GW.

.INPUTS

.OUTPUTS

.NOTES
Minimum CyberArk Version 10.5
#>

    [CmdletBinding()]
    param(
        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true
        )]
        [ValidateNotNullOrEmpty()]
        [string]$SessionId,

        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true
        )]
        [ValidateSet("RDP", "PSMGW")]
        [string]$ConnectionMethod
    )

    BEGIN {
        $MinimumVersion = [System.Version]"10.5"
    }#begin

    PROCESS {

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

        #Create URL for Request
        $URI = "$($Script:BaseURI)/API/LiveSessions/$($SessionId | Get-EscapedString)/monitor"

        $ThisSession = $Script:WebSession

        #if a connection method is specified
        If ($PSBoundParameters.ContainsKey("ConnectionMethod")) {

            #The information needs to passed in the header
            if ($PSBoundParameters["ConnectionMethod"] -eq "RDP") {

                #RDP accept "application/json" response
                $Accept = "application/json"

            } elseif ($PSBoundParameters["ConnectionMethod"] -eq "PSMGW") {

                #PSMGW accept * / * response
                $Accept = "* / *"

            }

            #add detail to header
            $ThisSession.Headers["Accept"] = $Accept

        }

        #send request to PAS web service
        $result = Invoke-PASRestMethod -Uri $URI -Method GET -WebSession $ThisSession

        If ($result) {

            $result

        } #process

    }

    END { }#end

}