Functions/Safes/Get-PASSafe.ps1
# .ExternalHelp psPAS-help.xml function Get-PASSafe { [CmdletBinding(DefaultParameterSetName = 'Gen2')] param( [parameter( Mandatory = $false, ValueFromPipelinebyPropertyName = $true, ParameterSetName = 'Gen2' )] [ValidateNotNullOrEmpty()] [string]$search, [parameter( Mandatory = $false, ValueFromPipelinebyPropertyName = $true, ParameterSetName = 'Gen2' )] [ValidateSet('asc', 'desc')] [string]$sort, [parameter( Mandatory = $false, ValueFromPipelinebyPropertyName = $true, ParameterSetName = 'Gen2' )] [parameter( Mandatory = $false, ValueFromPipelinebyPropertyName = $true, ParameterSetName = 'Gen2-byName' )] [ValidateNotNullOrEmpty()] [Boolean]$includeAccounts, [parameter( Mandatory = $false, ValueFromPipelinebyPropertyName = $true, ParameterSetName = 'Gen2' )] [ValidateNotNullOrEmpty()] [Boolean]$extendedDetails, [parameter( Mandatory = $true, ValueFromPipelinebyPropertyName = $true, ParameterSetName = 'Gen1-byName' )] [parameter( Mandatory = $true, ValueFromPipelinebyPropertyName = $true, ParameterSetName = 'Gen2-byName' )] [ValidateNotNullOrEmpty()] [string]$SafeName, [parameter( Mandatory = $false, ValueFromPipelinebyPropertyName = $true, ParameterSetName = 'Gen2-byName' )] [ValidateNotNullOrEmpty()] [Boolean]$useCache, [parameter( Mandatory = $false, ValueFromPipelinebyPropertyName = $false, ParameterSetName = 'Gen1-byQuery' )] [string]$query, [parameter( Mandatory = $true, ValueFromPipelinebyPropertyName = $false, ParameterSetName = 'Gen1-byAll' )] [switch]$FindAll, [parameter( Mandatory = $true, ValueFromPipelinebyPropertyName = $true, ParameterSetName = 'Gen1-byName' )] [parameter( Mandatory = $true, ValueFromPipelinebyPropertyName = $false, ParameterSetName = 'Gen1-byAll' )] [switch]$UseGen1API, [parameter( Mandatory = $false, ValueFromPipelineByPropertyName = $false )] [int]$TimeoutSec ) BEGIN { $typeName = 'psPAS.CyberArk.Vault.Safe' $Limit = 25 #default if you call the API with no value }#begin PROCESS { $boundParameters = $PSBoundParameters | Get-PASParameter #Create Query String, escaped for inclusion in request URL $queryString = $boundParameters | ConvertTo-QueryString switch ($PSCmdlet.ParameterSetName) { 'Gen2' { #assign new type name $typeName = "$typeName.Gen2" switch ($PSBoundParameters) { ( { $PSItem.ContainsKey('extendedDetails') }) { #check required version Assert-VersionRequirement -RequiredVersion 12.1 If ($extendedDetails -eq $false) { #assign new type name $typeName = "$typeName.Name" } } default { Assert-VersionRequirement -RequiredVersion 12.0 } } $returnProperty = 'value' #define base URL $URI = "$Script:BaseURI/API/Safes" If ($null -ne $queryString) { #Build URL from base URL $URI = "$URI`?$queryString" } break } 'Gen2-ByName' { #assign new type name $typeName = "$typeName.Gen2" Assert-VersionRequirement -RequiredVersion 12.2 #define base URL $URI = "$Script:BaseURI/API/Safes/$($SafeName | Get-EscapedString)" $boundParameters = $PSBoundParameters | Get-PASParameter -ParametersToRemove SafeName #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 } ( { $PSItem -match '^Gen1-' } ) { #check required version Assert-VersionRequirement -MaximumVersion 12.3 #Create URL for Gen1 API requests $URI = "$Script:BaseURI/WebServices/PIMServices.svc/Safes" } 'Gen1-byName' { $returnProperty = 'GetSafeResult' #Build URL from base URL $URI = "$URI/$($SafeName | Get-EscapedString)" break } 'Gen1-byQuery' { $returnProperty = 'SearchSafesResult' if ($null -ne $queryString) { #Build URL from base URL $URI = "$URI`?$queryString" } break } 'Gen1-byAll' { $returnProperty = 'GetSafesResult' break } } #send request to web service $result = Invoke-PASRestMethod -Uri $URI -Method GET -WebSession $Script:WebSession -TimeoutSec $TimeoutSec switch ($PSCmdlet.ParameterSetName) { ( { $PSItem -match '^Gen1-' } ) { $Total = $result.Total If ($Total -gt 0) { $Safes = [Collections.Generic.List[Object]]::New(($result.$returnProperty)) For ( $Offset = $Limit ; $Offset -lt $Total ; $Offset += $Limit ) { $Null = $Safes.AddRange((Invoke-PASRestMethod -Uri "$URI`?limit=$Limit&OffSet=$Offset$searchQuery" -Method GET -WebSession $Script:WebSession -TimeoutSec $TimeoutSec).Safes) } $return = $Safes } ElseIf ($null -ne $result) { $return = $result.$returnProperty } break } 'Gen2' { #return list $return = $Result | Get-NextLink -TimeoutSec $TimeoutSec break } default { #return result (Gen2-ByName) $return = $Result break } } if ($null -ne $return) { #Return Results $return | Add-ObjectDetail -typename $typeName } }#process END { }#end } |