Functions/Safes/Get-PASSafe.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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
function Get-PASSafe {
    <#
.SYNOPSIS
Returns safe details from the vault.

.DESCRIPTION
Gets safe by SafeName, by search query string, or, by default will return all safes.

.PARAMETER SafeName
The name of a specific safe to get details of.

.PARAMETER query
Query String for safe search in the vault

.PARAMETER FindAll
Specify to find all safes.
If SafeName or query are not specified, FindAll is the default behaviour.

.PARAMETER TimeoutSec
See Invoke-WebRequest
Specify a timeout value in seconds

.EXAMPLE
Get-PASSafe -SafeName SAFE1

Returns details of "Safe1"

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

    [CmdletBinding(DefaultParameterSetName = "byAll")]
    param(
        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = "byName"
        )]
        [ValidateNotNullOrEmpty()]
        [string]$SafeName,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $false,
            ParameterSetName = "byQuery"
        )]
        [string]$query,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $false,
            ParameterSetName = "byAll"
        )]
        [switch]$FindAll,

        [parameter(
            Mandatory = $false,
            ValueFromPipelineByPropertyName = $false
        )]
        [int]$TimeoutSec
    )

    BEGIN { }#begin

    PROCESS {

        #Create base URL for request
        $URI = "$Script:BaseURI/WebServices/PIMServices.svc/Safes"

        #If SafeName specified
        If ($($PSCmdlet.ParameterSetName) -eq "byName") {

            $returnProperty = "GetSafeResult"

            #Build URL from base URL
            $URI = "$URI/$($SafeName | Get-EscapedString)"

        }

        #If search query specified
        ElseIf ($($PSCmdlet.ParameterSetName) -eq "byQuery") {

            $returnProperty = "SearchSafesResult"

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

            #Create Query String, escaped for inclusion in request URL
            $queryString = $boundParameters | ConvertTo-QueryString

            if ($queryString) {

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

            }

        }

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

            $returnProperty = "GetSafesResult"

        }

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

        If ($result) {

            $result.$returnProperty | Add-ObjectDetail -typename psPAS.CyberArk.Vault.Safe

        }

    }#process

    END { }#end

}