├── LICENSE.md ├── README.md └── VpasModule ├── 14.4.1 ├── README.md ├── VpasModule.psd1 ├── VpasModule.psm1 ├── private │ ├── Debug-VPASTroubleshootingHelper.ps1 │ ├── Get-VPASAccountGroupIDHelper.ps1 │ ├── Get-VPASAccountIDHelper.ps1 │ ├── Get-VPASAccountRequestIDHelper.ps1 │ ├── Get-VPASActiveSessionIDHelper.ps1 │ ├── Get-VPASApplicationAuthIDHelper.ps1 │ ├── Get-VPASAuthenticationMethodIDHelper.ps1 │ ├── Get-VPASCMConnectorComponentIDHelper.ps1 │ ├── Get-VPASCMConnectorIDHelper.ps1 │ ├── Get-VPASCMConnectorPoolIDHelper.ps1 │ ├── Get-VPASCurrentEPVUserDetailsHelper.ps1 │ ├── Get-VPASDPAPolicyIDHelper.ps1 │ ├── Get-VPASDPAStrongAccountIDHelper.ps1 │ ├── Get-VPASDirectoryMappingIDHelper.ps1 │ ├── Get-VPASDiscoveredAccountIDHelper.ps1 │ ├── Get-VPASEPVGroupIDHelper.ps1 │ ├── Get-VPASEPVUserIDHelper.ps1 │ ├── Get-VPASGroupPlatformIDHelper.ps1 │ ├── Get-VPASIncomingRequestIDHelper.ps1 │ ├── Get-VPASPlatformIDHelper.ps1 │ ├── Get-VPASRecordingIDHelper.ps1 │ ├── Get-VPASRoleIDIdentityHelper.ps1 │ ├── Get-VPASRotationalPlatformIDHelper.ps1 │ ├── Get-VPASSecurityQuestionIDIdentityHelper.ps1 │ ├── Get-VPASSession.ps1 │ ├── Get-VPASUsagePlatformIDHelper.ps1 │ ├── Get-VPASUserIDIdentityHelper.ps1 │ ├── Test-VPASHashtableKeysHelper.ps1 │ ├── Write-Iterate.ps1 │ ├── Write-VPASExampleHelper.ps1 │ ├── Write-VPASExportCSV.ps1 │ ├── Write-VPASLogger.ps1 │ ├── Write-VPASTextRecorder.ps1 │ ├── Write-VPASTypewriter.ps1 │ └── vpasai.xml └── public │ ├── Add-VPASAccount.ps1 │ ├── Add-VPASAccountGroup.ps1 │ ├── Add-VPASAccountRequest.ps1 │ ├── Add-VPASAccountToAccountGroup.ps1 │ ├── Add-VPASAllowedIP.ps1 │ ├── Add-VPASAllowedReferrer.ps1 │ ├── Add-VPASApplication.ps1 │ ├── Add-VPASApplicationAuthentication.ps1 │ ├── Add-VPASAuthenticationMethod.ps1 │ ├── Add-VPASBulkAccounts.ps1 │ ├── Add-VPASBulkSafeMembers.ps1 │ ├── Add-VPASBulkSafes.ps1 │ ├── Add-VPASEPVGroup.ps1 │ ├── Add-VPASEPVUser.ps1 │ ├── Add-VPASIdentityRole.ps1 │ ├── Add-VPASIdentitySecurityQuestionAdmin.ps1 │ ├── Add-VPASIdentityUserSecurityQuestions.ps1 │ ├── Add-VPASMemberEPVGroup.ps1 │ ├── Add-VPASSafe.ps1 │ ├── Add-VPASSafeMember.ps1 │ ├── Approve-VPASIncomingRequest.ps1 │ ├── Confirm-VPASBulkFile.ps1 │ ├── Copy-VPASGroupPlatform.ps1 │ ├── Copy-VPASPlatform.ps1 │ ├── Copy-VPASRotationalPlatform.ps1 │ ├── Copy-VPASUsagePlatform.ps1 │ ├── Deny-VPASIncomingRequest.ps1 │ ├── Disable-VPASCustomTheme.ps1 │ ├── Disable-VPASEPVUser.ps1 │ ├── Disable-VPASGroupPlatform.ps1 │ ├── Disable-VPASPlatform.ps1 │ ├── Disable-VPASRotationalPlatform.ps1 │ ├── Enable-VPASCustomTheme.ps1 │ ├── Enable-VPASEPVUser.ps1 │ ├── Enable-VPASGroupPlatform.ps1 │ ├── Enable-VPASPlatform.ps1 │ ├── Enable-VPASRotationalPlatform.ps1 │ ├── Export-VPASPlatform.ps1 │ ├── Find-VPASTargetValue.ps1 │ ├── Get-VPASAccountActivity.ps1 │ ├── Get-VPASAccountCompliance.ps1 │ ├── Get-VPASAccountDetails.ps1 │ ├── Get-VPASAccountDetailsExtended.ps1 │ ├── Get-VPASAccountGroupMembers.ps1 │ ├── Get-VPASAccountGroups.ps1 │ ├── Get-VPASAccountPrivateSSHKey.ps1 │ ├── Get-VPASAccountRequestDetails.ps1 │ ├── Get-VPASActiveSessionActivities.ps1 │ ├── Get-VPASActiveSessionProperties.ps1 │ ├── Get-VPASActiveSessions.ps1 │ ├── Get-VPASAllAccountRequests.ps1 │ ├── Get-VPASAllAccounts.ps1 │ ├── Get-VPASAllActiveSessions.ps1 │ ├── Get-VPASAllApplications.ps1 │ ├── Get-VPASAllConnectionComponents.ps1 │ ├── Get-VPASAllCustomThemes.ps1 │ ├── Get-VPASAllDirectories.ps1 │ ├── Get-VPASAllDiscoveredAccounts.ps1 │ ├── Get-VPASAllEPVGroups.ps1 │ ├── Get-VPASAllEPVUsers.ps1 │ ├── Get-VPASAllGroupPlatforms.ps1 │ ├── Get-VPASAllIncomingRequests.ps1 │ ├── Get-VPASAllPSMServers.ps1 │ ├── Get-VPASAllPSMSessions.ps1 │ ├── Get-VPASAllPlatforms.ps1 │ ├── Get-VPASAllRotationalPlatforms.ps1 │ ├── Get-VPASAllSafes.ps1 │ ├── Get-VPASAllTargetPlatforms.ps1 │ ├── Get-VPASAllUsagePlatforms.ps1 │ ├── Get-VPASAllowedIPs.ps1 │ ├── Get-VPASAllowedReferrer.ps1 │ ├── Get-VPASApplicationAuthentications.ps1 │ ├── Get-VPASApplicationDetails.ps1 │ ├── Get-VPASAuthenticationMethods.ps1 │ ├── Get-VPASBulkTemplateFiles.ps1 │ ├── Get-VPASCMAllComponents.ps1 │ ├── Get-VPASCMAllConnectorComponents.ps1 │ ├── Get-VPASCMAllConnectorPools.ps1 │ ├── Get-VPASCMAllConnectors.ps1 │ ├── Get-VPASCMComponentLogList.ps1 │ ├── Get-VPASCMComponentLogs.ps1 │ ├── Get-VPASCMConnectorComponentDetails.ps1 │ ├── Get-VPASCMConnectorDetails.ps1 │ ├── Get-VPASCMConnectorPoolDetails.ps1 │ ├── Get-VPASCMConnectors.ps1 │ ├── Get-VPASCurrentCustomTheme.ps1 │ ├── Get-VPASCurrentEPVUserDetails.ps1 │ ├── Get-VPASCustomTheme.ps1 │ ├── Get-VPASDPAAllPolicies.ps1 │ ├── Get-VPASDPAAllStrongAccountSets.ps1 │ ├── Get-VPASDPAAllStrongAccounts.ps1 │ ├── Get-VPASDPAPolicies.ps1 │ ├── Get-VPASDPAPolicyDetails.ps1 │ ├── Get-VPASDPASettings.ps1 │ ├── Get-VPASDPAStrongAccountDetails.ps1 │ ├── Get-VPASDPAStrongAccounts.ps1 │ ├── Get-VPASDirectoryDetails.ps1 │ ├── Get-VPASDirectoryMappingDetails.ps1 │ ├── Get-VPASDirectoryMappings.ps1 │ ├── Get-VPASDiscoveredAccounts.ps1 │ ├── Get-VPASDiscoveredAccountsDependencies.ps1 │ ├── Get-VPASEPVGroupDetails.ps1 │ ├── Get-VPASEPVUserDetails.ps1 │ ├── Get-VPASEPVUserDetailsSearch.ps1 │ ├── Get-VPASEPVUserTypes.ps1 │ ├── Get-VPASEmptyPlatforms.ps1 │ ├── Get-VPASEmptySafes.ps1 │ ├── Get-VPASGroupPlatformDetails.ps1 │ ├── Get-VPASIdentityAdminSecurityQuestion.ps1 │ ├── Get-VPASIdentityAllAdminSecurityQuestions.ps1 │ ├── Get-VPASIdentityAllRoles.ps1 │ ├── Get-VPASIdentityAllUsers.ps1 │ ├── Get-VPASIdentityCurrentUserDetails.ps1 │ ├── Get-VPASIdentityCurrentUserSecurityQuestions.ps1 │ ├── Get-VPASIdentityRoleDetails.ps1 │ ├── Get-VPASIdentityRoles.ps1 │ ├── Get-VPASIdentityTenantDetails.ps1 │ ├── Get-VPASIdentityUserDetails.ps1 │ ├── Get-VPASIdentityUserSecurityQuestions.ps1 │ ├── Get-VPASIncomingRequestDetails.ps1 │ ├── Get-VPASPSMSessionActivities.ps1 │ ├── Get-VPASPSMSessionDetails.ps1 │ ├── Get-VPASPSMSessionProperties.ps1 │ ├── Get-VPASPSMSessions.ps1 │ ├── Get-VPASPSMSettingsByPlatformID.ps1 │ ├── Get-VPASPasswordHistory.ps1 │ ├── Get-VPASPasswordValue.ps1 │ ├── Get-VPASPlatformDetails.ps1 │ ├── Get-VPASPlatformDetailsSearch.ps1 │ ├── Get-VPASRotationalPlatformDetails.ps1 │ ├── Get-VPASSQLAccounts.ps1 │ ├── Get-VPASSQLPlatforms.ps1 │ ├── Get-VPASSQLSafes.ps1 │ ├── Get-VPASSafeDetails.ps1 │ ├── Get-VPASSafeMemberSearch.ps1 │ ├── Get-VPASSafeMembers.ps1 │ ├── Get-VPASSafes.ps1 │ ├── Get-VPASSafesByPlatformID.ps1 │ ├── Get-VPASSearchProperties.ps1 │ ├── Get-VPASSpecificAuthenticationMethod.ps1 │ ├── Get-VPASSystemComponents.ps1 │ ├── Get-VPASSystemHealth.ps1 │ ├── Get-VPASUsagePlatformDetails.ps1 │ ├── Get-VPASVaultDetails.ps1 │ ├── Get-VPASVaultVersion.ps1 │ ├── Import-VPASConnectionComponent.ps1 │ ├── Import-VPASPlatform.ps1 │ ├── Invoke-VPASAccountPasswordAction.ps1 │ ├── Invoke-VPASActivePSMSessionAction.ps1 │ ├── Invoke-VPASAuditSafeTest.ps1 │ ├── Invoke-VPASCentralCredentialProvider.ps1 │ ├── Invoke-VPASCredentialProvider.ps1 │ ├── Invoke-VPASHealthCheck.ps1 │ ├── Invoke-VPASMetricsAccounts.ps1 │ ├── Invoke-VPASMetricsCPM.ps1 │ ├── Invoke-VPASMetricsPSM.ps1 │ ├── Invoke-VPASMetricsPlatforms.ps1 │ ├── Invoke-VPASMetricsProviders.ps1 │ ├── Invoke-VPASQuery.ps1 │ ├── Invoke-VPASReporting.ps1 │ ├── Invoke-VPASUserLicenseReport.ps1 │ ├── New-VPASDPASetupScript.ps1 │ ├── New-VPASIdentityGenerateUserPassword.ps1 │ ├── New-VPASPSMSession.ps1 │ ├── New-VPASToken.ps1 │ ├── Remove-VPASAccount.ps1 │ ├── Remove-VPASAccountFromAccountGroup.ps1 │ ├── Remove-VPASAccountRequest.ps1 │ ├── Remove-VPASAllDiscoveredAccounts.ps1 │ ├── Remove-VPASApplication.ps1 │ ├── Remove-VPASApplicationAuthentication.ps1 │ ├── Remove-VPASAuthenticationMethod.ps1 │ ├── Remove-VPASCustomTheme.ps1 │ ├── Remove-VPASDPAPolicy.ps1 │ ├── Remove-VPASDPAStrongAccount.ps1 │ ├── Remove-VPASDirectory.ps1 │ ├── Remove-VPASEPVGroup.ps1 │ ├── Remove-VPASEPVUser.ps1 │ ├── Remove-VPASGroupPlatform.ps1 │ ├── Remove-VPASIdentityAdminSecurityQuestion.ps1 │ ├── Remove-VPASIdentityRole.ps1 │ ├── Remove-VPASLinkedAccount.ps1 │ ├── Remove-VPASMemberEPVGroup.ps1 │ ├── Remove-VPASPlatform.ps1 │ ├── Remove-VPASRotationalPlatform.ps1 │ ├── Remove-VPASSafe.ps1 │ ├── Remove-VPASSafeMember.ps1 │ ├── Remove-VPASToken.ps1 │ ├── Remove-VPASUsagePlatform.ps1 │ ├── Reset-VPASEPVUserPassword.ps1 │ ├── Reset-VPASIdentityUserSecurityQuestions.ps1 │ ├── Set-VPASAuditSafeTest.ps1 │ ├── Set-VPASIdentityUserState.ps1 │ ├── Set-VPASIdentityUserStatus.ps1 │ ├── Set-VPASLinkedAccount.ps1 │ ├── Set-VPASSQLConnectionDetails.ps1 │ ├── Test-VPASIdentityUserLocked.ps1 │ ├── Test-VPASSQLConnectionDetails.ps1 │ ├── Unlock-VPASExclusiveAccount.ps1 │ ├── Update-VPASAccountFields.ps1 │ ├── Update-VPASAuthenticationMethod.ps1 │ ├── Update-VPASCustomThemeDraft.ps1 │ ├── Update-VPASEPVGroup.ps1 │ ├── Update-VPASEPVUser.ps1 │ ├── Update-VPASIdentityCurrentUserPassword.ps1 │ ├── Update-VPASIdentityRole.ps1 │ ├── Update-VPASPSMSettingsByPlatformID.ps1 │ ├── Update-VPASSafe.ps1 │ ├── Update-VPASSafeMember.ps1 │ ├── Watch-VPASActivePSMSession.ps1 │ └── Write-VPASOutput.ps1 ├── CHANGELOG.md ├── LICENSE.md └── README.md /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 - 2025 Vadim Melamed 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 |

6 | A simplified PowerShell module to interact with CyberArk Web Services for Self Hosted, PrivilegeCloud Standard, and SharedServices (ISPSS) solutions as well as Identity/DPA/ConnectorManagement API suite 7 |

8 | 9 |

10 | Creator: Vadim Melamed 11 |
12 | Email: vpasmodule@gmail.com 13 |

14 | 15 |
16 | 17 | | PSGallery | CodeFactor | 18 | |---------------------------|---------------------------| 19 | | [![downloads][]][psgallery-site] | [![codefactor][]][codefactor-site]| 20 | 21 | [downloads]:https://img.shields.io/powershellgallery/dt/vpasmodule.svg?color=darkblue 22 | [psgallery-site]:https://www.powershellgallery.com/packages/VpasModule 23 | [codefactor-site]:https://www.codefactor.io/repository/github/vmelamed5/cyberark 24 | [codefactor]:https://www.codefactor.io/repository/github/vmelamed5/cyberark/badge 25 | 26 |
27 | 28 | ## Installation 29 | 30 | Install the module via [PowershellGallery](https://www.powershellgallery.com/packages/VpasModule/) 31 | 32 | ```powershell 33 | Install-Module VpasModule -scope CurrentUser 34 | ``` 35 | 36 | ## Usage 37 | 38 | ```powershell 39 | # Step1) import vpasmodule 40 | Import-Module vpasmodule 41 | 42 | # Step2) Retrieve cyberark login token via New-VPASToken 43 | New-VPASToken -PVWA "MyPVWAServer.com" -AuthType cyberark 44 | 45 | # Step3) Run desired API calls 46 | $SafeDetails = Get-VPASSafes -searchQuery "TestSafe" 47 | $AllAccounts = Get-VPASAllAccounts 48 | 49 | # Step4: Invalidate cyberark login token via Remove-VPASToken 50 | Remove-VPASToken 51 | ``` 52 | 53 | ## Supported Versions 54 | ``` 55 | > v10.10 - SelfHosted 56 | > v11.X - SelfHosted 57 | > v12.X - SelfHosted 58 | > v13.X - SelfHosted + PrivilegeCloud 59 | > v14.X - SelfHosted + PrivilegeCloud + Identity 60 | ``` 61 | ``` 62 | > v14.4.1 (Current): 63 | - SelfHosted 64 | - PrivilegeCloudStandard 65 | - SharedServices (ISPSS) 66 | - Identity (WORK IN PROGRESS) 67 | - ConnectorManagement (WORK IN PROGRESS) 68 | - DynamicPrivilegedAccess (WORK IN PROGRESS) 69 | ``` 70 | 71 | ## Documentation 72 | Find version specific README.md inside specific vpasmodule versions for more documentation on function syntax, examples, usages, etc.\ 73 | \ 74 | Please visit [VpasModule Website](https://vpasmodule.com/index.html) to stay up to date with any updates, changes, and various other features 75 | 76 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/VpasModule.psd1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vmelamed5/CyberArk/fc20089073dc83206b16c6754c5cd479809d2a62/VpasModule/14.4.1/VpasModule.psd1 -------------------------------------------------------------------------------- /VpasModule/14.4.1/VpasModule.psm1: -------------------------------------------------------------------------------- 1 | [CmdletBinding()] 2 | $ModuleRoot = Split-Path $MyInvocation.MyCommand.Path 3 | $folders = 'Classes', 'Includes', 'Internal', 'Private', 'Public', 'Bin' 4 | foreach ($folder in $folders) 5 | { 6 | $root = Join-Path -Path $PSScriptRoot -ChildPath $folder 7 | if (Test-Path -Path $root) 8 | { 9 | Write-Verbose -Message "Importing files from [$folder]..." 10 | $files = Get-ChildItem -Path $root -Filter '*.ps1' -Recurse | 11 | Where-Object Name -notlike '*.Tests.ps1' 12 | foreach ($file in $files) 13 | { 14 | Write-Verbose -Message "Dot sourcing [$($file.BaseName)]..." 15 | . $file.FullName 16 | } 17 | } 18 | } 19 | Write-Verbose -Message 'Exporting Public functions...' 20 | $functions = Get-ChildItem -Path "$PSScriptRoot\Public" -Filter '*.ps1' 21 | Export-ModuleMember -Function $functions.BaseName -alias * -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Get-VPASCMConnectorComponentIDHelper.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | GET CONNECTOR MANAGEMENT CONNECTOR COMPONENT ID 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | HELPER FUNCTION TO RETRIEVE CONNECTOR IDS FROM CONNECTOR MANAGEMENT 7 | #> 8 | function Get-VPASCMConnectorComponentIDHelper{ 9 | [OutputType([bool],'System.Int32')] 10 | [CmdletBinding()] 11 | Param( 12 | 13 | [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=0)] 14 | [String]$SearchQuery, 15 | 16 | [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=1)] 17 | [String]$ConnectorID, 18 | 19 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=2)] 20 | [hashtable]$token 21 | ) 22 | 23 | Begin{ 24 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 25 | $CommandName = $MyInvocation.MyCommand.Name 26 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND -Helper 27 | } 28 | Process{ 29 | try{ 30 | if($SubDomain -eq "N/A"){ 31 | Write-VPASOutput -str "SelfHosted + PriviledgeCloud Standard solutions do not support this API Call, returning false" -type E 32 | $log = Write-VPASTextRecorder -inputval "SelfHosted + PrivilegeCloud Standard solutions do not support this API Call, returning false" -token $token -LogType MISC 33 | $log = Write-VPASTextRecorder -inputval $false -token $token -LogType RETURN 34 | return -1 35 | } 36 | 37 | Write-Verbose "CONSTRUCTING SEARCH STRING TO QUERY CONNECTOR MANAGEMENT" 38 | $log = Write-VPASTextRecorder -inputval "SEARCHING FOR: $SearchQuery" -token $token -LogType MISC -Helper 39 | 40 | write-verbose "MAKING API CALL TO CYBERARK" 41 | $uri = "https://$SubDomain.connectormanagement.cyberark.cloud/api/connectors/$ConnectorID/components" 42 | Write-Verbose "CONSTRUCTING URI: $uri" 43 | 44 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI 45 | $log = Write-VPASTextRecorder -inputval "GET" -token $token -LogType METHOD 46 | 47 | if($sessionval){ 48 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" -WebSession $sessionval 49 | } 50 | else{ 51 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" 52 | } 53 | $log = Write-VPASTextRecorder -inputval $response -token $token -LogType RETURNARRAY 54 | 55 | $output = -1 56 | foreach($rec in $response.components){ 57 | $recComponentID = $rec.componentId 58 | $recAcronym = $rec.acronym 59 | 60 | if($recAcronym -eq $SearchQuery){ 61 | $output = $recComponentID 62 | Write-Verbose "FOUND $SearchQuery : TARGET ENTRY FOUND, RETURNING COMPONENT ID" 63 | $logoutput = $rec | ConvertTo-Json | ConvertFrom-Json 64 | $log = Write-VPASTextRecorder -inputval $logoutput -token $token -LogType RETURN -Helper 65 | return $output 66 | } 67 | Write-Verbose "FOUND $recComponentID : NOT TARGET ENTRY (SKIPPING)" 68 | } 69 | Write-Verbose "CAN NOT FIND TARGET ENTRY, RETURNING -1" 70 | $log = Write-VPASTextRecorder -inputval "CAN NOT FIND TARGET ENTRY" -token $token -LogType MISC -Helper 71 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 72 | return $output 73 | }catch{ 74 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 75 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 76 | Write-Verbose "FAILED TO RETRIEVE CONNECTOR MANAGEMENT CONNECTOR COMPONENTS" 77 | Write-VPASOutput -str $_ -type E 78 | return $false 79 | } 80 | } 81 | End{ 82 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Get-VPASCMConnectorIDHelper.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | GET CONNECTOR MANAGEMENT CONNECTOR ID 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | HELPER FUNCTION TO RETRIEVE CONNECTOR IDS FROM CONNECTOR MANAGEMENT 7 | #> 8 | function Get-VPASCMConnectorIDHelper{ 9 | [OutputType([bool],'System.Int32')] 10 | [CmdletBinding()] 11 | Param( 12 | 13 | [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=0)] 14 | [String]$SearchQuery, 15 | 16 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=1)] 17 | [hashtable]$token 18 | ) 19 | 20 | Begin{ 21 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 22 | $CommandName = $MyInvocation.MyCommand.Name 23 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND -Helper 24 | } 25 | Process{ 26 | try{ 27 | if($SubDomain -eq "N/A"){ 28 | Write-VPASOutput -str "SelfHosted + PriviledgeCloud Standard solutions do not support this API Call, returning false" -type E 29 | $log = Write-VPASTextRecorder -inputval "SelfHosted + PrivilegeCloud Standard solutions do not support this API Call, returning false" -token $token -LogType MISC 30 | $log = Write-VPASTextRecorder -inputval $false -token $token -LogType RETURN 31 | return -1 32 | } 33 | 34 | Write-Verbose "CONSTRUCTING SEARCH STRING TO QUERY CONNECTOR MANAGEMENT" 35 | $log = Write-VPASTextRecorder -inputval "SEARCHING FOR: $SearchQuery" -token $token -LogType MISC -Helper 36 | 37 | write-verbose "MAKING API CALL TO CYBERARK" 38 | $uri = "https://$SubDomain.connectormanagement.cyberark.cloud/api/connectors" 39 | Write-Verbose "CONSTRUCTING URI: $uri" 40 | 41 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI 42 | $log = Write-VPASTextRecorder -inputval "GET" -token $token -LogType METHOD 43 | 44 | if($sessionval){ 45 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" -WebSession $sessionval 46 | } 47 | else{ 48 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" 49 | } 50 | $log = Write-VPASTextRecorder -inputval $response -token $token -LogType RETURNARRAY 51 | 52 | $output = -1 53 | foreach($rec in $response.connectors){ 54 | $recConnectorID = $rec.connectorId 55 | $recHostname = $rec.host.hostname 56 | $recPublicIP = $rec.host.publicIP 57 | $recPrivateIP = $rec.host.privateIp 58 | 59 | if($recHostname -eq $SearchQuery -or $recPublicIP -eq $SearchQuery -or $recPrivateIP -eq $SearchQuery){ 60 | $output = $recConnectorID 61 | Write-Verbose "FOUND $SearchQuery : TARGET ENTRY FOUND, RETURNING CONNECTOR ID" 62 | $logoutput = $rec | ConvertTo-Json | ConvertFrom-Json 63 | $log = Write-VPASTextRecorder -inputval $logoutput -token $token -LogType RETURN -Helper 64 | return $output 65 | } 66 | Write-Verbose "FOUND $recConnectorID : NOT TARGET ENTRY (SKIPPING)" 67 | } 68 | Write-Verbose "CAN NOT FIND TARGET ENTRY, RETURNING -1" 69 | $log = Write-VPASTextRecorder -inputval "CAN NOT FIND TARGET ENTRY" -token $token -LogType MISC -Helper 70 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 71 | return $output 72 | }catch{ 73 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 74 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 75 | Write-Verbose "FAILED TO RETRIEVE CONNECTOR MANAGEMENT CONNECTORS" 76 | Write-VPASOutput -str $_ -type E 77 | return $false 78 | } 79 | } 80 | End{ 81 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Get-VPASCMConnectorPoolIDHelper.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | GET CONNECTOR MANAGEMENT CONNECTOR POOL ID 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | HELPER FUNCTION TO RETRIEVE CONNECTOR POOL IDS FROM CONNECTOR MANAGEMENT 7 | #> 8 | function Get-VPASCMConnectorPoolIDHelper{ 9 | [OutputType([bool],'System.Int32')] 10 | [CmdletBinding()] 11 | Param( 12 | 13 | [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=0)] 14 | [String]$SearchQuery, 15 | 16 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=1)] 17 | [hashtable]$token 18 | ) 19 | 20 | Begin{ 21 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 22 | $CommandName = $MyInvocation.MyCommand.Name 23 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND -Helper 24 | } 25 | Process{ 26 | try{ 27 | if($SubDomain -eq "N/A"){ 28 | Write-VPASOutput -str "SelfHosted + PriviledgeCloud Standard solutions do not support this API Call, returning false" -type E 29 | $log = Write-VPASTextRecorder -inputval "SelfHosted + PrivilegeCloud Standard solutions do not support this API Call, returning false" -token $token -LogType MISC 30 | $log = Write-VPASTextRecorder -inputval $false -token $token -LogType RETURN 31 | return -1 32 | } 33 | 34 | Write-Verbose "CONSTRUCTING SEARCH STRING TO QUERY CONNECTOR MANAGEMENT" 35 | $log = Write-VPASTextRecorder -inputval "SEARCHING FOR: $SearchQuery" -token $token -LogType MISC -Helper 36 | 37 | write-verbose "MAKING API CALL TO CYBERARK" 38 | $uri = "https://$SubDomain.connectormanagement.cyberark.cloud/api/connector-pools" 39 | Write-Verbose "CONSTRUCTING URI: $uri" 40 | 41 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI 42 | $log = Write-VPASTextRecorder -inputval "GET" -token $token -LogType METHOD 43 | 44 | if($sessionval){ 45 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" -WebSession $sessionval 46 | } 47 | else{ 48 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" 49 | } 50 | $log = Write-VPASTextRecorder -inputval $response -token $token -LogType RETURNARRAY 51 | 52 | $output = -1 53 | foreach($rec in $response.connectorPools){ 54 | $recPoolID = $rec.poolId 55 | $recName = $rec.name 56 | $recDescription = $rec.description 57 | 58 | if($recName -eq $SearchQuery){ 59 | $output = $recPoolID 60 | Write-Verbose "FOUND $SearchQuery : TARGET ENTRY FOUND, RETURNING CONNECTOR POOL ID" 61 | $logoutput = $rec | ConvertTo-Json | ConvertFrom-Json 62 | $log = Write-VPASTextRecorder -inputval $logoutput -token $token -LogType RETURN -Helper 63 | return $output 64 | } 65 | Write-Verbose "FOUND $recName : NOT TARGET ENTRY (SKIPPING)" 66 | } 67 | Write-Verbose "CAN NOT FIND TARGET ENTRY, RETURNING -1" 68 | $log = Write-VPASTextRecorder -inputval "CAN NOT FIND TARGET ENTRY" -token $token -LogType MISC -Helper 69 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 70 | return $output 71 | }catch{ 72 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 73 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 74 | Write-Verbose "FAILED TO RETRIEVE CONNECTOR MANAGEMENT CONNECTOR POOLS" 75 | Write-VPASOutput -str $_ -type E 76 | return $false 77 | } 78 | } 79 | End{ 80 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Get-VPASCurrentEPVUserDetailsHelper.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | GET CURRENT EPV USER DETAILS HELPER 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | HELPER FUNCTION TO RETRIEVE CURRENT DETAILS OF THE LOGGED IN USER 7 | #> 8 | function Get-VPASCurrentEPVUserDetailsHelper{ 9 | [OutputType('System.String',[bool])] 10 | [CmdletBinding()] 11 | Param( 12 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=0)] 13 | [hashtable]$token, 14 | 15 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=1)] 16 | [String]$APIUsername 17 | ) 18 | 19 | Begin{ 20 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 21 | $CommandName = $MyInvocation.MyCommand.Name 22 | } 23 | Process{ 24 | $returnType = $false 25 | Write-Verbose "SUCCESSFULLY PARSED PVWA VALUE" 26 | Write-Verbose "SUCCESSFULLY PARSED TOKEN VALUE" 27 | 28 | try{ 29 | if(!$ISPSS){ 30 | if($PVWA -match ".privilegecloud.cyberark."){ 31 | Write-Verbose "STANDARD PRIVILEGE CLOUD TENANT, PARSING USERNAME FROM CREDENTIAL OBJECT" 32 | $returnType = "Standard" 33 | } 34 | else{ 35 | if($NoSSL){ 36 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 37 | $uri = "http://$PVWA/PasswordVault/WebServices/PIMServices.svc/User" 38 | } 39 | else{ 40 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 41 | $uri = "https://$PVWA/PasswordVault/WebServices/PIMServices.svc/User" 42 | } 43 | $returnType = "SelfHosted" 44 | } 45 | } 46 | else{ 47 | if($NoSSL){ 48 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 49 | $uri = "http://$IdentityURL/Security/WhoAmI" 50 | $returnType = "ISPSS" 51 | } 52 | else{ 53 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 54 | $uri = "https://$IdentityURL/Security/WhoAmI" 55 | $returnType = "ISPSS" 56 | } 57 | } 58 | 59 | if($returnType -ne "Standard"){ 60 | Write-Verbose "MAKING API CALL TO CYBERARK" 61 | 62 | if($sessionval){ 63 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" -WebSession $sessionval 64 | } 65 | else{ 66 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" 67 | } 68 | 69 | Write-Verbose "SUCCESSFULLY RETRIEVED DETAILS FOR CURRENT USER" 70 | Write-Verbose "RETURNING USERNAME OBJECT" 71 | if($returnType -eq "SelfHosted"){ 72 | return $response.UserName 73 | } 74 | elseif($returnType -eq "ISPSS"){ 75 | return $response.Result.User 76 | } 77 | } 78 | else{ 79 | Write-Verbose "RETURNING USERNAME OBJECT" 80 | return $APIUsername 81 | } 82 | }catch{ 83 | Write-Verbose "UNABLE TO RETRIEVE DETAILS FOR CURRENT EPV USER" 84 | Write-VPASOutput -str $_ -type E 85 | return $false 86 | } 87 | } 88 | End{ 89 | 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Get-VPASDPAPolicyIDHelper.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | GET DPA POLICY ID 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | HELPER FUNCTION TO RETRIEVE POLICY IDS FROM DPA 7 | #> 8 | function Get-VPASDPAPolicyIDHelper{ 9 | [OutputType([bool],'System.Int32')] 10 | [CmdletBinding()] 11 | Param( 12 | 13 | [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=0)] 14 | [String]$SearchQuery, 15 | 16 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=1)] 17 | [hashtable]$token 18 | ) 19 | 20 | Begin{ 21 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 22 | $CommandName = $MyInvocation.MyCommand.Name 23 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND -Helper 24 | } 25 | Process{ 26 | try{ 27 | if($SubDomain -eq "N/A"){ 28 | Write-VPASOutput -str "SelfHosted + PriviledgeCloud Standard solutions do not support this API Call, returning false" -type E 29 | $log = Write-VPASTextRecorder -inputval "SelfHosted + PrivilegeCloud Standard solutions do not support this API Call, returning false" -token $token -LogType MISC 30 | $log = Write-VPASTextRecorder -inputval $false -token $token -LogType RETURN 31 | return -1 32 | } 33 | 34 | Write-Verbose "CONSTRUCTING SEARCH STRING TO QUERY DPA" 35 | $log = Write-VPASTextRecorder -inputval "SEARCHING FOR: $SearchQuery" -token $token -LogType MISC -Helper 36 | 37 | $apiLimit = 1000 38 | write-verbose "MAKING API CALL TO CYBERARK" 39 | $uri = "https://$SubDomain.dpa.cyberark.cloud/api/access-policies?limit=$apiLimit" 40 | Write-Verbose "CONSTRUCTING URI: $uri" 41 | 42 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI 43 | $log = Write-VPASTextRecorder -inputval "GET" -token $token -LogType METHOD 44 | 45 | if($sessionval){ 46 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" -WebSession $sessionval 47 | } 48 | else{ 49 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" 50 | } 51 | $log = Write-VPASTextRecorder -inputval $response -token $token -LogType RETURNARRAY 52 | 53 | $curcount = $response.TotalCount 54 | $curcount = $curcount - $apiLimit 55 | $curItems = $response.items 56 | $curOffset = 0 57 | while($curcount -gt 0){ 58 | $curOffset += $apiLimit 59 | $uri = "https://$SubDomain.dpa.cyberark.cloud/api/access-policies?limit=$apiLimit&offset=$curOffset" 60 | Write-Verbose "SETTING URI: $uri" 61 | 62 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI 63 | $log = Write-VPASTextRecorder -inputval "GET" -token $token -LogType METHOD 64 | write-verbose "MAKING API CALL TO CYBERARK" 65 | 66 | if($sessionval){ 67 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" -WebSession $sessionval 68 | } 69 | else{ 70 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" 71 | } 72 | $log = Write-VPASTextRecorder -inputval $response -token $token -LogType RETURNARRAY 73 | 74 | $curcount = $curcount - $apiLimit 75 | $curItems += $response.items 76 | } 77 | $response.items = $curItems 78 | 79 | $output = -1 80 | foreach($rec in $response.items){ 81 | $recPolicyID = $rec.policyId 82 | $recPolicyName = $rec.policyName 83 | 84 | if($recPolicyName -eq $SearchQuery){ 85 | $output = $recPolicyID 86 | Write-Verbose "FOUND $SearchQuery : TARGET ENTRY FOUND, RETURNING POLICY ID" 87 | $logoutput = $rec | ConvertTo-Json | ConvertFrom-Json 88 | $log = Write-VPASTextRecorder -inputval $logoutput -token $token -LogType RETURN -Helper 89 | return $output 90 | } 91 | Write-Verbose "FOUND $recPolicyName : NOT TARGET ENTRY (SKIPPING)" 92 | } 93 | Write-Verbose "CAN NOT FIND TARGET ENTRY, RETURNING -1" 94 | $log = Write-VPASTextRecorder -inputval "CAN NOT FIND TARGET ENTRY" -token $token -LogType MISC -Helper 95 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 96 | return $output 97 | }catch{ 98 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 99 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 100 | Write-Verbose "FAILED TO RETRIEVE DPA POLICIES" 101 | Write-VPASOutput -str $_ -type E 102 | return $false 103 | } 104 | } 105 | End{ 106 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Get-VPASDPAStrongAccountIDHelper.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | GET DPA STRONG ACCOUNT ID 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | HELPER FUNCTION TO RETRIEVE POLICY IDS FROM DPA 7 | #> 8 | function Get-VPASDPAStrongAccountIDHelper{ 9 | [OutputType([bool],'System.Int32')] 10 | [CmdletBinding()] 11 | Param( 12 | 13 | [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=0)] 14 | [String]$SearchQuery, 15 | 16 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=1)] 17 | [hashtable]$token 18 | ) 19 | 20 | Begin{ 21 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 22 | $CommandName = $MyInvocation.MyCommand.Name 23 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND -Helper 24 | } 25 | Process{ 26 | try{ 27 | if($SubDomain -eq "N/A"){ 28 | Write-VPASOutput -str "SelfHosted + PriviledgeCloud Standard solutions do not support this API Call, returning false" -type E 29 | $log = Write-VPASTextRecorder -inputval "SelfHosted + PrivilegeCloud Standard solutions do not support this API Call, returning false" -token $token -LogType MISC 30 | $log = Write-VPASTextRecorder -inputval $false -token $token -LogType RETURN 31 | return -1 32 | } 33 | 34 | Write-Verbose "CONSTRUCTING SEARCH STRING TO QUERY DPA" 35 | $log = Write-VPASTextRecorder -inputval "SEARCHING FOR: $SearchQuery" -token $token -LogType MISC -Helper 36 | 37 | write-verbose "MAKING API CALL TO CYBERARK" 38 | $uri = "https://$SubDomain.dpa.cyberark.cloud/api/secrets/public/v1" 39 | Write-Verbose "CONSTRUCTING URI: $uri" 40 | 41 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI 42 | $log = Write-VPASTextRecorder -inputval "GET" -token $token -LogType METHOD 43 | 44 | if($sessionval){ 45 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" -WebSession $sessionval 46 | } 47 | else{ 48 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" 49 | } 50 | $log = Write-VPASTextRecorder -inputval $response -token $token -LogType RETURNARRAY 51 | 52 | $output = -1 53 | foreach($rec in $response){ 54 | $recID = $rec.secret_id 55 | $recName = $rec.secret_name 56 | 57 | if($recName -eq $SearchQuery){ 58 | $output = $recID 59 | Write-Verbose "FOUND $SearchQuery : TARGET ENTRY FOUND, RETURNING STRONG ACCOUNT ID" 60 | $logoutput = $rec | ConvertTo-Json | ConvertFrom-Json 61 | $log = Write-VPASTextRecorder -inputval $logoutput -token $token -LogType RETURN -Helper 62 | return $output 63 | } 64 | Write-Verbose "FOUND $recName : NOT TARGET ENTRY (SKIPPING)" 65 | } 66 | Write-Verbose "CAN NOT FIND TARGET ENTRY, RETURNING -1" 67 | $log = Write-VPASTextRecorder -inputval "CAN NOT FIND TARGET ENTRY" -token $token -LogType MISC -Helper 68 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 69 | return $output 70 | }catch{ 71 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 72 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 73 | Write-Verbose "FAILED TO RETRIEVE DPA STRONG ACCOUNTS" 74 | Write-VPASOutput -str $_ -type E 75 | return $false 76 | } 77 | } 78 | End{ 79 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Get-VPASDirectoryMappingIDHelper.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | Get directory mapping ID 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | Helper function to retrieve directory mapping IDs from CyberArk 7 | #> 8 | function Get-VPASDirectoryMappingIDHelper{ 9 | [OutputType([String],'System.Int32')] 10 | [CmdletBinding()] 11 | Param( 12 | 13 | [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=0)] 14 | [String]$DomainName, 15 | 16 | [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=1)] 17 | [String]$DirectoryMappingSearch, 18 | 19 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=2)] 20 | [hashtable]$token 21 | ) 22 | 23 | Begin{ 24 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 25 | $CommandName = $MyInvocation.MyCommand.Name 26 | $log = Write-VPASTextRecorder -inputval "Get-VPASDirectoryMappingIDHelper" -token $token -LogType COMMAND -Helper 27 | } 28 | Process{ 29 | try{ 30 | Write-Verbose "CONSTRUCTING SEARCH STRING TO QUERY CYBERARK" 31 | $searchQuery = "$DirectoryMappingSearch" 32 | $log = Write-VPASTextRecorder -inputval "SEARCHING FOR: $searchQuery" -token $token -LogType MISC -Helper 33 | 34 | if($NoSSL){ 35 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 36 | $uri = "http://$PVWA/PasswordVault/API/Configuration/LDAP/Directories/$DomainName/Mappings" 37 | } 38 | else{ 39 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 40 | $uri = "https://$PVWA/PasswordVault/API/Configuration/LDAP/Directories/$DomainName/Mappings" 41 | } 42 | write-verbose "MAKING API CALL" 43 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI -Helper 44 | $log = Write-VPASTextRecorder -inputval "GET" -token $token -LogType METHOD -Helper 45 | 46 | if($sessionval){ 47 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" -WebSession $sessionval 48 | } 49 | else{ 50 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" 51 | } 52 | 53 | $counter = $response.Count 54 | Write-Verbose "FOUND $counter MAPPING IDS UNDER $DomainName...LOOKING FOR TARGET MAPPING ID: $searchQuery" 55 | 56 | $output = -1 57 | foreach($rec in $response){ 58 | $recMappingName = $rec.MappingName 59 | $recMappingID = $rec.MappingID 60 | 61 | if($recMappingName -match $searchQuery){ 62 | if($output -eq -1){ 63 | $output = [int]$recMappingID 64 | $outputlog = $rec | ConvertTo-Json | ConvertFrom-Json 65 | } 66 | else{ 67 | Write-Verbose "FOUND MULTIPLE TARGET ENTRIES, USE MORE SEARCH PARAMETES...RETURNING -2" 68 | $output = -2 69 | $log = Write-VPASTextRecorder -inputval "MULTIPLE TARGET ENTRIES WERE RETURNED, ADD MORE TO NAME TO NARROW RESULTS" -token $token -LogType MISC -Helper 70 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 71 | return $output 72 | } 73 | } 74 | else{ 75 | Write-Verbose "FOUND $recMappingName : NOT TARGET ENTRY (SKIPPING)" 76 | } 77 | 78 | } 79 | 80 | if($output -ne -1){ 81 | Write-Verbose "FOUND MATCHING DIRECTORY MAPPING ID...RETURNING DIRECTORY MAPPING ID" 82 | $log = Write-VPASTextRecorder -inputval $outputlog -token $token -LogType RETURN -Helper 83 | return $output 84 | } 85 | else{ 86 | Write-Verbose "CAN NOT FIND TARGET ENTRY, RETURNING -1" 87 | $log = Write-VPASTextRecorder -inputval "CAN NOT FIND TARGET ENTRY" -token $token -LogType MISC -Helper 88 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 89 | return $output 90 | } 91 | }catch{ 92 | Write-Verbose "UNABLE TO QUERY CYBERARK" 93 | Write-VPASOutput -str $_ -type E 94 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR -Helper 95 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 96 | } 97 | } 98 | End{ 99 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER -Helper 100 | } 101 | } -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Get-VPASDiscoveredAccountIDHelper.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | Get discovered account ID 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | Helper function to retrieve discovered account IDs from CyberArk 7 | #> 8 | function Get-VPASDiscoveredAccountIDHelper{ 9 | [OutputType([String])] 10 | [CmdletBinding()] 11 | Param( 12 | 13 | [Parameter(ValueFromPipelineByPropertyName=$true,Position=0)] 14 | [String]$SearchQuery, 15 | 16 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=1)] 17 | [hashtable]$token 18 | ) 19 | 20 | Begin{ 21 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 22 | $CommandName = $MyInvocation.MyCommand.Name 23 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND -Helper 24 | } 25 | Process{ 26 | try{ 27 | Write-Verbose "CONSTRUCTING SEARCH STRING TO QUERY CYBERARK" 28 | 29 | if($NoSSL){ 30 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 31 | $uri = "http://$PVWA/passwordvault/api/DiscoveredAccounts?search=$SearchQuery" 32 | } 33 | else{ 34 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 35 | $uri = "https://$PVWA/passwordvault/api/DiscoveredAccounts?search=$SearchQuery" 36 | } 37 | write-verbose "MAKING API CALL" 38 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI -Helper 39 | $log = Write-VPASTextRecorder -inputval "GET" -token $token -LogType METHOD -Helper 40 | 41 | if($sessionval){ 42 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" -WebSession $sessionval 43 | } 44 | else{ 45 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" 46 | } 47 | 48 | $counter = $response.Count 49 | Write-Verbose "FOUND $counter DISCOVERED ACCOUNTS...LOOKING FOR TARGET DISCOVERED ACCOUNT: $searchQuery" 50 | 51 | $output = -1 52 | $outputarr = @() 53 | foreach($rec in $response.value){ 54 | $recid = $rec.ID 55 | $recusername = $rec.userName 56 | $recname = $rec.Name 57 | 58 | if($recusername -match $SearchQuery -or $recname -match $SearchQuery){ 59 | $output = $recid 60 | $outputarr += $recid 61 | Write-Verbose "FOUND $recusername : TARGET ENTRY FOUND, ADDING TO RETURN ARRAY" 62 | } 63 | else{ 64 | Write-Verbose "FOUND $recusername : NOT TARGET ENTRY (SKIPPING)" 65 | } 66 | } 67 | 68 | if($output -eq -1){ 69 | Write-Verbose "CAN NOT FIND TARGET ENTRY, RETURNING -1" 70 | $log = Write-VPASTextRecorder -inputval "CAN NOT FIND TARGET ENTRY" -token $token -LogType MISC -Helper 71 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 72 | return $output 73 | } 74 | else{ 75 | $log = Write-VPASTextRecorder -inputval $outputarr -token $token -LogType RETURN -Helper 76 | return $outputarr 77 | } 78 | }catch{ 79 | Write-Verbose "UNABLE TO QUERY CYBERARK" 80 | Write-VPASOutput -str $_ -type E 81 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR -Helper 82 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 83 | } 84 | } 85 | End{ 86 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER -Helper 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Get-VPASEPVGroupIDHelper.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | Get group ID 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | Helper function to retrieve group IDs from CyberArk 7 | #> 8 | function Get-VPASEPVGroupIDHelper{ 9 | [OutputType([String],'System.Int32')] 10 | [CmdletBinding()] 11 | Param( 12 | 13 | [Parameter(ValueFromPipelineByPropertyName=$true,Position=0)] 14 | [String]$GroupName, 15 | 16 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=1)] 17 | [hashtable]$token 18 | ) 19 | 20 | Begin{ 21 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 22 | $CommandName = $MyInvocation.MyCommand.Name 23 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND -Helper 24 | } 25 | Process{ 26 | try{ 27 | Write-Verbose "CONSTRUCTING SEARCH STRING TO QUERY CYBERARK" 28 | $searchQuery = "$GroupName" 29 | $log = Write-VPASTextRecorder -inputval "HELPER FUNCTION SEARCH QUERY: $searchQuery" -token $token -LogType MISC -Helper 30 | 31 | if($NoSSL){ 32 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 33 | $uri = "http://$PVWA/PasswordVault/api/UserGroups?search=$searchQuery" 34 | } 35 | else{ 36 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 37 | $uri = "https://$PVWA/PasswordVault/api/UserGroups?search=$searchQuery" 38 | } 39 | write-verbose "MAKING API CALL" 40 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI -Helper 41 | $log = Write-VPASTextRecorder -inputval "GET" -token $token -LogType METHOD -Helper 42 | 43 | if($sessionval){ 44 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" -WebSession $sessionval 45 | } 46 | else{ 47 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" 48 | } 49 | 50 | $counter = $response.Count 51 | if($counter -gt 1){ 52 | #Write-VPASOutput -str "MULTIPLE ENTRIES FOUND, NARROWING DOWN RESULTS" -type M 53 | Write-Verbose "MULTIPLE GROUP ENTRIES WERE RETURNED, NARROWING DOWN RESULTS" 54 | 55 | $output = -1 56 | foreach($rec in $response.value){ 57 | $recid = $rec.id 58 | $recgroupname = $rec.groupName 59 | 60 | if($recgroupname -eq $GroupName){ 61 | $output = [int]$recid 62 | Write-verbose "FOUND $recgroupname : TARGET ENTRY FOUND. RETURNING ID" 63 | $outputlog = $rec | ConvertTo-Json | ConvertFrom-Json 64 | $log = Write-VPASTextRecorder -inputval $outputlog -token $token -LogType RETURN -Helper 65 | return $output 66 | } 67 | Write-Verbose "FOUND $recgroupname : NOT TARGET ENTRY (SKIPPING)" 68 | } 69 | write-verbose "CAN NOT FIND TARGET ENTRY, RETURNING -1" 70 | $log = Write-VPASTextRecorder -inputval "CAN NOT FIND TARGET ENTRY" -token $token -LogType MISC -Helper 71 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 72 | return $output 73 | } 74 | elseif($counter -eq 0){ 75 | Write-Verbose "NO GROUPS FOUND" 76 | Write-VPASOutput -str "NO GROUPS FOUND" -type E 77 | $log = Write-VPASTextRecorder -inputval "NO GROUPS FOUND" -token $token -LogType MISC -Helper 78 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 79 | return -2 80 | } 81 | else{ 82 | write-verbose "FOUND UNIQUE GROUP ID" 83 | Write-Verbose "RETURNING UNIQUE GROUP ID" 84 | $outputlog = $response.value | ConvertTo-Json | ConvertFrom-Json 85 | $log = Write-VPASTextRecorder -inputval $outputlog -token $token -LogType RETURN -Helper 86 | return $response.value.id 87 | } 88 | }catch{ 89 | Write-Verbose "UNABLE TO QUERY CYBERARK" 90 | Write-VPASOutput -str $_ -type E 91 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR -Helper 92 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 93 | } 94 | } 95 | End{ 96 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER -Helper 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Get-VPASEPVUserIDHelper.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | Get user ID 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | Helper function to retrieve user IDs from CyberArk 7 | #> 8 | function Get-VPASEPVUserIDHelper{ 9 | [OutputType([String],'System.Int32')] 10 | [CmdletBinding()] 11 | Param( 12 | 13 | [Parameter(ValueFromPipelineByPropertyName=$true,Position=0)] 14 | [String]$username, 15 | 16 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=1)] 17 | [hashtable]$token 18 | ) 19 | 20 | Begin{ 21 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 22 | $CommandName = $MyInvocation.MyCommand.Name 23 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND -Helper 24 | } 25 | Process{ 26 | try{ 27 | Write-Verbose "CONSTRUCTING SEARCH STRING TO QUERY CYBERARK" 28 | $searchQuery = "$username" 29 | $log = Write-VPASTextRecorder -inputval "HELPER FUNCTION SEARCH QUERY: $searchQuery" -token $token -LogType MISC -Helper 30 | 31 | if($NoSSL){ 32 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 33 | $uri = "http://$PVWA/PasswordVault/api/Users?search=$searchQuery" 34 | } 35 | else{ 36 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 37 | $uri = "https://$PVWA/PasswordVault/api/Users?search=$searchQuery" 38 | } 39 | write-verbose "MAKING API CALL" 40 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI -Helper 41 | $log = Write-VPASTextRecorder -inputval "GET" -token $token -LogType METHOD -Helper 42 | 43 | if($sessionval){ 44 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" -WebSession $sessionval 45 | } 46 | else{ 47 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" 48 | } 49 | 50 | $counter = $response.Total 51 | if($counter -gt 1){ 52 | Write-Verbose "MULTIPLE ACCOUNT ENTRIES WERE RETURNED, NARROWING DOWN RESULTS" 53 | 54 | $output = -1 55 | foreach($rec in $response.Users){ 56 | $recid = $rec.id 57 | $recusername = $rec.username 58 | 59 | if($recusername -eq $username){ 60 | $output = [int]$recid 61 | Write-verbose "FOUND $recusername : TARGET ENTRY FOUND. RETURNING ID" 62 | $outputlog = $rec | ConvertTo-Json | ConvertFrom-Json 63 | $log = Write-VPASTextRecorder -inputval $outputlog -token $token -LogType RETURN -Helper 64 | return $output 65 | } 66 | Write-Verbose "FOUND $recusername : NOT TARGET ENTRY (SKIPPING)" 67 | } 68 | write-verbose "CAN NOT FIND TARGET ENTRY, RETURNING -1" 69 | $log = Write-VPASTextRecorder -inputval "CAN NOT FIND TARGET ENTRY" -token $token -LogType MISC -Helper 70 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 71 | return $output 72 | } 73 | elseif($counter -eq 0){ 74 | Write-Verbose "NO USERS FOUND" 75 | Write-VPASOutput -str "NO USERS FOUND" -type E 76 | $log = Write-VPASTextRecorder -inputval "NO USERS FOUND" -token $token -LogType MISC -Helper 77 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 78 | return -2 79 | } 80 | else{ 81 | write-verbose "FOUND UNIQUE USER ID" 82 | Write-Verbose "RETURNING UNIQUE USER ID" 83 | $outputlog = $response.Users | ConvertTo-Json | ConvertFrom-Json 84 | $log = Write-VPASTextRecorder -inputval $outputlog -token $token -LogType RETURN -Helper 85 | return $response.Users.id 86 | } 87 | }catch{ 88 | Write-Verbose "UNABLE TO QUERY CYBERARK" 89 | Write-VPASOutput -str $_ -type E 90 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR -Helper 91 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 92 | } 93 | } 94 | End{ 95 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER -Helper 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Get-VPASGroupPlatformIDHelper.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | Get group platform ID 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | Helper function to retrieve group platform IDs from CyberArk 7 | #> 8 | function Get-VPASGroupPlatformIDHelper{ 9 | [OutputType([String],'System.Int32')] 10 | [CmdletBinding()] 11 | Param( 12 | 13 | [Parameter(ValueFromPipelineByPropertyName=$true,Position=0)] 14 | [String]$groupplatformID, 15 | 16 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=1)] 17 | [hashtable]$token 18 | ) 19 | 20 | Begin{ 21 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 22 | $CommandName = $MyInvocation.MyCommand.Name 23 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND -Helper 24 | } 25 | Process{ 26 | try{ 27 | $platformID = $groupplatformID 28 | Write-Verbose "CONSTRUCTING SEARCH STRING TO QUERY CYBERARK" 29 | $searchQuery = "$platformID" 30 | $log = Write-VPASTextRecorder -inputval "HELPER FUNCTION SEARCH QUERY: $searchQuery" -token $token -LogType MISC -Helper 31 | 32 | if($NoSSL){ 33 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 34 | $uri = "http://$PVWA/passwordvault/api/platforms/groups/" 35 | } 36 | else{ 37 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 38 | $uri = "https://$PVWA/passwordvault/api/platforms/groups/" 39 | } 40 | write-verbose "MAKING API CALL" 41 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI -Helper 42 | $log = Write-VPASTextRecorder -inputval "GET" -token $token -LogType METHOD -Helper 43 | 44 | if($sessionval){ 45 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" -WebSession $sessionval 46 | } 47 | else{ 48 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" 49 | } 50 | 51 | $counter = $response.Total 52 | Write-Verbose "FOUND $counter GROUP PLATFORMS...LOOKING FOR TARGET GROUP PLATFORMID: $searchQuery" 53 | 54 | $output = -1 55 | foreach($rec in $response.Platforms){ 56 | $recid = $rec.ID 57 | $recplatformid = $rec.PlatformID 58 | $recname = $rec.Name 59 | 60 | if($recplatformid -eq $platformID -or $recname -eq $platformID){ 61 | $output = [int]$recid 62 | Write-Verbose "FOUND $platformID : TARGET ENTRY FOUND, RETURNING ID" 63 | $outputlog = $rec | ConvertTo-Json | ConvertFrom-Json 64 | $log = Write-VPASTextRecorder -inputval $outputlog -token $token -LogType RETURN -Helper 65 | return $output 66 | } 67 | Write-Verbose "FOUND $recplatformid : NOT TARGET ENTRY (SKIPPING)" 68 | 69 | } 70 | Write-Verbose "CAN NOT FIND TARGET ENTRY, RETURNING -1" 71 | $log = Write-VPASTextRecorder -inputval "CAN NOT FIND TARGET ENTRY" -token $token -LogType MISC -Helper 72 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 73 | return $output 74 | }catch{ 75 | Write-Verbose "UNABLE TO QUERY CYBERARK" 76 | Write-VPASOutput -str $_ -type E 77 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR -Helper 78 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 79 | } 80 | } 81 | End{ 82 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER -Helper 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Get-VPASIncomingRequestIDHelper.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | Get incoming request ID 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | Helper function to retrieve incoming request IDs from CyberArk 7 | #> 8 | function Get-VPASIncomingRequestIDHelper{ 9 | [OutputType([String[]],[bool])] 10 | [CmdletBinding()] 11 | Param( 12 | 13 | [Parameter(ValueFromPipelineByPropertyName=$true,Position=0)] 14 | [String]$AcctID, 15 | 16 | [Parameter(ValueFromPipelineByPropertyName=$true,Position=1)] 17 | [String]$Safe, 18 | 19 | [Parameter(ValueFromPipelineByPropertyName=$true,Position=2)] 20 | [String]$Platform, 21 | 22 | [Parameter(ValueFromPipelineByPropertyName=$true,Position=3)] 23 | [String]$Username, 24 | 25 | [Parameter(ValueFromPipelineByPropertyName=$true,Position=4)] 26 | [String]$Address, 27 | 28 | [Parameter(ValueFromPipelineByPropertyName=$true,Position=5)] 29 | [String]$UserReason, 30 | 31 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=6)] 32 | [hashtable]$token 33 | ) 34 | 35 | Begin{ 36 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 37 | $CommandName = $MyInvocation.MyCommand.Name 38 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND -Helper 39 | } 40 | Process{ 41 | try{ 42 | Write-Verbose "RETRIEVING ALL INCOMING REQUESTS" 43 | $FoundRequests = @() 44 | $AllAccountRequests = Get-VPASAllIncomingRequests 45 | foreach($req in $AllAccountRequests.IncomingRequests){ 46 | $curMatch = $true 47 | $requestID = $req.RequestID 48 | $requestAcctID = $req.AccountDetails.AccountID 49 | $requestReason = $req.RequestorReason 50 | $requestSafe = $req.AccountDetails.Properties.Safe 51 | $requestPlatform = $req.AccountDetails.Properties.PolicyID 52 | $requestAddress = $req.AccountDetails.Properties.Address 53 | $requestUsername = $req.AccountDetails.Properties.UserName 54 | 55 | if(![String]::IsNullOrEmpty($AcctID)){ 56 | if($requestAcctID -eq $AcctID){ 57 | if(![String]::IsNullOrEmpty($UserReason)){ 58 | if($requestReason -match $UserReason){ 59 | Write-Verbose "FOUND MATCHING REQUEST ID $requestID, ADDING TO RETURN LIST" 60 | $FoundRequests += $requestID 61 | } 62 | } 63 | else{ 64 | Write-Verbose "FOUND MATCHING REQUEST ID $requestID, ADDING TO RETURN LIST" 65 | $FoundRequests += $requestID 66 | } 67 | } 68 | } 69 | else{ 70 | if(![String]::IsNullOrEmpty($Platform)){ 71 | if($requestPlatform -notmatch $Platform){ 72 | $curMatch = $false 73 | } 74 | } 75 | if(![String]::IsNullOrEmpty($Safe)){ 76 | if($requestSafe -notmatch $Safe){ 77 | $curMatch = $false 78 | } 79 | } 80 | if(![String]::IsNullOrEmpty($Address)){ 81 | if($requestAddress -notmatch $Address){ 82 | $curMatch = $false 83 | } 84 | } 85 | if(![String]::IsNullOrEmpty($Username)){ 86 | if($requestUsername -notmatch $Username){ 87 | $curMatch = $false 88 | } 89 | } 90 | if(![String]::IsNullOrEmpty($UserReason)){ 91 | if($requestReason -notmatch $UserReason){ 92 | $curMatch = $false 93 | } 94 | } 95 | if($curMatch){ 96 | Write-Verbose "FOUND MATCHING REQUEST ID $requestID, ADDING TO RETURN LIST" 97 | $FoundRequests += $requestID 98 | } 99 | } 100 | } 101 | 102 | $counter = $FoundRequests.count 103 | if($counter -gt 0){ 104 | Write-Verbose "FOUND TARGET INCOMING REQUESTS THAT MATCH THE SEARCHQUERY" 105 | $log = Write-VPASTextRecorder -inputval "FOUND TARGET INCOMING REQUESTS THAT MATCH THE SEARCHQUERY" -token $token -LogType MISC -Helper 106 | $log = Write-VPASTextRecorder -inputval $FoundRequests -token $token -LogType RETURN -Helper 107 | return $FoundRequests 108 | } 109 | else{ 110 | Write-Verbose "NO INCOMING REQUESTS FOUND" 111 | Write-VPASOutput -str "NO INCOMING REQUESTS FOUND" -type E 112 | $log = Write-VPASTextRecorder -inputval "NO INCOMING REQUESTS FOUND" -token $token -LogType MISC -Helper 113 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: false" -token $token -LogType MISC -Helper 114 | return $false 115 | } 116 | }catch{ 117 | Write-Verbose "UNABLE TO QUERY CYBERARK" 118 | Write-VPASOutput -str $_ -type E 119 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR -Helper 120 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 121 | } 122 | } 123 | End{ 124 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER -Helper 125 | } 126 | } 127 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Get-VPASPlatformIDHelper.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | Get platform ID 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | Helper function to retrieve platform IDs from CyberArk 7 | #> 8 | function Get-VPASPlatformIDHelper{ 9 | [OutputType([String],'System.Int32')] 10 | [CmdletBinding()] 11 | Param( 12 | 13 | [Parameter(ValueFromPipelineByPropertyName=$true,Position=0)] 14 | [String]$platformID, 15 | 16 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=1)] 17 | [hashtable]$token 18 | ) 19 | 20 | Begin{ 21 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 22 | $CommandName = $MyInvocation.MyCommand.Name 23 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND -Helper 24 | } 25 | Process{ 26 | try{ 27 | Write-Verbose "CONSTRUCTING SEARCH STRING TO QUERY CYBERARK" 28 | $searchQuery = "$platformID" 29 | $log = Write-VPASTextRecorder -inputval "HELPER FUNCTION SEARCH QUERY: $searchQuery" -token $token -LogType MISC -Helper 30 | 31 | if($NoSSL){ 32 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 33 | $uri = "http://$PVWA/passwordvault/api/platforms/targets" 34 | } 35 | else{ 36 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 37 | $uri = "https://$PVWA/passwordvault/api/platforms/targets" 38 | } 39 | write-verbose "MAKING API CALL" 40 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI -Helper 41 | $log = Write-VPASTextRecorder -inputval "GET" -token $token -LogType METHOD -Helper 42 | 43 | if($sessionval){ 44 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" -WebSession $sessionval 45 | } 46 | else{ 47 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" 48 | } 49 | 50 | $counter = $response.Total 51 | Write-Verbose "FOUND $counter PLATFORMS...LOOKING FOR TARGET PLATFORMID: $searchQuery" 52 | 53 | $output = -1 54 | foreach($rec in $response.Platforms){ 55 | $recid = $rec.ID 56 | $recplatformid = $rec.PlatformID 57 | $recname = $rec.Name 58 | 59 | if($recplatformid -eq $platformID -or $recname -eq $platformID){ 60 | $output = [int]$recid 61 | Write-Verbose "FOUND $platformID : TARGET ENTRY FOUND, RETURNING ID" 62 | $outputlog = $rec | ConvertTo-Json | ConvertFrom-Json 63 | $log = Write-VPASTextRecorder -inputval $outputlog -token $token -LogType RETURN -Helper 64 | return $output 65 | } 66 | Write-Verbose "FOUND $recplatformid : NOT TARGET ENTRY (SKIPPING)" 67 | 68 | } 69 | Write-Verbose "CAN NOT FIND TARGET ENTRY, RETURNING -1" 70 | $log = Write-VPASTextRecorder -inputval "CAN NOT FIND TARGET ENTRY" -token $token -LogType MISC -Helper 71 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 72 | return $output 73 | }catch{ 74 | Write-Verbose "UNABLE TO QUERY CYBERARK" 75 | Write-VPASOutput -str $_ -type E 76 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR -Helper 77 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 78 | } 79 | } 80 | End{ 81 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER -Helper 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Get-VPASRecordingIDHelper.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | Get recording ID 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | Helper function to retrieve recording ID from CyberArk 7 | #> 8 | function Get-VPASRecordingIDHelper{ 9 | [OutputType([String],'System.Int32',[bool])] 10 | [CmdletBinding()] 11 | Param( 12 | 13 | [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=0)] 14 | [String]$SearchQuery, 15 | 16 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=1)] 17 | [hashtable]$token 18 | ) 19 | 20 | Begin{ 21 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 22 | $CommandName = $MyInvocation.MyCommand.Name 23 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND -Helper 24 | } 25 | Process{ 26 | try{ 27 | Write-Verbose "SUCCESSFULLY PARSED PVWA VALUE" 28 | Write-Verbose "SUCCESSFULLY PARSED TOKEN VALUE" 29 | Write-Verbose "SUCCESSFULLY PARSED SEARCHQUERY VALUE: $SearchQuery" 30 | $log = Write-VPASTextRecorder -inputval "HELPER FUNCTION SEARCH QUERY: $searchQuery" -token $token -LogType MISC -Helper 31 | 32 | if($NoSSL){ 33 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 34 | $uri = "http://$PVWA/PasswordVault/API/recordings?Search=$SearchQuery" 35 | } 36 | else{ 37 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 38 | $uri = "https://$PVWA/PasswordVault/API/recordings?Search=$SearchQuery" 39 | } 40 | 41 | write-verbose "MAKING API CALL TO CYBERARK" 42 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI -Helper 43 | $log = Write-VPASTextRecorder -inputval "GET" -token $token -LogType METHOD -Helper 44 | 45 | if($sessionval){ 46 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" -WebSession $sessionval 47 | } 48 | else{ 49 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" 50 | } 51 | 52 | $output = -1 53 | foreach($rec in $response.Recordings){ 54 | $recSessionID = $rec.SessionID 55 | $recUser = $rec.User 56 | $recTargetAcct = $rec.AccountUsername 57 | $recTargetAddr = $rec.AccountAddress 58 | 59 | if($recSessionID -eq $SearchQuery -or $recUser -eq $SearchQuery -or $recTargetAcct -eq $SearchQuery -or $recTargetAddr -match $SearchQuery){ 60 | write-verbose "FOUND TARGET RECORDING SESSION: $recSessionID...RETURNING RECORDING SESSION ID" 61 | if($output -eq -1){ 62 | $output = $recSessionID 63 | $outputlog = $rec 64 | } 65 | else{ 66 | Write-Verbose "FOUND MULTIPLE TARGET ENTRIES, USE MORE SEARCH PARAMETES...RETURNING -2" 67 | Write-VPASOutput -str "FOUND MULTIPLE TARGET ENTRIES, USE MORE SEARCH PARAMETERS...RETURNING -2" -type E 68 | $output = -2 69 | $log = Write-VPASTextRecorder -inputval "MULTIPLE TARGET ENTRIES WERE RETURNED, ADD MORE TO NAME TO NARROW RESULTS" -token $token -LogType MISC -Helper 70 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 71 | return $output 72 | } 73 | } 74 | else{ 75 | write-verbose "FOUND RECORDING SESSION: $recSessionID...NOT TARGET SESSION, SKIPPING" 76 | } 77 | } 78 | 79 | if($output -ne -1){ 80 | Write-Verbose "FOUND MATCHING RECORIDNG SESSION ID...RETURNING RECORDING ID" 81 | $outputlog = $outputlog | ConvertTo-Json | ConvertFrom-Json 82 | $log = Write-VPASTextRecorder -inputval $outputlog -token $token -LogType RETURN -Helper 83 | return $output 84 | } 85 | else{ 86 | Write-Verbose "CAN NOT FIND TARGET ENTRY, RETURNING -1" 87 | Write-VPASOutput -str "CAN NOT FIND TARGET ENTRY, RETURNING -1" -type E 88 | $log = Write-VPASTextRecorder -inputval "CAN NOT FIND TARGET ENTRY" -token $token -LogType MISC -Helper 89 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 90 | return $output 91 | } 92 | 93 | }catch{ 94 | Write-Verbose "UNABLE TO GET RECORDING SESSIONS FOR SEARCHQUERY: $SearchQuery" 95 | Write-VPASOutput -str $_ -type E 96 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR -Helper 97 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 98 | return $false 99 | } 100 | } 101 | End{ 102 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER -Helper 103 | } 104 | } -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Get-VPASRoleIDIdentityHelper.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | Get Identity role ID 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | Helper function to retrieve role IDs from Identity 7 | #> 8 | function Get-VPASRoleIDIdentityHelper{ 9 | [OutputType([String],[bool],'System.Int32')] 10 | [CmdletBinding()] 11 | Param( 12 | 13 | [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=0)] 14 | [String]$RoleName, 15 | 16 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=1)] 17 | [hashtable]$token 18 | ) 19 | 20 | Begin{ 21 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 22 | $CommandName = $MyInvocation.MyCommand.Name 23 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND -Helper 24 | } 25 | Process{ 26 | $log = Write-VPASTextRecorder -inputval "LOOKING FOR *$RoleName* IDENTITY ROLE" -token $token -LogType MISC -Helper 27 | try{ 28 | if(!$IdentityURL){ 29 | Write-VPASOutput -str "LOGIN TOKEN WAS NOT GENERATED THROUGH IDENTITY, TERMINATING API CALL" -type E 30 | $log = Write-VPASTextRecorder -inputval "LOGIN TOKEN WAS NOT GENERATED THROUGH IDENTITY, TERMINATING API CALL" -token $token -LogType MISC -Helper 31 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 32 | return $false 33 | } 34 | 35 | Write-Verbose "CONSTRUCTING PARAMETERS" 36 | $params = @{ 37 | Script = "Select * from Role" 38 | } 39 | $log = Write-VPASTextRecorder -inputval $params -token $token -LogType PARAMS -Helper 40 | $params = $params | ConvertTo-Json 41 | 42 | if($NoSSL){ 43 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 44 | $uri = "http://$IdentityURL/Redrock/query" 45 | } 46 | else{ 47 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 48 | $uri = "https://$IdentityURL/Redrock/query" 49 | } 50 | write-verbose "MAKING API CALL" 51 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI -Helper 52 | $log = Write-VPASTextRecorder -inputval "POST" -token $token -LogType METHOD -Helper 53 | 54 | if($sessionval){ 55 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method POST -Body $params -ContentType "application/json" -WebSession $sessionval 56 | } 57 | else{ 58 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method POST -Body $params -ContentType "application/json" 59 | } 60 | $result = $response 61 | 62 | $counter = 0 63 | $returnID = "" 64 | foreach($role in $result.Result.Results.Row){ 65 | $RECroleName = $role.Name 66 | $RECroleID = $role.ID 67 | 68 | if($RECroleName -match $RoleName){ 69 | $counter += 1 70 | $returnID = $RECroleID 71 | } 72 | 73 | if($RECroleName -eq $RoleName){ 74 | Write-Verbose "FOUND TARGET ROLE, RETURNING UNIQUE ID" 75 | $log = Write-VPASTextRecorder -inputval $role -token $token -LogType RETURN -Helper 76 | return $RECroleID 77 | } 78 | } 79 | 80 | if($counter -gt 1){ 81 | Write-Verbose "MULTIPLE ROLE ENTRIES WERE RETURNED, ADD MORE TO NAME TO NARROW RESULTS" 82 | $log = Write-VPASTextRecorder -inputval "MULTIPLE ROLE ENTRIES WERE RETURNED, ADD MORE TO NAME TO NARROW RESULTS" -token $token -LogType MISC -Helper 83 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 84 | return -1 85 | } 86 | elseif($counter -eq 0){ 87 | Write-Verbose "NO ROLES FOUND" 88 | Write-VPASOutput -str "NO ROLES FOUND" -type E 89 | $log = Write-VPASTextRecorder -inputval "NO ROLES FOUND" -token $token -LogType MISC -Helper 90 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 91 | return -2 92 | } 93 | else{ 94 | write-verbose "FOUND UNIQUE ROLE ID" 95 | Write-Verbose "RETURNING UNIQUE ROLE ID" 96 | $log = Write-VPASTextRecorder -inputval "FOUND TARGET UNIQUE ROLE ID $returnID" -token $token -LogType MISC -Helper 97 | $log = Write-VPASTextRecorder -inputval "Get-VPASUserIDIdentityHelper" -token $token -LogType DIVIDER -Helper 98 | return $returnID 99 | } 100 | }catch{ 101 | Write-Verbose "UNABLE TO QUERY IDENTITY" 102 | Write-VPASOutput -str $_ -type E 103 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR -Helper 104 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 105 | } 106 | } 107 | End{ 108 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER -Helper 109 | } 110 | } -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Get-VPASRotationalPlatformIDHelper.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | Get rotational platform ID 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | Helper function to retrieve rotational platform IDs from CyberArk 7 | #> 8 | function Get-VPASRotationalPlatformIDHelper{ 9 | [OutputType([String],'System.Int32')] 10 | [CmdletBinding()] 11 | Param( 12 | 13 | [Parameter(ValueFromPipelineByPropertyName=$true,Position=0)] 14 | [String]$rotationalplatformID, 15 | 16 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=1)] 17 | [hashtable]$token 18 | ) 19 | 20 | Begin{ 21 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 22 | $CommandName = $MyInvocation.MyCommand.Name 23 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND -Helper 24 | } 25 | Process{ 26 | try{ 27 | $platformID = $rotationalplatformID 28 | Write-Verbose "CONSTRUCTING SEARCH STRING TO QUERY CYBERARK" 29 | $searchQuery = "$platformID" 30 | 31 | if($NoSSL){ 32 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 33 | $uri = "http://$PVWA/passwordvault/api/platforms/rotationalGroups/" 34 | } 35 | else{ 36 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 37 | $uri = "https://$PVWA/passwordvault/api/platforms/rotationalGroups/" 38 | } 39 | write-verbose "MAKING API CALL" 40 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI -Helper 41 | $log = Write-VPASTextRecorder -inputval "GET" -token $token -LogType METHOD -Helper 42 | 43 | if($sessionval){ 44 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" -WebSession $sessionval 45 | } 46 | else{ 47 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" 48 | } 49 | 50 | $counter = $response.Total 51 | Write-Verbose "FOUND $counter ROTATIONAL PLATFORMS...LOOKING FOR TARGET ROTATIONAL PLATFORMID: $searchQuery" 52 | 53 | $output = -1 54 | foreach($rec in $response.Platforms){ 55 | $recid = $rec.ID 56 | $recplatformid = $rec.PlatformID 57 | $recname = $rec.Name 58 | 59 | if($recplatformid -eq $platformID -or $recname -eq $platformID){ 60 | $output = [int]$recid 61 | Write-Verbose "FOUND $platformID : TARGET ENTRY FOUND, RETURNING ID" 62 | $logoutput = $rec | ConvertTo-Json | ConvertFrom-Json 63 | $log = Write-VPASTextRecorder -inputval $logoutput -token $token -LogType RETURN -Helper 64 | return $output 65 | } 66 | Write-Verbose "FOUND $recplatformid : NOT TARGET ENTRY (SKIPPING)" 67 | 68 | } 69 | Write-Verbose "CAN NOT FIND TARGET ENTRY, RETURNING -1" 70 | $log = Write-VPASTextRecorder -inputval "CAN NOT FIND TARGET ENTRY" -token $token -LogType MISC -Helper 71 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 72 | return $output 73 | }catch{ 74 | Write-Verbose "UNABLE TO QUERY CYBERARK" 75 | Write-VPASOutput -str $_ -type E 76 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR -Helper 77 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 78 | } 79 | } 80 | End{ 81 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER -Helper 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Get-VPASSecurityQuestionIDIdentityHelper.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | Get admin security question ID 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | Helper function to retrieve admin security question IDs from Identity 7 | #> 8 | function Get-VPASSecurityQuestionIDIdentityHelper{ 9 | [OutputType([String],'System.Int32',[bool])] 10 | [CmdletBinding()] 11 | Param( 12 | 13 | [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=0)] 14 | [String]$SecurityQuestion, 15 | 16 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=1)] 17 | [hashtable]$token 18 | ) 19 | 20 | Begin{ 21 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 22 | $CommandName = $MyInvocation.MyCommand.Name 23 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND -Helper 24 | } 25 | Process{ 26 | $log = Write-VPASTextRecorder -inputval "LOOKING FOR *$SecurityQuestion* SECURITY QUESTION" -token $token -LogType MISC -Helper 27 | try{ 28 | if(!$IdentityURL){ 29 | Write-VPASOutput -str "LOGIN TOKEN WAS NOT GENERATED THROUGH IDENTITY, TERMINATING API CALL" -type E 30 | $log = Write-VPASTextRecorder -inputval "LOGIN TOKEN WAS NOT GENERATED THROUGH IDENTITY, TERMINATING API CALL" -token $token -LogType MISC -Helper 31 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 32 | return $false 33 | } 34 | 35 | if($NoSSL){ 36 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 37 | $uri = "http://$IdentityURL/TenantConfig/GetAdminSecurityQuestions" 38 | } 39 | else{ 40 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 41 | $uri = "https://$IdentityURL/TenantConfig/GetAdminSecurityQuestions" 42 | } 43 | write-verbose "MAKING API CALL" 44 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI -Helper 45 | $log = Write-VPASTextRecorder -inputval "POST" -token $token -LogType METHOD -Helper 46 | 47 | if($sessionval){ 48 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method POST -ContentType "application/json" -WebSession $sessionval 49 | } 50 | else{ 51 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method POST -ContentType "application/json" 52 | } 53 | $result = $response 54 | 55 | $counter = 0 56 | $returnID = "" 57 | foreach($question in $result.Result){ 58 | $recQuestionID = $question.Uuid 59 | $recQuestion = $question.Question 60 | 61 | if($recQuestion -match $SecurityQuestion){ 62 | $counter += 1 63 | $returnID = $recQuestionID 64 | } 65 | 66 | if($recQuestion -eq $SecurityQuestion){ 67 | Write-Verbose "FOUND TARGET SECURITY QUESTION, RETURNING UNIQUE UUID" 68 | $log = Write-VPASTextRecorder -inputval $question -token $token -LogType RETURN -Helper 69 | return $recQuestionID 70 | } 71 | } 72 | 73 | if($counter -gt 1){ 74 | Write-Verbose "MULTIPLE SECURITY QUESTION ENTRIES WERE RETURNED, ADD MORE TO QUERY TO NARROW RESULTS" 75 | $log = Write-VPASTextRecorder -inputval "MULTIPLE SECURITY QUESTION ENTRIES WERE RETURNED, ADD MORE TO QUERY TO NARROW RESULTS" -token $token -LogType MISC -Helper 76 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 77 | return -1 78 | } 79 | elseif($counter -eq 0){ 80 | Write-Verbose "NO SECURITY QUESTIONS FOUND" 81 | Write-VPASOutput -str "NO SECURITY QUESTIONS FOUND" -type E 82 | $log = Write-VPASTextRecorder -inputval "NO SECURITY QUESTIONS FOUND" -token $token -LogType MISC -Helper 83 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 84 | return -2 85 | } 86 | else{ 87 | write-verbose "FOUND UNIQUE SECURITY QUESTION UUID" 88 | Write-Verbose "RETURNING UNIQUE SECURITY QUESTION UUID" 89 | $log = Write-VPASTextRecorder -inputval "RETURNING UNIQUE SECURITY QUESTION UUID $returnID" -token $token -LogType MISC -Helper 90 | return $returnID 91 | } 92 | }catch{ 93 | Write-Verbose "UNABLE TO QUERY IDENTITY" 94 | Write-VPASOutput -str $_ -type E 95 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR -Helper 96 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 97 | } 98 | } 99 | End{ 100 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER -Helper 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Get-VPASSession.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | Get session variables 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | Helper function to retrieve current session variables 7 | #> 8 | function Get-VPASSession{ 9 | [OutputType([String],[bool],'System.Object[]')] 10 | [CmdletBinding()] 11 | Param( 12 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=0)] 13 | [hashtable]$token 14 | ) 15 | 16 | Begin{ 17 | 18 | } 19 | Process{ 20 | try{ 21 | if($token){ 22 | $tokenval = $token.token 23 | $sessionval = $token.session 24 | $PVWA = $token.pvwa 25 | $Header = $token.HeaderType 26 | $ISPSS = $token.ISPSS 27 | $IdentityURL = $token.IdentityURL 28 | $EnableTextRecorder = $token.EnableTextRecorder 29 | $AuditTimeStamp = $token.AuditTimeStamp 30 | $NoSSL = $token.NoSSL 31 | $VaultVersion = $token.VaultVersion 32 | $HideWarnings = $token.HideWarnings 33 | $AuthenticatedAs = $token.AuthenticatedAs 34 | $SubDomain = $token.SubDomain 35 | $EnableTroubleshooting = $token.EnableTroubleshooting 36 | } 37 | else{ 38 | $tokenval = $Script:VPAStoken.token 39 | $sessionval = $Script:VPAStoken.session 40 | $PVWA = $Script:VPAStoken.pvwa 41 | $Header = $Script:VPAStoken.HeaderType 42 | $ISPSS = $Script:VPAStoken.ISPSS 43 | $IdentityURL = $Script:VPAStoken.IdentityURL 44 | $EnableTextRecorder = $Script:VPAStoken.EnableTextRecorder 45 | $AuditTimeStamp = $Script:VPAStoken.AuditTimeStamp 46 | $NoSSL = $Script:VPAStoken.NoSSL 47 | $VaultVersion = $Script:VPAStoken.VaultVersion 48 | $HideWarnings = $Script:VPAStoken.HideWarnings 49 | $AuthenticatedAs = $Script:VPAStoken.AuthenticatedAs 50 | $SubDomain = $Script:VPAStoken.SubDomain 51 | $EnableTroubleshooting = $Script:VPAStoken.EnableTroubleshooting 52 | } 53 | 54 | if([String]::IsNullOrEmpty($tokenval)){ 55 | Write-Verbose "UNABLE TO FIND A SESSION TOKEN" 56 | Write-VPASOutput -str "UNABLE TO FIND A SESSION TOKEN" -type E -Initialized 57 | Write-VPASOutput -str "CREATE A SESSION TOKEN BY RUNNING New-VPASToken" -type E -Initialized 58 | return $false 59 | } 60 | else{ 61 | return $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting 62 | } 63 | }catch{ 64 | Write-Verbose "UNABLE TO FIND A SESSION TOKEN" 65 | Write-VPASOutput -str $_ -type E -Initialized 66 | } 67 | } 68 | End{ 69 | 70 | } 71 | } -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Get-VPASUsagePlatformIDHelper.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | Get usage platform ID 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | Helper function to retrieve usage platform IDs from CyberArk 7 | #> 8 | function Get-VPASUsagePlatformIDHelper{ 9 | [OutputType([String],'System.Int32')] 10 | [CmdletBinding()] 11 | Param( 12 | 13 | [Parameter(ValueFromPipelineByPropertyName=$true,Position=0)] 14 | [String]$usageplatformID, 15 | 16 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=1)] 17 | [hashtable]$token 18 | ) 19 | 20 | Begin{ 21 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 22 | $CommandName = $MyInvocation.MyCommand.Name 23 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND -Helper 24 | } 25 | Process{ 26 | try{ 27 | $platformID = $usageplatformID 28 | Write-Verbose "CONSTRUCTING SEARCH STRING TO QUERY CYBERARK" 29 | $searchQuery = "$platformID" 30 | 31 | if($NoSSL){ 32 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 33 | $uri = "http://$PVWA/passwordvault/api/platforms/dependents/" 34 | } 35 | else{ 36 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 37 | $uri = "https://$PVWA/passwordvault/api/platforms/dependents/" 38 | } 39 | write-verbose "MAKING API CALL" 40 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI -Helper 41 | $log = Write-VPASTextRecorder -inputval "GET" -token $token -LogType METHOD -Helper 42 | 43 | if($sessionval){ 44 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" -WebSession $sessionval 45 | } 46 | else{ 47 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" 48 | } 49 | 50 | $counter = $response.Total 51 | Write-Verbose "FOUND $counter USAGE PLATFORMS...LOOKING FOR TARGET USAGE PLATFORMID: $searchQuery" 52 | 53 | $output = -1 54 | foreach($rec in $response.Platforms){ 55 | $recid = $rec.ID 56 | $recplatformid = $rec.PlatformID 57 | $recname = $rec.Name 58 | 59 | if($recplatformid -eq $platformID -or $recname -eq $platformID){ 60 | $output = [int]$recid 61 | Write-Verbose "FOUND $platformID : TARGET ENTRY FOUND, RETURNING ID" 62 | $logoutput = $rec | ConvertTo-Json | ConvertFrom-Json 63 | $log = Write-VPASTextRecorder -inputval $logoutput -token $token -LogType RETURN -Helper 64 | return $output 65 | } 66 | Write-Verbose "FOUND $recplatformid : NOT TARGET ENTRY (SKIPPING)" 67 | 68 | } 69 | Write-Verbose "CAN NOT FIND TARGET ENTRY, RETURNING -1" 70 | $log = Write-VPASTextRecorder -inputval "CAN NOT FIND TARGET ENTRY" -token $token -LogType MISC -Helper 71 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 72 | return $output 73 | }catch{ 74 | Write-Verbose "UNABLE TO QUERY CYBERARK" 75 | Write-VPASOutput -str $_ -type E 76 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR -Helper 77 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 78 | } 79 | } 80 | End{ 81 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER -Helper 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Get-VPASUserIDIdentityHelper.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | Get Identity user ID 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | Helper function to retrieve user IDs from Identity 7 | #> 8 | function Get-VPASUserIDIdentityHelper{ 9 | [OutputType([String],'System.Int32',[bool])] 10 | [CmdletBinding()] 11 | Param( 12 | 13 | [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=0)] 14 | [String]$User, 15 | 16 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=1)] 17 | [hashtable]$token 18 | ) 19 | 20 | Begin{ 21 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 22 | $CommandName = $MyInvocation.MyCommand.Name 23 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND -Helper 24 | } 25 | Process{ 26 | $log = Write-VPASTextRecorder -inputval "SEARCHING FOR *$User* IDENTITY USER" -token $token -LogType MISC -Helper 27 | try{ 28 | if(!$IdentityURL){ 29 | $log = Write-VPASTextRecorder -inputval "LOGIN TOKEN WAS NOT GENERATED THROUGH IDENTITY, TERMINATING API CALL" -token $token -LogType MISC -Helper 30 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 31 | Write-VPASOutput -str "LOGIN TOKEN WAS NOT GENERATED THROUGH IDENTITY, TERMINATING API CALL" -type E 32 | return $false 33 | } 34 | 35 | Write-Verbose "CONSTRUCTING PARAMETERS" 36 | $params = @{ 37 | Script = "Select UserName, ID from User ORDER BY Username COLLATE NOCASE" 38 | } 39 | $log = Write-VPASTextRecorder -inputval $params -token $token -LogType PARAMS -Helper 40 | $params = $params | ConvertTo-Json 41 | 42 | if($NoSSL){ 43 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 44 | $uri = "http://$IdentityURL/Redrock/query" 45 | } 46 | else{ 47 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 48 | $uri = "https://$IdentityURL/Redrock/query" 49 | } 50 | write-verbose "MAKING API CALL" 51 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI -Helper 52 | $log = Write-VPASTextRecorder -inputval "POST" -token $token -LogType METHOD -Helper 53 | 54 | if($sessionval){ 55 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method POST -Body $params -ContentType "application/json" -WebSession $sessionval 56 | } 57 | else{ 58 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method POST -Body $params -ContentType "application/json" 59 | } 60 | $result = $response 61 | 62 | $counter = 0 63 | $returnID = "" 64 | foreach($role in $result.Result.Results.Row){ 65 | $RECroleName = $role.Username 66 | $RECroleID = $role.ID 67 | 68 | if($RECroleName -match $User){ 69 | $counter += 1 70 | $returnID = $RECroleID 71 | } 72 | 73 | if($RECroleName -eq $User){ 74 | Write-Verbose "FOUND TARGET USER, RETURNING UNIQUE ID" 75 | $logoutput = $role | ConvertTo-Json | ConvertFrom-Json 76 | $log = Write-VPASTextRecorder -inputval $role -token $token -LogType RETURN -Helper 77 | return $RECroleID 78 | } 79 | } 80 | 81 | if($counter -gt 1){ 82 | Write-Verbose "MULTIPLE USER ENTRIES WERE RETURNED, ADD MORE TO NAME TO NARROW RESULTS" 83 | $log = Write-VPASTextRecorder -inputval "MULTIPLE USER ENTRIES WERE RETURNED, ADD MORE TO NAME TO NARROW RESULTS" -token $token -LogType MISC -Helper 84 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 85 | return -1 86 | } 87 | elseif($counter -eq 0){ 88 | Write-Verbose "NO USERS FOUND" 89 | Write-VPASOutput -str "NO USERS FOUND" -type E 90 | $log = Write-VPASTextRecorder -inputval "NO USERS FOUND" -token $token -LogType MISC -Helper 91 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 92 | return -2 93 | } 94 | else{ 95 | write-verbose "FOUND UNIQUE USER ID" 96 | Write-Verbose "RETURNING UNIQUE USER ID" 97 | $log = Write-VPASTextRecorder -inputval "FOUND UNIQUE IDENTITY USER ID $returnID" -token $token -LogType MISC -Helper 98 | return $returnID 99 | } 100 | }catch{ 101 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR -Helper 102 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC -Helper 103 | Write-Verbose "UNABLE TO QUERY IDENTITY" 104 | Write-VPASOutput -str $_ -type E 105 | } 106 | } 107 | End{ 108 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER -Helper 109 | } 110 | } -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Test-VPASHashtableKeysHelper.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | Check hashtable values 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | Helper function to check hashtable values 7 | #> 8 | function Test-VPASHashtableKeysHelper{ 9 | [OutputType([bool])] 10 | [CmdletBinding()] 11 | Param( 12 | [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)] 13 | [hashtable]$InputHash, 14 | 15 | [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)] 16 | [hashtable]$KeyHash 17 | ) 18 | 19 | Begin{ 20 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 21 | } 22 | Process{ 23 | try{ 24 | Write-verbose "CHECKING HASHTABLE ACCURACY" 25 | 26 | $AllAcceptables = @() 27 | foreach($key in $KeyHash.Keys){ 28 | $AcceptableKeys = $KeyHash.$key.AcceptableKeys 29 | foreach($minikey in $AcceptableKeys){ 30 | $AllAcceptables += $minikey 31 | } 32 | } 33 | if($AllAcceptables.count -eq 0){ 34 | Write-Verbose "NO INPUTS NEEDED, NOTHING TO CHECK, RETURNING TRUE" 35 | return $true 36 | } 37 | else{ 38 | $AllAcceptables = $AllAcceptables.toLower() 39 | } 40 | 41 | foreach($key in $KeyHash.Keys){ 42 | Write-Verbose "ANALYZING PARAMETER SET: $key" 43 | $setpass = $true 44 | 45 | #CHECK MANDATORY KEYS 46 | $MandatoryKeys = $KeyHash.$key.MandatoryKeys 47 | $tempMandatory = @{} 48 | foreach($tempkey in $MandatoryKeys){ 49 | $tempkey = $tempkey.toLower() 50 | $tempMandatory += @{ 51 | $tempkey = $false 52 | } 53 | } 54 | 55 | #CHECK ACCEPTABLE KEYS 56 | $AcceptableKeys = $KeyHash.$key.AcceptableKeys.toLower() 57 | foreach($inputKey in $InputHash.Keys){ 58 | $inputKey = $inputKey.ToLower() 59 | if(!$AllAcceptables.Contains($inputKey)){ 60 | $log = Write-VPASTextRecorder -inputval "UNKNOWN KEY IN InputParameters: $inputKey" -token $token -LogType MISC 61 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 62 | Write-Verbose "UNKNOWN KEY IN InputParameters: $inputKey" 63 | Write-VPASOutput -str "UNKNOWN KEY IN InputParameters: $inputKey" -type E 64 | return $false 65 | } 66 | 67 | if(!$AcceptableKeys.Contains($inputKey)){ 68 | $setpass = $false 69 | } 70 | else{ 71 | $tempMandatory.$inputKey = $true 72 | } 73 | } 74 | 75 | #PROCESS SET 76 | if(!$setpass){ 77 | Write-Verbose "PARAMETER SET: $key ACCEPTABLE KEYS NOT PASSED" 78 | } 79 | else{ 80 | #CHECK MISSING MANDATORIES 81 | $mandatoryPassed = $true 82 | foreach($finalkey in $tempMandatory.Keys){ 83 | if(!$tempMandatory.$finalkey){ 84 | $mandatoryPassed = $false 85 | } 86 | } 87 | 88 | if($mandatoryPassed){ 89 | Write-Verbose "PARAMETER SET: $key PASSED...RETURNING $key" 90 | return $key 91 | } 92 | else{ 93 | Write-Verbose "PARAMETER SET: $key MANDATORY KEYS NOT PASSED" 94 | } 95 | } 96 | } 97 | 98 | Write-Verbose "NO PARAMETER SETS PASSED CHECK...RETURNING FALSE" 99 | $log = Write-VPASTextRecorder -inputval "NO PARAMETER SETS PASSED CHECK...RETURNING FALSE" -token $token -LogType MISC 100 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 101 | Write-VPASOutput -str "NO PARAMETER SETS PASSED CHECK...DOUBLE CHECK THE SYNTAX FOR InputParameters...RETURNING FALSE" -type E 102 | 103 | 104 | 105 | return $false 106 | }catch{ 107 | Write-VPASOutput -str "HASHTABLE CHECKING FAILED " -type E 108 | Write-VPASOutput -str "$_" -type E 109 | return $false 110 | } 111 | } 112 | End{ 113 | 114 | } 115 | } 116 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Write-Iterate.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | Iterate parameter params 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | Helper function to iterate parameter params 7 | #> 8 | function Write-Iterate{ 9 | [OutputType([bool])] 10 | [CmdletBinding()] 11 | 12 | Param( 13 | [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=0)] 14 | [psobject]$inputval, 15 | 16 | [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=1)] 17 | [int]$counter, 18 | 19 | [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=2)] 20 | [String]$targetLog 21 | ) 22 | 23 | Begin{ 24 | 25 | } 26 | Process{ 27 | foreach($key in $inputval.Keys){ 28 | $keyval = $inputval.$key 29 | if($keyval.Keys){ 30 | $timestamp = Get-Date -Format "(MM-dd-yyyy HH:mm:ss)" 31 | $outputstr = "$timestamp : " 32 | $tempcount = 0 33 | while($tempcount -lt $counter){ 34 | $outputstr += "`t" 35 | $tempcount += 1 36 | } 37 | $outputstr += "$key = @{" 38 | write-output $outputstr | Add-Content $targetLog 39 | 40 | $counter = Write-Iterate -inputval $keyval -counter ($counter + 1) -targetLog $targetLog 41 | 42 | $counter -= 1 43 | $timestamp = Get-Date -Format "(MM-dd-yyyy HH:mm:ss)" 44 | $outputstr = "$timestamp : " 45 | $tempcount = 0 46 | while($tempcount -lt $counter){ 47 | $outputstr += "`t" 48 | $tempcount += 1 49 | } 50 | $outputstr += "}" 51 | write-output $outputstr | Add-Content $targetLog 52 | } 53 | else{ 54 | $timestamp = Get-Date -Format "(MM-dd-yyyy HH:mm:ss)" 55 | $outputstr = "$timestamp : " 56 | $tempcount = 0 57 | while($tempcount -lt $counter){ 58 | $outputstr += "`t" 59 | $tempcount += 1 60 | } 61 | $outputstr += "$key = $keyval" 62 | write-output $outputstr | Add-Content $targetLog 63 | } 64 | } 65 | return $counter 66 | } 67 | End{ 68 | 69 | } 70 | } -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Write-VPASExampleHelper.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | OUTPUT COMMAND EXAMPLES 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | Helper function to output a commands examples in a readable format 7 | #> 8 | function Write-VPASExampleHelper{ 9 | [OutputType([bool])] 10 | [CmdletBinding()] 11 | Param( 12 | [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)] 13 | [String]$CommandName 14 | ) 15 | 16 | Begin{ 17 | 18 | } 19 | Process{ 20 | try{ 21 | Write-verbose "CHECKING COMMAND EXAMPLES" 22 | $CommandHelp = Get-help $CommandName -Full 23 | 24 | $AllExamples = $CommandHelp.examples.example 25 | foreach($ExampleRec in $AllExamples){ 26 | $str1 = $ExampleRec.code | Out-String 27 | $str2 = $ExampleRec.remarks | Out-String 28 | 29 | if($str1 -match "InputParameters"){ 30 | $ministr = "$str1`n$str2" 31 | $curlycount = 0 32 | $outputstr = "" 33 | 34 | $ministrsplit = $ministr.Split("`r`n") 35 | foreach($txt2 in $ministrsplit){ 36 | if($txt2.length -ne 0){ 37 | if($txt2 -match "}"){ 38 | $curlycount -= 1 39 | } 40 | if($txt2 -match "\]"){ 41 | $curlycount -= 1 42 | } 43 | 44 | $i = 0 45 | while($i -lt ($curlycount)){ 46 | $outputstr += "`t" 47 | $i += 1 48 | } 49 | $outputstr += $txt2 50 | $outputstr += "`n" 51 | 52 | if($txt2 -match "{"){ 53 | $curlycount += 1 54 | } 55 | if($txt2 -match "\["){ 56 | $curlycount += 1 57 | } 58 | } 59 | } 60 | $outputstr = $outputstr.Substring(0,($outputstr.Length-1)) 61 | Write-VPASOutput -str "$outputstr`n`n" -type DY 62 | } 63 | } 64 | return $true 65 | }catch{ 66 | Write-VPASOutput -str "EXAMPLE HELPER FAILED" -type E 67 | Write-VPASOutput -str "$_" -type E 68 | return $false 69 | } 70 | } 71 | End{ 72 | 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Write-VPASLogger.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | Output to log files 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | Helper function to log outputs for bulk operations 7 | #> 8 | function Write-VPASLogger{ 9 | [OutputType([bool])] 10 | [CmdletBinding()] 11 | Param( 12 | [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=0)] 13 | [String]$LogStr, 14 | 15 | [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=1)] 16 | [ValidateSet('BulkSafeCreation','BulkAccountCreation','BulkSafeMembers')] 17 | [String]$BulkOperation, 18 | 19 | [Parameter(ValueFromPipelineByPropertyName=$true,Position=2)] 20 | [Switch]$NewFile 21 | ) 22 | 23 | Begin{ 24 | 25 | } 26 | Process{ 27 | try{ 28 | Write-verbose "RECIEVED LOGSTR: $LogStr" 29 | Write-Verbose "LOGGING TO CORRECT LOG: $BulkOperation" 30 | 31 | $timestamp = Get-Date -Format "(MM-dd-yyyy HH:mm:ss)" 32 | $curUser = $env:UserName 33 | $targetDirectory = "C:\Users\$curUser\AppData\Local\VPASModuleOutputs" 34 | $targetLogsDirectory = "C:\Users\$curUser\AppData\Local\VPASModuleOutputs\Logs" 35 | 36 | #SELECTING LOG 37 | if($BulkOperation -eq "BulkSafeCreation"){ 38 | $targetLog = "C:\Users\$curUser\AppData\Local\VPASModuleOutputs\Logs\BulkSafeCreationLog.log" 39 | Write-Verbose "SETTING TARGETLOG: $targetLog" 40 | } 41 | elseif($BulkOperation -eq "BulkAccountCreation"){ 42 | $targetLog = "C:\Users\$curUser\AppData\Local\VPASModuleOutputs\Logs\BulkAccountCreationLog.log" 43 | Write-Verbose "SETTING TARGETLOG: $targetLog" 44 | } 45 | elseif($BulkOperation -eq "BulkSafeMembers"){ 46 | $targetLog = "C:\Users\$curUser\AppData\Local\VPASModuleOutputs\Logs\BulkSafeMembersLog.log" 47 | Write-Verbose "SETTING TARGETLOG: $targetLog" 48 | } 49 | 50 | #CREATING DIRECTORY 51 | if(Test-Path -Path $targetDirectory){ 52 | #DO NOTHING 53 | } 54 | else{ 55 | write-verbose "$targetDirectory DOES NOT EXIST, CREATING DIRECTORY" 56 | $MakeDirectory = New-Item -Path $targetDirectory -Type Directory 57 | } 58 | 59 | if(Test-Path -Path $targetLogsDirectory){ 60 | #DO NOTHING 61 | } 62 | else{ 63 | write-verbose "$targetLogsDirectory DOES NOT EXIST, CREATING DIRECTORY" 64 | $MakeDirectory = New-Item -Path $targetLogsDirectory -Type Directory 65 | } 66 | 67 | 68 | if($NewFile){ 69 | write-output "$timestamp : BEGIN LOG" | Set-Content $targetLog 70 | } 71 | 72 | write-output "$timestamp : $LogStr" | Add-Content $targetLog 73 | return $true 74 | }catch{ 75 | Write-VPASOutput -str "COULD NOT WRITE TO LOGS" -type E 76 | Write-VPASOutput -str "$_" -type E 77 | return $false 78 | } 79 | } 80 | End{ 81 | 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/private/Write-VPASTypewriter.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | OUTPUT TEXT WITH A TYPEWRITER EFFECT 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | Helper function to output text with the typewriter effect 7 | #> 8 | function Write-VPASTypewriter{ 9 | [OutputType([bool])] 10 | [CmdletBinding()] 11 | Param( 12 | [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)] 13 | [String]$str, 14 | 15 | [Parameter(Mandatory=$true,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true,HelpMessage="Enter type of string (C, G, M, E, Y, S, DY)")] 16 | [ValidateSet('C','G','M','E','Y','S','DY')] 17 | [String]$type, 18 | 19 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)] 20 | [Switch]$NoNewLine, 21 | 22 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)] 23 | [Switch]$ReadInput 24 | ) 25 | 26 | Begin{ 27 | 28 | } 29 | Process{ 30 | if($type -eq "g"){ 31 | $color = "Green" 32 | } 33 | elseif($type -eq "c"){ 34 | $color = "Cyan" 35 | } 36 | elseif($type -eq "e"){ 37 | $color = "Red" 38 | } 39 | elseif($type -eq "m"){ 40 | $color = "Magenta" 41 | } 42 | elseif($type -eq "y"){ 43 | $color = "Yellow" 44 | } 45 | elseif($type -eq "s"){ 46 | $color = "Gray" 47 | } 48 | elseif($type -eq "dy"){ 49 | $color = "DarkYellow" 50 | } 51 | 52 | if($str -eq "@@@"){ $str = "" } 53 | $Speed = 0 54 | foreach ($Char in $str.ToCharArray()) { 55 | Write-Host -NoNewline $Char -ForegroundColor $color 56 | Start-Sleep -Milliseconds $Speed 57 | } 58 | if(!$NoNewLine){ 59 | write-host "" 60 | } 61 | } 62 | End{ 63 | 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/public/Add-VPASAllowedReferrer.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | ADD ALLOWED REFERRERS 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | USE THIS FUNCTION TO ADD ALLOWED REFERRERS TO CYBERARK 7 | .LINK 8 | https://vpasmodule.com/commands/Add-VPASAllowedReferrer 9 | .NOTES 10 | SelfHosted: TRUE 11 | PrivCloudStandard: TRUE 12 | SharedServices: TRUE 13 | .PARAMETER token 14 | HashTable of data containing various pieces of login information (PVWA, LoginToken, HeaderType, etc). 15 | If -token is not passed, function will use last known hashtable generated by New-VPASToken 16 | .PARAMETER ReferrerURL 17 | Target URL that will be whitelisted to allow the PVWA to redirect from 18 | .PARAMETER RegularExpression 19 | Define if the ReferrerURL will be treated as a regular expression 20 | .PARAMETER InputParameters 21 | HashTable of values containing the parameters required to make the API call 22 | .EXAMPLE 23 | $AddAllowedReferrerStatus = Add-VPASAllowedReferrer -ReferrerURL {REFERRERURL VALUE} -RegularExpression 24 | .EXAMPLE 25 | $InputParameters = @{ 26 | ReferrerURL = "vpasmodule.com" 27 | RegularExpression = $true|$false 28 | } 29 | $AddAllowedReferrerStatus = Add-VPASAllowedReferrer -InputParameters $InputParameters 30 | .OUTPUTS 31 | $true if successful 32 | --- 33 | $false if failed 34 | #> 35 | function Add-VPASAllowedReferrer{ 36 | [OutputType([bool])] 37 | [CmdletBinding(DefaultParameterSetName='Set1')] 38 | Param( 39 | 40 | [Parameter(Mandatory=$true,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true,HelpMessage="Enter new Referrer URL (for example: https://CompanySite.com/)")] 41 | [String]$ReferrerURL, 42 | 43 | [Parameter(Mandatory=$false,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true)] 44 | [Switch]$RegularExpression, 45 | 46 | [Parameter(Mandatory=$true,ParameterSetName='InputParameters',ValueFromPipelineByPropertyName=$true,HelpMessage="Hashtable of parameters required to make API call, refer to get-help -examples for valid inputs")] 47 | [hashtable]$InputParameters, 48 | 49 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)] 50 | [hashtable]$token 51 | ) 52 | 53 | Begin{ 54 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 55 | $CommandName = $MyInvocation.MyCommand.Name 56 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND 57 | } 58 | Process{ 59 | try{ 60 | if($PSCmdlet.ParameterSetName -eq "InputParameters"){ 61 | $KeyHash = @{ 62 | set1 = @{ 63 | AcceptableKeys = @("ReferrerURL","RegularExpression") 64 | MandatoryKeys = @("ReferrerURL") 65 | } 66 | } 67 | $CheckSet = Test-VPASHashtableKeysHelper -InputHash $InputParameters -KeyHash $KeyHash 68 | 69 | if(!$CheckSet){ 70 | $log = Write-VPASTextRecorder -inputval "FAILED TO FIND TARGET PARAMETER SET" -token $token -LogType MISC 71 | Write-Verbose "FAILED TO FIND TARGET PARAMETER SET" 72 | Write-VPASOutput -str "FAILED TO FIND TARGET PARAMETER SET...VIEW EXAMPLES BELOW:" -type E 73 | $examples = Write-VPASExampleHelper -CommandName $CommandName 74 | return $false 75 | } 76 | else{ 77 | foreach($key in $InputParameters.Keys){ 78 | Set-Variable -Name $key -Value $InputParameters.$key 79 | } 80 | } 81 | } 82 | }catch{ 83 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 84 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 85 | Write-Verbose "FAILED TO ADD ALLOWED REFERRER" 86 | Write-VPASOutput -str $_ -type E 87 | return $false 88 | } 89 | 90 | try{ 91 | write-verbose "INITIALIZING API PARAMETERS" 92 | $params = @{ 93 | referrerURL = $ReferrerURL 94 | } 95 | 96 | if($RegularExpression){ 97 | $params += @{ 98 | regularExpression = "True" 99 | } 100 | } 101 | else{ 102 | $params += @{ 103 | regularExpression = "False" 104 | } 105 | } 106 | $log = Write-VPASTextRecorder -inputval $params -token $token -LogType PARAMS 107 | $params = $params | ConvertTo-Json 108 | 109 | if($NoSSL){ 110 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 111 | $uri = "http://$PVWA/passwordvault/api/Configuration/AccessRestriction/AllowedReferrers" 112 | } 113 | else{ 114 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 115 | $uri = "https://$PVWA/passwordvault/api/Configuration/AccessRestriction/AllowedReferrers" 116 | } 117 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI 118 | $log = Write-VPASTextRecorder -inputval "POST" -token $token -LogType METHOD 119 | 120 | write-verbose "MAKING API CALL TO CYBERARK" 121 | 122 | if($sessionval){ 123 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method POST -Body $params -ContentType "application/json" -WebSession $sessionval 124 | } 125 | else{ 126 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method POST -Body $params -ContentType "application/json" 127 | } 128 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: TRUE" -token $token -LogType MISC 129 | Write-Verbose "SUCCESSFULLY ADDED ALLOWED REFERRER: $ReferrerURL" 130 | return $true 131 | }catch{ 132 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 133 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 134 | Write-Verbose "UNABLE TO ADD ALLOWED REFERRER" 135 | Write-VPASOutput -str $_ -type E 136 | return $false 137 | } 138 | } 139 | End{ 140 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER 141 | } 142 | } 143 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/public/Disable-VPASCustomTheme.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | DISABLE CUSTOM THEME 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | USE THIS FUNCTION TO DISABLE A CUSTOM THEME IN CYBERARK AND REVERT BACK TO DEFAULT THEME 7 | .LINK 8 | https://vpasmodule.com/commands/Disable-VPASCustomTheme 9 | .NOTES 10 | SelfHosted: TRUE 11 | PrivCloudStandard: FALSE 12 | SharedServices: FALSE 13 | .PARAMETER token 14 | HashTable of data containing various pieces of login information (PVWA, LoginToken, HeaderType, etc). 15 | If -token is not passed, function will use last known hashtable generated by New-VPASToken 16 | .PARAMETER InputParameters 17 | HashTable of values containing the parameters required to make the API call 18 | .EXAMPLE 19 | $DisableThemeStatus = Disable-VPASCustomTheme 20 | .EXAMPLE 21 | $InputParameters = @{} 22 | $DisableThemeStatus = Disable-VPASCustomTheme -InputParameters $InputParameters 23 | .OUTPUTS 24 | $true if successful 25 | --- 26 | $false if failed 27 | #> 28 | function Disable-VPASCustomTheme{ 29 | [OutputType([bool])] 30 | [CmdletBinding(DefaultParameterSetName='Set1')] 31 | Param( 32 | [Parameter(Mandatory=$true,ParameterSetName='InputParameters',ValueFromPipelineByPropertyName=$true,HelpMessage="Hashtable of parameters required to make API call, refer to get-help -examples for valid inputs")] 33 | [hashtable]$InputParameters, 34 | 35 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)] 36 | [hashtable]$token 37 | ) 38 | 39 | Begin{ 40 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 41 | $CommandName = $MyInvocation.MyCommand.Name 42 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND 43 | } 44 | Process{ 45 | try{ 46 | if($PSCmdlet.ParameterSetName -eq "InputParameters"){ 47 | $KeyHash = @{ 48 | set1 = @{ 49 | AcceptableKeys = @() 50 | MandatoryKeys = @() 51 | } 52 | } 53 | $CheckSet = Test-VPASHashtableKeysHelper -InputHash $InputParameters -KeyHash $KeyHash 54 | 55 | if(!$CheckSet){ 56 | $log = Write-VPASTextRecorder -inputval "FAILED TO FIND TARGET PARAMETER SET" -token $token -LogType MISC 57 | Write-Verbose "FAILED TO FIND TARGET PARAMETER SET" 58 | Write-VPASOutput -str "FAILED TO FIND TARGET PARAMETER SET...VIEW EXAMPLES BELOW:" -type E 59 | $examples = Write-VPASExampleHelper -CommandName $CommandName 60 | return $false 61 | } 62 | else{ 63 | foreach($key in $InputParameters.Keys){ 64 | Set-Variable -Name $key -Value $InputParameters.$key 65 | } 66 | } 67 | } 68 | }catch{ 69 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 70 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 71 | Write-Verbose "FAILED TO RETRIEVE THEME DETAILS" 72 | Write-VPASOutput -str $_ -type E 73 | return $false 74 | } 75 | 76 | try{ 77 | Write-Verbose "MAKING API CALL TO CYBERARK" 78 | if($NoSSL){ 79 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 80 | $uri = "http://$PVWA/PasswordVault/API/ActiveThemes/" 81 | } 82 | else{ 83 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 84 | $uri = "https://$PVWA/PasswordVault/API/ActiveThemes/" 85 | } 86 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI 87 | $log = Write-VPASTextRecorder -inputval "DELETE" -token $token -LogType METHOD 88 | 89 | if($sessionval){ 90 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method DELETE -ContentType "application/json" -WebSession $sessionval 91 | } 92 | else{ 93 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method DELETE -ContentType "application/json" 94 | } 95 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: TRUE" -token $token -LogType MISC 96 | Write-Verbose "SUCCESSFULLY DISABLED CUSTOM THEME AND REVERETED BACK TO DEFAULT THEME" 97 | return $true 98 | }catch{ 99 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 100 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 101 | Write-Verbose "UNABLE TO DISABLE CUSTOM THEME" 102 | Write-VPASOutput -str $_ -type E 103 | return $false 104 | } 105 | } 106 | End{ 107 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/public/Disable-VPASPlatform.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | DEACTIVATE PLATFORM 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | USE THIS FUNCTION TO DEACTIVATE A PLATFORM (MAKE PLATFORM INACTIVE) 7 | .LINK 8 | https://vpasmodule.com/commands/Disable-VPASPlatform 9 | .NOTES 10 | SelfHosted: TRUE 11 | PrivCloudStandard: TRUE 12 | SharedServices: TRUE 13 | .PARAMETER token 14 | HashTable of data containing various pieces of login information (PVWA, LoginToken, HeaderType, etc). 15 | If -token is not passed, function will use last known hashtable generated by New-VPASToken 16 | .PARAMETER DeactivatePlatformID 17 | Unique PlatformID that will be deactivated 18 | .PARAMETER InputParameters 19 | HashTable of values containing the parameters required to make the API call 20 | .EXAMPLE 21 | $DeactivatePlatformStatus = Disable-VPASPlatform -DeactivatePlatformID {DEACTIVATE PLATFORMID VALUE} 22 | .EXAMPLE 23 | $InputParameters = @{ 24 | DeactivatePlatformID = "TargetPlatformID" 25 | } 26 | $DeactivatePlatformStatus = Disable-VPASPlatform -InputParameters $InputParameters 27 | .OUTPUTS 28 | $true if successful 29 | --- 30 | $false if failed 31 | #> 32 | function Disable-VPASPlatform{ 33 | [OutputType([bool])] 34 | [CmdletBinding(DefaultParameterSetName='Set1')] 35 | Param( 36 | 37 | [Parameter(Mandatory=$true,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true,HelpMessage="PlatformID of target platform to be disabled (for example: WinSeverLocal)")] 38 | [String]$DeactivatePlatformID, 39 | 40 | [Parameter(Mandatory=$true,ParameterSetName='InputParameters',ValueFromPipelineByPropertyName=$true,HelpMessage="Hashtable of parameters required to make API call, refer to get-help -examples for valid inputs")] 41 | [hashtable]$InputParameters, 42 | 43 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)] 44 | [hashtable]$token 45 | ) 46 | 47 | Begin{ 48 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 49 | $CommandName = $MyInvocation.MyCommand.Name 50 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND 51 | } 52 | Process{ 53 | try{ 54 | if($PSCmdlet.ParameterSetName -eq "InputParameters"){ 55 | $KeyHash = @{ 56 | set1 = @{ 57 | AcceptableKeys = @("DeactivatePlatformID") 58 | MandatoryKeys = @("DeactivatePlatformID") 59 | } 60 | } 61 | $CheckSet = Test-VPASHashtableKeysHelper -InputHash $InputParameters -KeyHash $KeyHash 62 | 63 | if(!$CheckSet){ 64 | $log = Write-VPASTextRecorder -inputval "FAILED TO FIND TARGET PARAMETER SET" -token $token -LogType MISC 65 | Write-Verbose "FAILED TO FIND TARGET PARAMETER SET" 66 | Write-VPASOutput -str "FAILED TO FIND TARGET PARAMETER SET...VIEW EXAMPLES BELOW:" -type E 67 | $examples = Write-VPASExampleHelper -CommandName $CommandName 68 | return $false 69 | } 70 | else{ 71 | foreach($key in $InputParameters.Keys){ 72 | Set-Variable -Name $key -Value $InputParameters.$key 73 | } 74 | } 75 | } 76 | }catch{ 77 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 78 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 79 | Write-Verbose "FAILED TO DISABLE PLATFORM" 80 | Write-VPASOutput -str $_ -type E 81 | return $false 82 | } 83 | 84 | try{ 85 | 86 | Write-Verbose "INVOKING PLATFORMID HELPER FUNCTION" 87 | $platID = Get-VPASPlatformIDHelper -token $token -platformID $DeactivatePlatformID 88 | 89 | if($platID -eq -1){ 90 | $log = Write-VPASTextRecorder -inputval "COULD NOT FIND TARGET PLATFORMID" -token $token -LogType MISC 91 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 92 | Write-Verbose "COULD NOT FIND TARGET PLATFORMID: $DeactivatePlatformID" 93 | Write-VPASOutput -str "COULD NOT FIND TARGET PLATFORMID: $DeactivatePlatformID" -type E 94 | return $false 95 | } 96 | else{ 97 | Write-Verbose "FOUND PLATFORMID: $platID" 98 | 99 | Write-Verbose "MAKING API CALL TO CYBERARK" 100 | if($NoSSL){ 101 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 102 | $uri = "http://$PVWA/passwordvault/api/platforms/targets/$platID/deactivate/" 103 | } 104 | else{ 105 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 106 | $uri = "https://$PVWA/passwordvault/api/platforms/targets/$platID/deactivate/" 107 | } 108 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI 109 | $log = Write-VPASTextRecorder -inputval "POST" -token $token -LogType METHOD 110 | 111 | if($sessionval){ 112 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method POST -ContentType "application/json" -WebSession $sessionval 113 | } 114 | else{ 115 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method POST -ContentType "application/json" 116 | } 117 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: TRUE" -token $token -LogType MISC 118 | Write-Verbose "SUCCESSFULLY DEACTIVATED $DeactivatePlatformID" 119 | Write-Verbose "RETURNING TRUE" 120 | return $true 121 | } 122 | }catch{ 123 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 124 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 125 | Write-Verbose "UNABLE TO DEACTIVATE $DeactivatePlatformID" 126 | Write-VPASOutput -str $_ -type E 127 | return $false 128 | } 129 | } 130 | End{ 131 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER 132 | } 133 | } -------------------------------------------------------------------------------- /VpasModule/14.4.1/public/Enable-VPASCustomTheme.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | ENABLE CUSTOM THEME 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | USE THIS FUNCTION TO ENABLE A CUSTOM THEME IN CYBERARK 7 | .LINK 8 | https://vpasmodule.com/commands/Enable-VPASCustomTheme 9 | .NOTES 10 | SelfHosted: TRUE 11 | PrivCloudStandard: FALSE 12 | SharedServices: FALSE 13 | .PARAMETER token 14 | HashTable of data containing various pieces of login information (PVWA, LoginToken, HeaderType, etc). 15 | If -token is not passed, function will use last known hashtable generated by New-VPASToken 16 | .PARAMETER ThemeName 17 | Unique identifier of the target theme 18 | .PARAMETER InputParameters 19 | HashTable of values containing the parameters required to make the API call 20 | .EXAMPLE 21 | $EnableThemeStatus = Enable-VPASCustomTheme -ThemeName {THEME NAME VALUE} 22 | .EXAMPLE 23 | $InputParameters = @{ 24 | ThemeName = "vpasdark" 25 | } 26 | $EnableThemeStatus = Enable-VPASCustomTheme -InputParameters $InputParameters 27 | .OUTPUTS 28 | $true if successful 29 | --- 30 | $false if failed 31 | #> 32 | function Enable-VPASCustomTheme{ 33 | [OutputType([bool])] 34 | [CmdletBinding(DefaultParameterSetName='Set1')] 35 | Param( 36 | [Parameter(Mandatory=$true,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true,HelpMessage="Enter theme name (for example: vpasdark)")] 37 | [String]$ThemeName, 38 | 39 | [Parameter(Mandatory=$true,ParameterSetName='InputParameters',ValueFromPipelineByPropertyName=$true,HelpMessage="Hashtable of parameters required to make API call, refer to get-help -examples for valid inputs")] 40 | [hashtable]$InputParameters, 41 | 42 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)] 43 | [hashtable]$token 44 | ) 45 | 46 | Begin{ 47 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 48 | $CommandName = $MyInvocation.MyCommand.Name 49 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND 50 | } 51 | Process{ 52 | try{ 53 | if($PSCmdlet.ParameterSetName -eq "InputParameters"){ 54 | $KeyHash = @{ 55 | set1 = @{ 56 | AcceptableKeys = @("ThemeName") 57 | MandatoryKeys = @("ThemeName") 58 | } 59 | } 60 | $CheckSet = Test-VPASHashtableKeysHelper -InputHash $InputParameters -KeyHash $KeyHash 61 | 62 | if(!$CheckSet){ 63 | $log = Write-VPASTextRecorder -inputval "FAILED TO FIND TARGET PARAMETER SET" -token $token -LogType MISC 64 | Write-Verbose "FAILED TO FIND TARGET PARAMETER SET" 65 | Write-VPASOutput -str "FAILED TO FIND TARGET PARAMETER SET...VIEW EXAMPLES BELOW:" -type E 66 | $examples = Write-VPASExampleHelper -CommandName $CommandName 67 | return $false 68 | } 69 | else{ 70 | foreach($key in $InputParameters.Keys){ 71 | Set-Variable -Name $key -Value $InputParameters.$key 72 | } 73 | } 74 | } 75 | }catch{ 76 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 77 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 78 | Write-Verbose "FAILED TO RETRIEVE THEME DETAILS" 79 | Write-VPASOutput -str $_ -type E 80 | return $false 81 | } 82 | 83 | try{ 84 | write-verbose "INITIALIZING API PARAMETERS" 85 | $params = @{ 86 | themeName = $ThemeName 87 | } 88 | $log = Write-VPASTextRecorder -inputval $params -token $token -LogType PARAMS 89 | $params = $params | ConvertTo-Json 90 | 91 | Write-Verbose "MAKING API CALL TO CYBERARK" 92 | if($NoSSL){ 93 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 94 | $uri = "http://$PVWA/PasswordVault/API/ActiveThemes/" 95 | } 96 | else{ 97 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 98 | $uri = "https://$PVWA/PasswordVault/API/ActiveThemes/" 99 | } 100 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI 101 | $log = Write-VPASTextRecorder -inputval "POST" -token $token -LogType METHOD 102 | 103 | if($sessionval){ 104 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method POST -Body $params -ContentType "application/json" -WebSession $sessionval 105 | } 106 | else{ 107 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method POST -Body $params -ContentType "application/json" 108 | } 109 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: TRUE" -token $token -LogType MISC 110 | Write-Verbose "SUCCESSFULLY ENABLED CUSTOM THEME: $ThemeName" 111 | return $true 112 | }catch{ 113 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 114 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 115 | Write-Verbose "UNABLE TO ENABLE CUSTOM THEME" 116 | Write-VPASOutput -str $_ -type E 117 | return $false 118 | } 119 | } 120 | End{ 121 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/public/Enable-VPASGroupPlatform.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | ACTIVATE GROUP PLATFORM 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | USE THIS FUNCTION TO ACTIVATE A GROUP PLATFORM (MAKE GROUP PLATFORM ACTIVE) 7 | .LINK 8 | https://vpasmodule.com/commands/Enable-VPASGroupPlatform 9 | .NOTES 10 | SelfHosted: TRUE 11 | PrivCloudStandard: TRUE 12 | SharedServices: TRUE 13 | .PARAMETER token 14 | HashTable of data containing various pieces of login information (PVWA, LoginToken, HeaderType, etc). 15 | If -token is not passed, function will use last known hashtable generated by New-VPASToken 16 | .PARAMETER ActivateGroupPlatformID 17 | Unique GroupPlatformID that will be activated 18 | .PARAMETER InputParameters 19 | HashTable of values containing the parameters required to make the API call 20 | .EXAMPLE 21 | $ActivateGroupPlatformStatus = Enable-VPASGroupPlatform -ActivateGroupPlatformID {ACTIVATE GROUP PLATFORMID VALUE} 22 | .EXAMPLE 23 | $InputParameters = @{ 24 | ActivateGroupPlatformID = "TargetGroupPlatformID" 25 | } 26 | $ActivateGroupPlatformStatus = Enable-VPASGroupPlatform -InputParameters $InputParameters 27 | .OUTPUTS 28 | $true if successful 29 | --- 30 | $false if failed 31 | #> 32 | function Enable-VPASGroupPlatform{ 33 | [OutputType([bool])] 34 | [CmdletBinding(DefaultParameterSetName='Set1')] 35 | Param( 36 | 37 | [Parameter(Mandatory=$true,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true,HelpMessage="PlatformID of target platform to be enabled (for example: GroupPlat)")] 38 | [String]$ActivateGroupPlatformID, 39 | 40 | [Parameter(Mandatory=$true,ParameterSetName='InputParameters',ValueFromPipelineByPropertyName=$true,HelpMessage="Hashtable of parameters required to make API call, refer to get-help -examples for valid inputs")] 41 | [hashtable]$InputParameters, 42 | 43 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)] 44 | [hashtable]$token 45 | ) 46 | 47 | Begin{ 48 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 49 | $CommandName = $MyInvocation.MyCommand.Name 50 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND 51 | } 52 | process{ 53 | try{ 54 | if($PSCmdlet.ParameterSetName -eq "InputParameters"){ 55 | $KeyHash = @{ 56 | set1 = @{ 57 | AcceptableKeys = @("ActivateGroupPlatformID") 58 | MandatoryKeys = @("ActivateGroupPlatformID") 59 | } 60 | } 61 | $CheckSet = Test-VPASHashtableKeysHelper -InputHash $InputParameters -KeyHash $KeyHash 62 | 63 | if(!$CheckSet){ 64 | $log = Write-VPASTextRecorder -inputval "FAILED TO FIND TARGET PARAMETER SET" -token $token -LogType MISC 65 | Write-Verbose "FAILED TO FIND TARGET PARAMETER SET" 66 | Write-VPASOutput -str "FAILED TO FIND TARGET PARAMETER SET...VIEW EXAMPLES BELOW:" -type E 67 | $examples = Write-VPASExampleHelper -CommandName $CommandName 68 | return $false 69 | } 70 | else{ 71 | foreach($key in $InputParameters.Keys){ 72 | Set-Variable -Name $key -Value $InputParameters.$key 73 | } 74 | } 75 | } 76 | }catch{ 77 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 78 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 79 | Write-Verbose "FAILED TO ENABLE GROUP PLATFORM" 80 | Write-VPASOutput -str $_ -type E 81 | return $false 82 | } 83 | 84 | try{ 85 | 86 | Write-Verbose "INVOKING GROUP PLATFORMID HELPER FUNCTION" 87 | $platID = Get-VPASGroupPlatformIDHelper -token $token -groupplatformID $ActivateGroupPlatformID 88 | 89 | if($platID -eq -1){ 90 | $log = Write-VPASTextRecorder -inputval "COULD NOT FIND TARGET GROUP PLATFORMID" -token $token -LogType MISC 91 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 92 | Write-Verbose "COULD NOT FIND TARGET GROUP PLATFORMID: $ActivateGroupPlatformID" 93 | Write-VPASOutput -str "COULD NOT FIND TARGET GROUP PLATFORMID: $ActivateGroupPlatformID" -type E 94 | return $false 95 | } 96 | else{ 97 | Write-Verbose "FOUND PLATFORMID: $platID" 98 | 99 | Write-Verbose "MAKING API CALL TO CYBERARK" 100 | if($NoSSL){ 101 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 102 | $uri = "http://$PVWA/passwordvault/api/platforms/groups/$platID/activate/" 103 | } 104 | else{ 105 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 106 | $uri = "https://$PVWA/passwordvault/api/platforms/groups/$platID/activate/" 107 | } 108 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI 109 | $log = Write-VPASTextRecorder -inputval "POST" -token $token -LogType METHOD 110 | 111 | if($sessionval){ 112 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method POST -ContentType "application/json" -WebSession $sessionval 113 | } 114 | else{ 115 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method POST -ContentType "application/json" 116 | } 117 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: TRUE" -token $token -LogType MISC 118 | Write-Verbose "SUCCESSFULLY ACTIVATED $ActivateGroupPlatformID" 119 | Write-Verbose "RETURNING TRUE" 120 | return $true 121 | } 122 | }catch{ 123 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 124 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 125 | Write-Verbose "UNABLE TO ACTIVATE $ActivateGroupPlatformID" 126 | Write-VPASOutput -str $_ -type E 127 | return $false 128 | } 129 | } 130 | End{ 131 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER 132 | } 133 | } -------------------------------------------------------------------------------- /VpasModule/14.4.1/public/Enable-VPASPlatform.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | ACTIVATE PLATFORM 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | USE THIS FUNCTION TO ACTIVATE A PLATFORM (MAKE PLATFORM ACTIVE) 7 | .LINK 8 | https://vpasmodule.com/commands/Enable-VPASPlatform 9 | .NOTES 10 | SelfHosted: TRUE 11 | PrivCloudStandard: TRUE 12 | SharedServices: TRUE 13 | .PARAMETER token 14 | HashTable of data containing various pieces of login information (PVWA, LoginToken, HeaderType, etc). 15 | If -token is not passed, function will use last known hashtable generated by New-VPASToken 16 | .PARAMETER ActivatePlatformID 17 | Unique PlatformID that will be activated 18 | .PARAMETER InputParameters 19 | HashTable of values containing the parameters required to make the API call 20 | .EXAMPLE 21 | $ActivatePlatformStatus = Enable-VPASPlatform -ActivatePlatformID {ACTIVATE PLATFORMID VALUE} 22 | .EXAMPLE 23 | $InputParameters = @{ 24 | ActivatePlatformID = "TargetPlatformID" 25 | } 26 | $ActivatePlatformStatus = Enable-VPASPlatform -InputParameters $InputParameters 27 | .OUTPUTS 28 | $true if successful 29 | --- 30 | $false if failed 31 | #> 32 | function Enable-VPASPlatform{ 33 | [OutputType([bool])] 34 | [CmdletBinding(DefaultParameterSetName='Set1')] 35 | Param( 36 | 37 | [Parameter(Mandatory=$true,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true,HelpMessage="PlatformID of target platform to be enabled (for example: WinSeverLocal)")] 38 | [String]$ActivatePlatformID, 39 | 40 | [Parameter(Mandatory=$true,ParameterSetName='InputParameters',ValueFromPipelineByPropertyName=$true,HelpMessage="Hashtable of parameters required to make API call, refer to get-help -examples for valid inputs")] 41 | [hashtable]$InputParameters, 42 | 43 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)] 44 | [hashtable]$token 45 | ) 46 | 47 | Begin{ 48 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 49 | $CommandName = $MyInvocation.MyCommand.Name 50 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND 51 | } 52 | Process{ 53 | try{ 54 | if($PSCmdlet.ParameterSetName -eq "InputParameters"){ 55 | $KeyHash = @{ 56 | set1 = @{ 57 | AcceptableKeys = @("ActivatePlatformID") 58 | MandatoryKeys = @("ActivatePlatformID") 59 | } 60 | } 61 | $CheckSet = Test-VPASHashtableKeysHelper -InputHash $InputParameters -KeyHash $KeyHash 62 | 63 | if(!$CheckSet){ 64 | $log = Write-VPASTextRecorder -inputval "FAILED TO FIND TARGET PARAMETER SET" -token $token -LogType MISC 65 | Write-Verbose "FAILED TO FIND TARGET PARAMETER SET" 66 | Write-VPASOutput -str "FAILED TO FIND TARGET PARAMETER SET...VIEW EXAMPLES BELOW:" -type E 67 | $examples = Write-VPASExampleHelper -CommandName $CommandName 68 | return $false 69 | } 70 | else{ 71 | foreach($key in $InputParameters.Keys){ 72 | Set-Variable -Name $key -Value $InputParameters.$key 73 | } 74 | } 75 | } 76 | }catch{ 77 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 78 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 79 | Write-Verbose "FAILED TO ENABLE PLATFORM" 80 | Write-VPASOutput -str $_ -type E 81 | return $false 82 | } 83 | 84 | try{ 85 | 86 | Write-Verbose "INVOKING PLATFORMID HELPER FUNCTION" 87 | $platID = Get-VPASPlatformIDHelper -token $token -platformID $ActivatePlatformID 88 | 89 | if($platID -eq -1){ 90 | $log = Write-VPASTextRecorder -inputval "COULD NOT FIND TARGET PLATFORMID" -token $token -LogType MISC 91 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 92 | Write-Verbose "COULD NOT FIND TARGET PLATFORMID: $ActivatePlatformID" 93 | Write-VPASOutput -str "COULD NOT FIND TARGET PLATFORMID: $ActivatePlatformID" -type E 94 | return $false 95 | } 96 | else{ 97 | Write-Verbose "FOUND PLATFORMID: $platID" 98 | 99 | Write-Verbose "MAKING API CALL TO CYBERARK" 100 | if($NoSSL){ 101 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 102 | $uri = "http://$PVWA/passwordvault/api/platforms/targets/$platID/activate/" 103 | } 104 | else{ 105 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 106 | $uri = "https://$PVWA/passwordvault/api/platforms/targets/$platID/activate/" 107 | } 108 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI 109 | $log = Write-VPASTextRecorder -inputval "POST" -token $token -LogType METHOD 110 | 111 | if($sessionval){ 112 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method POST -ContentType "application/json" -WebSession $sessionval 113 | } 114 | else{ 115 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method POST -ContentType "application/json" 116 | } 117 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: TRUE" -token $token -LogType MISC 118 | Write-Verbose "SUCCESSFULLY ACTIVATED $ActivatePlatformID" 119 | Write-Verbose "RETURNING TRUE" 120 | return $true 121 | } 122 | }catch{ 123 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 124 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 125 | Write-Verbose "UNABLE TO ACTIVATE $ActivatePlatformID" 126 | Write-VPASOutput -str $_ -type E 127 | return $false 128 | } 129 | } 130 | End{ 131 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER 132 | } 133 | } -------------------------------------------------------------------------------- /VpasModule/14.4.1/public/Get-VPASAllDirectories.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | GET ALL DIRECTORIES DETAILS 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | USE THIS FUNCTION TO GET ALL DIRECTORIES INTEGRATED WITH CYBERARK 7 | .LINK 8 | https://vpasmodule.com/commands/Get-VPASAllDirectories 9 | .NOTES 10 | SelfHosted: TRUE 11 | PrivCloudStandard: TRUE 12 | SharedServices: FALSE 13 | .PARAMETER token 14 | HashTable of data containing various pieces of login information (PVWA, LoginToken, HeaderType, etc). 15 | If -token is not passed, function will use last known hashtable generated by New-VPASToken 16 | .PARAMETER InputParameters 17 | HashTable of values containing the parameters required to make the API call 18 | .PARAMETER ExportToCSV 19 | Output results to a CSV file found in AppData\Local\VPASModuleOutputs directory 20 | .PARAMETER CSVDirectory 21 | Output directory where the exported CSV file will be saved to 22 | Default value: C:\Users\{CurrentUser}\AppData\Local\VPASModuleOutputs\ExportedCSVs 23 | .EXAMPLE 24 | $AllDirectoriesJSON = Get-VPASAllDirectories 25 | .EXAMPLE 26 | $InputParameters = @{ 27 | ExportToCSV = $true|$false 28 | CSVDirectory = "C:\Temp" 29 | } 30 | $AllDirectoriesJSON = Get-VPASAllDirectories -InputParameters $InputParameters 31 | .OUTPUTS 32 | If successful: 33 | { 34 | "DomainName": "vman.com", 35 | "DomainBaseContext": "DC=vman,DC=com" 36 | } 37 | --- 38 | $false if failed 39 | #> 40 | function Get-VPASAllDirectories{ 41 | [OutputType('System.Object',[bool])] 42 | [CmdletBinding(DefaultParameterSetName='Set1')] 43 | Param( 44 | [Parameter(Mandatory=$false,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true)] 45 | [Switch]$ExportToCSV, 46 | 47 | [Parameter(Mandatory=$false,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true)] 48 | [String]$CSVDirectory, 49 | 50 | [Parameter(Mandatory=$true,ParameterSetName='InputParameters',ValueFromPipelineByPropertyName=$true,HelpMessage="Hashtable of parameters required to make API call, refer to get-help -examples for valid inputs")] 51 | [hashtable]$InputParameters, 52 | 53 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)] 54 | [hashtable]$token 55 | ) 56 | 57 | Begin{ 58 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 59 | $CommandName = $MyInvocation.MyCommand.Name 60 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND 61 | } 62 | Process{ 63 | try{ 64 | if($PSCmdlet.ParameterSetName -eq "InputParameters"){ 65 | $KeyHash = @{ 66 | set1 = @{ 67 | AcceptableKeys = @("ExportToCSV","CSVDirectory") 68 | MandatoryKeys = @() 69 | } 70 | } 71 | $CheckSet = Test-VPASHashtableKeysHelper -InputHash $InputParameters -KeyHash $KeyHash 72 | 73 | if(!$CheckSet){ 74 | $log = Write-VPASTextRecorder -inputval "FAILED TO FIND TARGET PARAMETER SET" -token $token -LogType MISC 75 | Write-Verbose "FAILED TO FIND TARGET PARAMETER SET" 76 | Write-VPASOutput -str "FAILED TO FIND TARGET PARAMETER SET...VIEW EXAMPLES BELOW:" -type E 77 | $examples = Write-VPASExampleHelper -CommandName $CommandName 78 | return $false 79 | } 80 | else{ 81 | foreach($key in $InputParameters.Keys){ 82 | Set-Variable -Name $key -Value $InputParameters.$key 83 | } 84 | } 85 | } 86 | }catch{ 87 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 88 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 89 | Write-Verbose "FAILED TO RETRIEVE DIRECTORIES" 90 | Write-VPASOutput -str $_ -type E 91 | return $false 92 | } 93 | 94 | try{ 95 | 96 | if($NoSSL){ 97 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 98 | $uri = "http://$PVWA/PasswordVault/API/Configuration/LDAP/Directories/" 99 | } 100 | else{ 101 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 102 | $uri = "https://$PVWA/PasswordVault/API/Configuration/LDAP/Directories/" 103 | } 104 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI 105 | $log = Write-VPASTextRecorder -inputval "GET" -token $token -LogType METHOD 106 | 107 | Write-Verbose "MAKING API CALL TO CYBERARK" 108 | 109 | if($sessionval){ 110 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" -WebSession $sessionval 111 | } 112 | else{ 113 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" 114 | } 115 | $outputlog = $response | ConvertTo-Json | ConvertFrom-Json 116 | $log = Write-VPASTextRecorder -inputval $outputlog -token $token -LogType RETURN 117 | Write-Verbose "SUCCESSFULLY RETRIEVED DETAILS FOR ALL DIRECTORIES" 118 | Write-Verbose "RETURNING JSON OBJECT" 119 | if($ExportToCSV){ 120 | $runexport = Write-VPASExportCSV -Data $response -CommandName $CommandName -CSVDirectory $CSVDirectory 121 | } 122 | return $response 123 | }catch{ 124 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 125 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 126 | Write-Verbose "UNABLE TO RETRIEVE ALL DIRECTORIES" 127 | Write-VPASOutput -str $_ -type E 128 | return $false 129 | } 130 | } 131 | End{ 132 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER 133 | } 134 | } 135 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/public/Get-VPASIdentityCurrentUserDetails.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | GET CURRENT LOGGED IN USER DETAILS IN IDENTITY 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | USE THIS FUNCTION TO RETRIEVE DETAILS OF THE CURRENT LOGGED IN USER IN IDENTITY 7 | .LINK 8 | https://vpasmodule.com/commands/Get-VPASIdentityCurrentUserDetails 9 | .NOTES 10 | SelfHosted: FALSE 11 | PrivCloudStandard: FALSE 12 | SharedServices: TRUE 13 | .PARAMETER token 14 | HashTable of data containing various pieces of login information (PVWA, LoginToken, HeaderType, etc). 15 | If -token is not passed, function will use last known hashtable generated by New-VPASToken 16 | .PARAMETER InputParameters 17 | HashTable of values containing the parameters required to make the API call 18 | .PARAMETER ExportToCSV 19 | Output results to a CSV file found in AppData\Local\VPASModuleOutputs directory 20 | .PARAMETER CSVDirectory 21 | Output directory where the exported CSV file will be saved to 22 | Default value: C:\Users\{CurrentUser}\AppData\Local\VPASModuleOutputs\ExportedCSVs 23 | .EXAMPLE 24 | $CurrentUserDetails = Get-VPASIdentityCurrentUserDetails 25 | .EXAMPLE 26 | $InputParameters = @{ 27 | ExportToCSV = $true|$false 28 | CSVDirectory = "C:\Temp" 29 | } 30 | $CurrentUserDetails = Get-VPASIdentityCurrentUserDetails -InputParameters $InputParameters 31 | .OUTPUTS 32 | If successful: 33 | { 34 | "User": "vadim@vman.com", 35 | "UserUuid": "jlakjd789-1234-5678-abcd-4782jskfhkjsw7", 36 | "TenantId": "AA12345" 37 | } 38 | --- 39 | $false if failed 40 | #> 41 | function Get-VPASIdentityCurrentUserDetails{ 42 | [OutputType('System.Object',[bool])] 43 | [CmdletBinding(DefaultParameterSetName='Set1')] 44 | Param( 45 | [Parameter(Mandatory=$false,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true)] 46 | [Switch]$ExportToCSV, 47 | 48 | [Parameter(Mandatory=$false,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true)] 49 | [String]$CSVDirectory, 50 | 51 | [Parameter(Mandatory=$true,ParameterSetName='InputParameters',ValueFromPipelineByPropertyName=$true,HelpMessage="Hashtable of parameters required to make API call, refer to get-help -examples for valid inputs")] 52 | [hashtable]$InputParameters, 53 | 54 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)] 55 | [hashtable]$token 56 | ) 57 | 58 | Begin{ 59 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 60 | $CommandName = $MyInvocation.MyCommand.Name 61 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND 62 | } 63 | Process{ 64 | try{ 65 | if($PSCmdlet.ParameterSetName -eq "InputParameters"){ 66 | $KeyHash = @{ 67 | set1 = @{ 68 | AcceptableKeys = @("ExportToCSV","CSVDirectory") 69 | MandatoryKeys = @() 70 | } 71 | } 72 | $CheckSet = Test-VPASHashtableKeysHelper -InputHash $InputParameters -KeyHash $KeyHash 73 | 74 | if(!$CheckSet){ 75 | $log = Write-VPASTextRecorder -inputval "FAILED TO FIND TARGET PARAMETER SET" -token $token -LogType MISC 76 | Write-Verbose "FAILED TO FIND TARGET PARAMETER SET" 77 | Write-VPASOutput -str "FAILED TO FIND TARGET PARAMETER SET...VIEW EXAMPLES BELOW:" -type E 78 | $examples = Write-VPASExampleHelper -CommandName $CommandName 79 | return $false 80 | } 81 | else{ 82 | foreach($key in $InputParameters.Keys){ 83 | Set-Variable -Name $key -Value $InputParameters.$key 84 | } 85 | } 86 | } 87 | }catch{ 88 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 89 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 90 | Write-Verbose "FAILED RETRIEVE USER DETAILS" 91 | Write-VPASOutput -str $_ -type E 92 | return $false 93 | } 94 | 95 | try{ 96 | 97 | if(!$IdentityURL){ 98 | $log = Write-VPASTextRecorder -inputval "LOGIN TOKEN WAS NOT GENERATED THROUGH IDENTITY" -token $token -LogType MISC 99 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 100 | Write-VPASOutput -str "LOGIN TOKEN WAS NOT GENERATED THROUGH IDENTITY, TERMINATING API CALL" -type E 101 | return $false 102 | } 103 | 104 | if($NoSSL){ 105 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 106 | $uri = "http://$IdentityURL/Security/WhoAmI" 107 | } 108 | else{ 109 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 110 | $uri = "https://$IdentityURL/Security/WhoAmI" 111 | } 112 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI 113 | $log = Write-VPASTextRecorder -inputval "GET" -token $token -LogType METHOD 114 | 115 | if($sessionval){ 116 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method POST -ContentType "application/json" -WebSession $sessionval 117 | } 118 | else{ 119 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method POST -ContentType "application/json" 120 | } 121 | if($ExportToCSV){ 122 | $runexport = Write-VPASExportCSV -Data $response.Result -CommandName $CommandName -CSVDirectory $CSVDirectory 123 | } 124 | Write-Verbose "PARSING DATA FROM CYBERARK" 125 | $outputlog = $response.Result 126 | $log = Write-VPASTextRecorder -inputval $outputlog -token $token -LogType RETURN 127 | return $response.Result 128 | }catch{ 129 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 130 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 131 | Write-Verbose "FAILED TO GET CURRENT USER DETAILS" 132 | Write-VPASOutput -str $_ -type E 133 | return $false 134 | } 135 | } 136 | End{ 137 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER 138 | } 139 | } -------------------------------------------------------------------------------- /VpasModule/14.4.1/public/Get-VPASVaultVersion.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | GET VAULT VERSION 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | USE THIS FUNCTION TO GET CURRENT VERSION OF THE VAULT 7 | .LINK 8 | https://vpasmodule.com/commands/Get-VPASVaultVersion 9 | .NOTES 10 | SelfHosted: TRUE 11 | PrivCloudStandard: TRUE 12 | SharedServices: TRUE 13 | .PARAMETER token 14 | HashTable of data containing various pieces of login information (PVWA, LoginToken, HeaderType, etc). 15 | If -token is not passed, function will use last known hashtable generated by New-VPASToken 16 | .PARAMETER InputParameters 17 | HashTable of values containing the parameters required to make the API call 18 | .PARAMETER ExportToCSV 19 | Output results to a CSV file found in AppData\Local\VPASModuleOutputs directory 20 | .PARAMETER CSVDirectory 21 | Output directory where the exported CSV file will be saved to 22 | Default value: C:\Users\{CurrentUser}\AppData\Local\VPASModuleOutputs\ExportedCSVs 23 | .EXAMPLE 24 | $VaultVersionJSON = Get-VPASVaultVersion 25 | .EXAMPLE 26 | $InputParameters = @{ 27 | ExportToCSV = $true|$false 28 | CSVDirectory = "C:\Temp" 29 | } 30 | $VaultVersionJSON = Get-VPASVaultVersion -InputParameters $InputParameters 31 | .OUTPUTS 32 | If successful: 33 | { 34 | "ExternalVersion": "14.2.0", 35 | "InternalVersion": "14.2.0.1", 36 | "ServerName": "Vault" 37 | } 38 | --- 39 | $false if failed 40 | #> 41 | function Get-VPASVaultVersion{ 42 | [OutputType('System.Object',[bool])] 43 | [CmdletBinding(DefaultParameterSetName='Set1')] 44 | Param( 45 | [Parameter(Mandatory=$false,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true)] 46 | [Switch]$ExportToCSV, 47 | 48 | [Parameter(Mandatory=$false,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true)] 49 | [String]$CSVDirectory, 50 | 51 | [Parameter(Mandatory=$true,ParameterSetName='InputParameters',ValueFromPipelineByPropertyName=$true,HelpMessage="Hashtable of parameters required to make API call, refer to get-help -examples for valid inputs")] 52 | [hashtable]$InputParameters, 53 | 54 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)] 55 | [hashtable]$token 56 | ) 57 | 58 | Begin{ 59 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 60 | $CommandName = $MyInvocation.MyCommand.Name 61 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND 62 | } 63 | Process{ 64 | try{ 65 | if($PSCmdlet.ParameterSetName -eq "InputParameters"){ 66 | $KeyHash = @{ 67 | set1 = @{ 68 | AcceptableKeys = @("ExportToCSV","CSVDirectory") 69 | MandatoryKeys = @() 70 | } 71 | } 72 | $CheckSet = Test-VPASHashtableKeysHelper -InputHash $InputParameters -KeyHash $KeyHash 73 | 74 | if(!$CheckSet){ 75 | $log = Write-VPASTextRecorder -inputval "FAILED TO FIND TARGET PARAMETER SET" -token $token -LogType MISC 76 | Write-Verbose "FAILED TO FIND TARGET PARAMETER SET" 77 | Write-VPASOutput -str "FAILED TO FIND TARGET PARAMETER SET...VIEW EXAMPLES BELOW:" -type E 78 | $examples = Write-VPASExampleHelper -CommandName $CommandName 79 | return $false 80 | } 81 | else{ 82 | foreach($key in $InputParameters.Keys){ 83 | Set-Variable -Name $key -Value $InputParameters.$key 84 | } 85 | } 86 | } 87 | }catch{ 88 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 89 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 90 | Write-Verbose "FAILED TO GET VAULT VERSION" 91 | Write-VPASOutput -str $_ -type E 92 | return $false 93 | } 94 | 95 | try{ 96 | 97 | if($NoSSL){ 98 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 99 | $uri = "http://$PVWA/PasswordVault/WebServices/PIMServices.svc/Server" 100 | } 101 | else{ 102 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 103 | $uri = "https://$PVWA/PasswordVault/WebServices/PIMServices.svc/Server" 104 | } 105 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI 106 | $log = Write-VPASTextRecorder -inputval "GET" -token $token -LogType METHOD 107 | write-verbose "MAKING API CALL TO CYBERARK" 108 | 109 | if($sessionval){ 110 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" -WebSession $sessionval 111 | } 112 | else{ 113 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" 114 | } 115 | if($ExportToCSV){ 116 | $runexport = Write-VPASExportCSV -Data $response -CommandName $CommandName -CSVDirectory $CSVDirectory 117 | } 118 | $log = Write-VPASTextRecorder -inputval $response -token $token -LogType RETURN 119 | Write-Verbose "RETURNING JSON OBJECT" 120 | return $response 121 | }catch{ 122 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 123 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 124 | Write-Verbose "UNABLE TO GET VAULT VERSION" 125 | Write-VPASOutput -str $_ -type E 126 | return $false 127 | } 128 | } 129 | End{ 130 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER 131 | } 132 | } 133 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/public/Import-VPASConnectionComponent.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | IMPORT CONNECTION COMPONENT TO CYBERARK 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | USE THIS FUNCTION TO IMPORT A CONNECTION COMPONENT TO CYBERARK 7 | .LINK 8 | https://vpasmodule.com/commands/Import-VPASConnectionComponent 9 | .NOTES 10 | SelfHosted: TRUE 11 | PrivCloudStandard: TRUE 12 | SharedServices: TRUE 13 | .PARAMETER token 14 | HashTable of data containing various pieces of login information (PVWA, LoginToken, HeaderType, etc). 15 | If -token is not passed, function will use last known hashtable generated by New-VPASToken 16 | .PARAMETER ZipPath 17 | The location of the zip file containing connection component details files 18 | .PARAMETER InputParameters 19 | HashTable of values containing the parameters required to make the API call 20 | .EXAMPLE 21 | $ImportConnectionComponentJSON = Import-VPASConnectionComponent -ZipPath {C:\ExampleDir\ExampleConnectionComponent.zip} 22 | .EXAMPLE 23 | $InputParameters = @{ 24 | ZipPath = "C:\Temp\ImportPlatform.zip" 25 | } 26 | $ImportConnectionComponentJSON = Import-VPASConnectionComponent -InputParameters $InputParameters 27 | .OUTPUTS 28 | If successful: 29 | { 30 | "ConnectionComponentID": "PSM-VPASConnector" 31 | } 32 | --- 33 | $false if failed 34 | #> 35 | function Import-VPASConnectionComponent{ 36 | [OutputType('System.Object',[bool])] 37 | [CmdletBinding(DefaultParameterSetName='Set1')] 38 | Param( 39 | 40 | [Parameter(Mandatory=$true,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true,HelpMessage="Enter zip file containing connection component details files (for example: C:\Temp\ImportCC.zip)")] 41 | [String]$ZipPath, 42 | 43 | [Parameter(Mandatory=$true,ParameterSetName='InputParameters',ValueFromPipelineByPropertyName=$true,HelpMessage="Hashtable of parameters required to make API call, refer to get-help -examples for valid inputs")] 44 | [hashtable]$InputParameters, 45 | 46 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)] 47 | [hashtable]$token 48 | ) 49 | 50 | Begin{ 51 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 52 | $CommandName = $MyInvocation.MyCommand.Name 53 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND 54 | } 55 | Process{ 56 | try{ 57 | if($PSCmdlet.ParameterSetName -eq "InputParameters"){ 58 | $KeyHash = @{ 59 | set1 = @{ 60 | AcceptableKeys = @("ZipPath") 61 | MandatoryKeys = @("ZipPath") 62 | } 63 | } 64 | $CheckSet = Test-VPASHashtableKeysHelper -InputHash $InputParameters -KeyHash $KeyHash 65 | 66 | if(!$CheckSet){ 67 | $log = Write-VPASTextRecorder -inputval "FAILED TO FIND TARGET PARAMETER SET" -token $token -LogType MISC 68 | Write-Verbose "FAILED TO FIND TARGET PARAMETER SET" 69 | Write-VPASOutput -str "FAILED TO FIND TARGET PARAMETER SET...VIEW EXAMPLES BELOW:" -type E 70 | $examples = Write-VPASExampleHelper -CommandName $CommandName 71 | return $false 72 | } 73 | else{ 74 | foreach($key in $InputParameters.Keys){ 75 | Set-Variable -Name $key -Value $InputParameters.$key 76 | } 77 | } 78 | } 79 | }catch{ 80 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 81 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 82 | Write-Verbose "FAILED TO IMPORT CONNECTION COMPONENT" 83 | Write-VPASOutput -str $_ -type E 84 | return $false 85 | } 86 | 87 | try{ 88 | 89 | $ZipPathArray = [System.IO.File]::ReadAllBytes($ZipPath) 90 | Write-Verbose "CONVERTED ZIP FILE TO BYTE ARRAY" 91 | 92 | Write-Verbose "INITIALIZING BODY PARAMETERS" 93 | $params = @{ 94 | ImportFile = $ZipPathArray 95 | } 96 | $log = Write-VPASTextRecorder -inputval $params -token $token -LogType PARAMS 97 | $params = $params | ConvertTo-Json 98 | 99 | if($NoSSL){ 100 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 101 | $uri = "http://$PVWA/PasswordVault/API/ConnectionComponents/Import/" 102 | } 103 | else{ 104 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 105 | $uri = "https://$PVWA/PasswordVault/API/ConnectionComponents/Import/" 106 | } 107 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI 108 | $log = Write-VPASTextRecorder -inputval "POST" -token $token -LogType METHOD 109 | Write-Verbose "MAKING API CALL TO CYBERARK" 110 | 111 | if($sessionval){ 112 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Body $params -Method POST -ContentType "application/json" -WebSession $sessionval 113 | } 114 | else{ 115 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Body $params -Method POST -ContentType "application/json" 116 | } 117 | $outputlog = $response 118 | $log = Write-VPASTextRecorder -inputval $outputlog -token $token -LogType RETURN 119 | Write-Verbose "SUCCESSFULLY IMPORTED $ZipPath" 120 | Write-Verbose "RETURNING NEW CONNECTION COMPONENT " 121 | return $response 122 | 123 | }catch{ 124 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 125 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 126 | Write-Verbose "UNABLE TO IMPORT $ZipPath" 127 | Write-VPASOutput -str $_ -type E 128 | return $false 129 | } 130 | } 131 | End{ 132 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER 133 | } 134 | } 135 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/public/Import-VPASPlatform.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | IMPORT PLATFORM TO CYBERARK 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | USE THIS FUNCTION TO IMPORT A PLATFORM FROM CYBERARK 7 | .LINK 8 | https://vpasmodule.com/commands/Import-VPASPlatform 9 | .NOTES 10 | SelfHosted: TRUE 11 | PrivCloudStandard: TRUE 12 | SharedServices: TRUE 13 | .PARAMETER token 14 | HashTable of data containing various pieces of login information (PVWA, LoginToken, HeaderType, etc). 15 | If -token is not passed, function will use last known hashtable generated by New-VPASToken 16 | .PARAMETER ZipPath 17 | The location of the zip file containing platform details files 18 | .PARAMETER InputParameters 19 | HashTable of values containing the parameters required to make the API call 20 | .EXAMPLE 21 | $ImportPlatformJSON = Import-VPASPlatform -ZipPath {C:\ExampleDir\ExamplePlatform.zip} 22 | .EXAMPLE 23 | $InputParameters = @{ 24 | ZipPath = "C:\Temp\ImportPlatform.zip" 25 | } 26 | $ImportPlatformJSON = Import-VPASPlatform -InputParameters $InputParameters 27 | .OUTPUTS 28 | If successful: 29 | { 30 | "PlatformID": "ExamplePlatform" 31 | } 32 | --- 33 | $false if failed 34 | #> 35 | function Import-VPASPlatform{ 36 | [OutputType('System.Object',[bool])] 37 | [CmdletBinding(DefaultParameterSetName='Set1')] 38 | Param( 39 | 40 | [Parameter(Mandatory=$true,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true,HelpMessage="Enter zip file containing platform details files (for example: C:\Temp\ImportPlatform.zip)")] 41 | [String]$ZipPath, 42 | 43 | [Parameter(Mandatory=$true,ParameterSetName='InputParameters',ValueFromPipelineByPropertyName=$true,HelpMessage="Hashtable of parameters required to make API call, refer to get-help -examples for valid inputs")] 44 | [hashtable]$InputParameters, 45 | 46 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)] 47 | [hashtable]$token 48 | ) 49 | 50 | Begin{ 51 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 52 | $CommandName = $MyInvocation.MyCommand.Name 53 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND 54 | } 55 | Process{ 56 | try{ 57 | if($PSCmdlet.ParameterSetName -eq "InputParameters"){ 58 | $KeyHash = @{ 59 | set1 = @{ 60 | AcceptableKeys = @("ZipPath") 61 | MandatoryKeys = @("ZipPath") 62 | } 63 | } 64 | $CheckSet = Test-VPASHashtableKeysHelper -InputHash $InputParameters -KeyHash $KeyHash 65 | 66 | if(!$CheckSet){ 67 | $log = Write-VPASTextRecorder -inputval "FAILED TO FIND TARGET PARAMETER SET" -token $token -LogType MISC 68 | Write-Verbose "FAILED TO FIND TARGET PARAMETER SET" 69 | Write-VPASOutput -str "FAILED TO FIND TARGET PARAMETER SET...VIEW EXAMPLES BELOW:" -type E 70 | $examples = Write-VPASExampleHelper -CommandName $CommandName 71 | return $false 72 | } 73 | else{ 74 | foreach($key in $InputParameters.Keys){ 75 | Set-Variable -Name $key -Value $InputParameters.$key 76 | } 77 | } 78 | } 79 | }catch{ 80 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 81 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 82 | Write-Verbose "FAILED TO IMPORT PLATFORM" 83 | Write-VPASOutput -str $_ -type E 84 | return $false 85 | } 86 | 87 | try{ 88 | 89 | $ZipPathArray = [System.IO.File]::ReadAllBytes($ZipPath) 90 | Write-Verbose "CONVERTED ZIP FILE TO BYTE ARRAY" 91 | 92 | Write-Verbose "INITIALIZING BODY PARAMETERS" 93 | $params = @{ 94 | ImportFile = $ZipPathArray 95 | } 96 | $log = Write-VPASTextRecorder -inputval $params -token $token -LogType PARAMS 97 | $params = $params | ConvertTo-Json 98 | 99 | if($NoSSL){ 100 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 101 | $uri = "http://$PVWA/PasswordVault/API/Platforms/Import/" 102 | } 103 | else{ 104 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 105 | $uri = "https://$PVWA/PasswordVault/API/Platforms/Import/" 106 | } 107 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI 108 | $log = Write-VPASTextRecorder -inputval "POST" -token $token -LogType METHOD 109 | Write-Verbose "MAKING API CALL TO CYBERARK" 110 | 111 | if($sessionval){ 112 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Body $params -Method POST -ContentType "application/json" -WebSession $sessionval 113 | } 114 | else{ 115 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Body $params -Method POST -ContentType "application/json" 116 | } 117 | $outputlog = $response 118 | $log = Write-VPASTextRecorder -inputval $outputlog -token $token -LogType RETURN 119 | Write-Verbose "SUCCESSFULLY IMPORTED $ZipPath" 120 | Write-Verbose "RETURNING NEW PLATFORMID" 121 | return $response 122 | 123 | }catch{ 124 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 125 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 126 | Write-Verbose "UNABLE TO IMPORT $ZipPath" 127 | Write-VPASOutput -str $_ -type E 128 | return $false 129 | } 130 | } 131 | End{ 132 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER 133 | } 134 | } 135 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/public/Invoke-VPASCredentialProvider.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | CREDENTIAL PROVIDER API CALL 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | USE THIS FUNCTION TO RETRIEVE ACCOUNT INFORMATION VIA CREDENTIAL PROVIDER 7 | .LINK 8 | https://vpasmodule.com/commands/Invoke-VPASCredentialProvider 9 | .NOTES 10 | SelfHosted: TRUE 11 | PrivCloudStandard: TRUE 12 | SharedServices: TRUE 13 | .PARAMETER ApplicationID 14 | The application ID that has access to the safe that will retrieve the account information 15 | .PARAMETER Safe 16 | Safe that the target account is located in 17 | .PARAMETER ObjectName 18 | Unique identifier of the target account 19 | .PARAMETER Folder 20 | A directory within a safe that the target account is located in 21 | Default value: root 22 | .PARAMETER Reason 23 | Purpose for pulling the account, for auditing and master policy restriction 24 | .PARAMETER SDKLocation 25 | Location or filepath to the CLIPasswordSDK that will be utilized to make the call 26 | Default value: 'C:\Program Files (x86)\CyberArk\ApplicationPasswordSdk\CLIPasswordSDK.exe' 27 | .EXAMPLE 28 | $CPResults = Invoke-VPASCredentialProvider -ApplicationID {APPLICATION ID VALUE} -Safe {SAFE VALUE} -ObjectName {OBJECT NAME VALUE} -Folder {FOLDER VALUE} -SDKLocation {SDKLOCATION VALUE} 29 | .OUTPUTS 30 | If successful: 31 | { 32 | "Content": "SuperSecretPassword", 33 | "ObjectName": "Operating System-WinDomain-vman.com-testdomainuser02", 34 | "PolicyID": "WinDomain", 35 | "Username": "testdomainuser02", 36 | "Address": "vman.com", 37 | "Safe": "NewSafeVpas" 38 | } 39 | --- 40 | $false if failed 41 | #> 42 | function Invoke-VPASCredentialProvider{ 43 | [OutputType('System.Collections.Hashtable',[bool])] 44 | [CmdletBinding(DefaultParameterSetName='Set1')] 45 | Param( 46 | 47 | [Parameter(Mandatory=$true,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true,HelpMessage="ApplicationID that has access to the safe that will retrieve the account information")] 48 | [String]$ApplicationID, 49 | 50 | [Parameter(Mandatory=$true,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true,HelpMessage="Safe that the target account is located in")] 51 | [String]$Safe, 52 | 53 | [Parameter(Mandatory=$true,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true,HelpMessage="Unique identifier of the target account")] 54 | [String]$ObjectName, 55 | 56 | [Parameter(Mandatory=$false,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true,HelpMessage="A directory within a safe that the target account is located in (Default value: root)")] 57 | [String]$Folder, 58 | 59 | [Parameter(Mandatory=$true,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true,HelpMessage="Location or filepath to the CLIPasswordSDK that will be utilized to make the call (Default value: 'C:\Program Files (x86)\CyberArk\ApplicationPasswordSdk\CLIPasswordSDK.exe')")] 60 | [String]$SDKLocation, 61 | 62 | [Parameter(Mandatory=$false,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true,HelpMessage="Purpose for pulling the account, for auditing and master policy restriction")] 63 | [String]$Reason 64 | ) 65 | 66 | Begin{ 67 | 68 | } 69 | Process{ 70 | try{ 71 | if([String]::IsNullOrEmpty($Folder)){ 72 | Write-Verbose "NO FOLDER PASSED, USING DEFAULT VALUE: root" 73 | $Folder = "root" 74 | } 75 | if([String]::IsNullOrEmpty($SDKLocation)){ 76 | Write-Verbose "NO SDKLocation PASSED, USING DEFAULT VALUE: 'C:\Program Files (x86)\CyberArk\ApplicationPasswordSdk\CLIPasswordSDK.exe'" 77 | $SDKLocation = "C:\Program Files (x86)\CyberArk\ApplicationPasswordSdk\CLIPasswordSDK.exe" 78 | } 79 | 80 | Write-Verbose "BUILDING SDK COMMAND" 81 | Write-Verbose "$SDKLocation GetPassword /p AppDescs.AppID=$ApplicationID /p Reason=`"$Reason`" /p Query=`"Safe=$Safe;Folder=$Folder;Object=$ObjectName`" /o Password,passprops.UserName,passprops.Address,passprops.Safe,passprops.Object,passprops.PolicyID" 82 | $AllDetails = & $SDKLocation GetPassword /p AppDescs.AppID=$ApplicationID /p Reason="$Reason" /p Query="Safe=$Safe;Folder=$Folder;Object=$ObjectName" /o Password,passprops.UserName,passprops.Address,passprops.Safe,passprops.Object,passprops.PolicyID 83 | Write-Verbose "PARSING DATA" 84 | 85 | $AllDetailsSplit = $AllDetails -split "," 86 | $outputobj = @{ 87 | Content = $AllDetailsSplit[0] 88 | Username = $AllDetailsSplit[1] 89 | Address = $AllDetailsSplit[2] 90 | Safe = $AllDetailsSplit[3] 91 | ObjectName = $AllDetailsSplit[4] 92 | PolicyID = $AllDetailsSplit[5] 93 | } 94 | Write-Verbose "RETURNING DATA" 95 | return $outputobj 96 | }catch{ 97 | Write-Verbose "UNABLE TO RETRIEVE ACCOUNT DETAILS" 98 | Write-Host $_ -ForegroundColor Red 99 | return $false 100 | } 101 | } 102 | End{ 103 | 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/public/Invoke-VPASUserLicenseReport.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | GENERATE USER LICENSE REPORT 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | USE THIS FUNCTION TO GENERATE A USER LICENSE REPORT 7 | .LINK 8 | https://vpasmodule.com/commands/Invoke-VPASUserLicenseReport 9 | .NOTES 10 | SelfHosted: FALSE 11 | PrivCloudStandard: TRUE 12 | SharedServices: TRUE 13 | .PARAMETER token 14 | HashTable of data containing various pieces of login information (PVWA, LoginToken, HeaderType, etc). 15 | If -token is not passed, function will use last known hashtable generated by New-VPASToken 16 | .PARAMETER InputParameters 17 | HashTable of values containing the parameters required to make the API call 18 | .EXAMPLE 19 | $UserLicenseReport = Invoke-VPASUserLicenseReport 20 | .EXAMPLE 21 | $InputParameters = @{} 22 | $UserLicenseReport = Invoke-VPASUserLicenseReport -InputParameters $InputParameters 23 | .OUTPUTS 24 | If successful: 25 | { 26 | "componentName": "Privilege Cloud", 27 | "optionalSummary": { 28 | "name": "License consumption", 29 | "used": "8", 30 | "total": "25" 31 | }, 32 | "licensesData": [ 33 | { 34 | "licencesElements": " ", 35 | "licenseSubCategory": "User Types" 36 | } 37 | ] 38 | } 39 | --- 40 | $false if failed 41 | #> 42 | function Invoke-VPASUserLicenseReport{ 43 | [OutputType('System.Object',[bool])] 44 | [CmdletBinding(DefaultParameterSetName='Set1')] 45 | Param( 46 | [Parameter(Mandatory=$true,ParameterSetName='InputParameters',ValueFromPipelineByPropertyName=$true,HelpMessage="Hashtable of parameters required to make API call, refer to get-help -examples for valid inputs")] 47 | [hashtable]$InputParameters, 48 | 49 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=0)] 50 | [hashtable]$token 51 | ) 52 | 53 | Begin{ 54 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 55 | $CommandName = $MyInvocation.MyCommand.Name 56 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND 57 | } 58 | Process{ 59 | try{ 60 | if($PSCmdlet.ParameterSetName -eq "InputParameters"){ 61 | $KeyHash = @{ 62 | set1 = @{ 63 | AcceptableKeys = @() 64 | MandatoryKeys = @() 65 | } 66 | } 67 | $CheckSet = Test-VPASHashtableKeysHelper -InputHash $InputParameters -KeyHash $KeyHash 68 | 69 | if(!$CheckSet){ 70 | $log = Write-VPASTextRecorder -inputval "FAILED TO FIND TARGET PARAMETER SET" -token $token -LogType MISC 71 | Write-Verbose "FAILED TO FIND TARGET PARAMETER SET" 72 | Write-VPASOutput -str "FAILED TO FIND TARGET PARAMETER SET...VIEW EXAMPLES BELOW:" -type E 73 | $examples = Write-VPASExampleHelper -CommandName $CommandName 74 | return $false 75 | } 76 | else{ 77 | foreach($key in $InputParameters.Keys){ 78 | Set-Variable -Name $key -Value $InputParameters.$key 79 | } 80 | } 81 | } 82 | }catch{ 83 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 84 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 85 | Write-Verbose "FAILED TO GENERATE REPORT" 86 | Write-VPASOutput -str $_ -type E 87 | return $false 88 | } 89 | 90 | try{ 91 | if(!$ISPSS -and ($PVWA -notmatch ".privilegecloud.cyberark.")){ 92 | Write-VPASOutput -str "SelfHosted solution does not support this API Call, returning false" -type E 93 | $log = Write-VPASTextRecorder -inputval "SelfHosted solution does not support this API Call, returning false" -token $token -LogType MISC 94 | $log = Write-VPASTextRecorder -inputval $false -token $token -LogType RETURN 95 | return $false 96 | } 97 | else{ 98 | if($NoSSL){ 99 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 100 | $uri = "http://$PVWA/PasswordVault/api/licenses/pcloud/" 101 | } 102 | else{ 103 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 104 | $uri = "https://$PVWA/PasswordVault/api/licenses/pcloud/" 105 | } 106 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI 107 | $log = Write-VPASTextRecorder -inputval "GET" -token $token -LogType METHOD 108 | write-verbose "MAKING API CALL TO CYBERARK" 109 | 110 | if($sessionval){ 111 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" -WebSession $sessionval 112 | } 113 | else{ 114 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" 115 | } 116 | $outputlog = $response 117 | $log = Write-VPASTextRecorder -inputval $outputlog -token $token -LogType RETURNARRAY 118 | Write-Verbose "RETURNING JSON OBJECT" 119 | return $response 120 | } 121 | }catch{ 122 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 123 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 124 | Write-Verbose "UNABLE TO GENERATE USER LICENSE REPORT" 125 | Write-VPASOutput -str $_ -type E 126 | return $false 127 | } 128 | } 129 | End{ 130 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER 131 | } 132 | } 133 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/public/Remove-VPASCustomTheme.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | DELETE A CUSTOM THEME 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | USE THIS FUNCTION TO DELETE A CUSTOM THEME IN CYBERARK 7 | .LINK 8 | https://vpasmodule.com/commands/Remove-VPASCustomTheme 9 | .NOTES 10 | SelfHosted: TRUE 11 | PrivCloudStandard: FALSE 12 | SharedServices: FALSE 13 | .PARAMETER token 14 | HashTable of data containing various pieces of login information (PVWA, LoginToken, HeaderType, etc). 15 | If -token is not passed, function will use last known hashtable generated by New-VPASToken 16 | .PARAMETER ThemeName 17 | Unique identifier of the target theme 18 | .PARAMETER InputParameters 19 | HashTable of values containing the parameters required to make the API call 20 | .EXAMPLE 21 | $DeleteThemeStatus = Remove-VPASCustomTheme -ThemeName {THEME NAME VALUE} 22 | .EXAMPLE 23 | $InputParameters = @{ 24 | ThemeName = "Default Light Copy" 25 | } 26 | $DeleteThemeStatus = Remove-VPASCustomTheme -InputParameters $InputParameters 27 | .OUTPUTS 28 | $true if successful 29 | --- 30 | $false if failed 31 | #> 32 | function Remove-VPASCustomTheme{ 33 | [OutputType([bool])] 34 | [CmdletBinding(DefaultParameterSetName='Set1')] 35 | Param( 36 | [Parameter(Mandatory=$true,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true,HelpMessage="Enter theme name (for example: vpasdark)")] 37 | [String]$ThemeName, 38 | 39 | [Parameter(Mandatory=$true,ParameterSetName='InputParameters',ValueFromPipelineByPropertyName=$true,HelpMessage="Hashtable of parameters required to make API call, refer to get-help -examples for valid inputs")] 40 | [hashtable]$InputParameters, 41 | 42 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)] 43 | [hashtable]$token 44 | ) 45 | 46 | Begin{ 47 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 48 | $CommandName = $MyInvocation.MyCommand.Name 49 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND 50 | } 51 | Process{ 52 | try{ 53 | if($PSCmdlet.ParameterSetName -eq "InputParameters"){ 54 | $KeyHash = @{ 55 | set1 = @{ 56 | AcceptableKeys = @("ThemeName") 57 | MandatoryKeys = @("ThemeName") 58 | } 59 | } 60 | $CheckSet = Test-VPASHashtableKeysHelper -InputHash $InputParameters -KeyHash $KeyHash 61 | 62 | if(!$CheckSet){ 63 | $log = Write-VPASTextRecorder -inputval "FAILED TO FIND TARGET PARAMETER SET" -token $token -LogType MISC 64 | Write-Verbose "FAILED TO FIND TARGET PARAMETER SET" 65 | Write-VPASOutput -str "FAILED TO FIND TARGET PARAMETER SET...VIEW EXAMPLES BELOW:" -type E 66 | $examples = Write-VPASExampleHelper -CommandName $CommandName 67 | return $false 68 | } 69 | else{ 70 | foreach($key in $InputParameters.Keys){ 71 | Set-Variable -Name $key -Value $InputParameters.$key 72 | } 73 | } 74 | } 75 | }catch{ 76 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 77 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 78 | Write-Verbose "FAILED TO RETRIEVE THEME DETAILS" 79 | Write-VPASOutput -str $_ -type E 80 | return $false 81 | } 82 | 83 | try{ 84 | Write-Verbose "MAKING API CALL TO CYBERARK" 85 | if($NoSSL){ 86 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 87 | $uri = "http://$PVWA/PasswordVault/API/Themes/$ThemeName/" 88 | } 89 | else{ 90 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 91 | $uri = "https://$PVWA/PasswordVault/API/Themes/$ThemeName/" 92 | } 93 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI 94 | $log = Write-VPASTextRecorder -inputval "DELETE" -token $token -LogType METHOD 95 | 96 | if($sessionval){ 97 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method DELETE -ContentType "application/json" -WebSession $sessionval 98 | } 99 | else{ 100 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method DELETE -ContentType "application/json" 101 | } 102 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: TRUE" -token $token -LogType MISC 103 | Write-Verbose "SUCCESSFULLY REMOVED CUSTOM THEME" 104 | return $true 105 | }catch{ 106 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 107 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 108 | Write-Verbose "UNABLE TO REMOVE CUSTOM THEME" 109 | Write-VPASOutput -str $_ -type E 110 | return $false 111 | } 112 | } 113 | End{ 114 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER 115 | } 116 | } 117 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/public/Remove-VPASDirectory.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | DELETE DIRCECTORY 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | USE THIS FUNCTION TO DELETE DIRECTORY 7 | .LINK 8 | https://vpasmodule.com/commands/Remove-VPASDirectory 9 | .NOTES 10 | SelfHosted: TRUE 11 | PrivCloudStandard: TRUE 12 | SharedServices: FALSE 13 | .PARAMETER token 14 | HashTable of data containing various pieces of login information (PVWA, LoginToken, HeaderType, etc). 15 | If -token is not passed, function will use last known hashtable generated by New-VPASToken 16 | .PARAMETER confirm 17 | Remove the confirmation prompt asking to confirm the deletion of the selected DirectoryID 18 | .PARAMETER DirectoryID 19 | Unique DirectoryID that maps to the target Directory to be deleted 20 | .PARAMETER InputParameters 21 | HashTable of values containing the parameters required to make the API call 22 | .EXAMPLE 23 | $DeleteDirectoryStatus = Remove-VPASDirectory -DirectoryID {DIRECTORYID VALUE} 24 | .EXAMPLE 25 | $InputParameters = @{ 26 | DirectoryID = "DeleteDirectoryID" 27 | confirm = $true|$false 28 | } 29 | $DeleteDirectoryStatus = Remove-VPASDirectory -InputParameters $InputParameters 30 | .OUTPUTS 31 | $true if successful 32 | --- 33 | $false if failed 34 | #> 35 | function Remove-VPASDirectory{ 36 | [OutputType([bool])] 37 | [CmdletBinding(DefaultParameterSetName='Set1')] 38 | Param( 39 | 40 | [Parameter(Mandatory=$true,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true,HelpMessage="Enter target DirectoryID")] 41 | [String]$DirectoryID, 42 | 43 | [Parameter(Mandatory=$false,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true)] 44 | [Switch]$confirm, 45 | 46 | [Parameter(Mandatory=$true,ParameterSetName='InputParameters',ValueFromPipelineByPropertyName=$true,HelpMessage="Hashtable of parameters required to make API call, refer to get-help -examples for valid inputs")] 47 | [hashtable]$InputParameters, 48 | 49 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)] 50 | [hashtable]$token 51 | ) 52 | 53 | Begin{ 54 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 55 | $CommandName = $MyInvocation.MyCommand.Name 56 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND 57 | } 58 | Process{ 59 | 60 | try{ 61 | if($PSCmdlet.ParameterSetName -eq "InputParameters"){ 62 | $KeyHash = @{ 63 | set1 = @{ 64 | AcceptableKeys = @("DirectoryID","confirm") 65 | MandatoryKeys = @("DirectoryID") 66 | } 67 | } 68 | $CheckSet = Test-VPASHashtableKeysHelper -InputHash $InputParameters -KeyHash $KeyHash 69 | 70 | if(!$CheckSet){ 71 | $log = Write-VPASTextRecorder -inputval "FAILED TO FIND TARGET PARAMETER SET" -token $token -LogType MISC 72 | Write-Verbose "FAILED TO FIND TARGET PARAMETER SET" 73 | Write-VPASOutput -str "FAILED TO FIND TARGET PARAMETER SET...VIEW EXAMPLES BELOW:" -type E 74 | $examples = Write-VPASExampleHelper -CommandName $CommandName 75 | return $false 76 | } 77 | else{ 78 | foreach($key in $InputParameters.Keys){ 79 | Set-Variable -Name $key -Value $InputParameters.$key 80 | } 81 | } 82 | } 83 | }catch{ 84 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 85 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 86 | Write-Verbose "FAILED TO REMOVE DIRECTORY" 87 | Write-VPASOutput -str $_ -type E 88 | return $false 89 | } 90 | 91 | try{ 92 | 93 | $continueFlag = $false 94 | if(!$confirm){ 95 | Write-VPASOutput -str "ARE YOU SURE YOU WANT TO DELETE $DirectoryID (THIS IS NOT REVERSABLE) [N]: " -type Y 96 | $choice = Read-Host 97 | Write-Verbose "PARSING USER INPUT" 98 | 99 | if([String]::IsNullOrEmpty($choice)){ 100 | Write-Verbose "SETTING DEFAULT RESPONSE OF 'N'" 101 | $choice = "n" 102 | } 103 | 104 | 105 | $choice = $choice.ToLower() 106 | if($choice -eq "y"){ 107 | $continueFlag = $true 108 | Write-Verbose "COMMAND WILL CONTINUE" 109 | } 110 | else{ 111 | $continueFlag = $false 112 | Write-Verbose "COMMAND WILL STOP" 113 | } 114 | } 115 | else{ 116 | $continueFlag = $true 117 | Write-Verbose "CONFIRM FLAG PASSED, SKIPPING CONFIRMATION" 118 | } 119 | 120 | if(!$continueFlag){ 121 | Write-Verbose "EXITING COMMAND AND RETURNING FALSE" 122 | return $false 123 | } 124 | 125 | if($NoSSL){ 126 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 127 | $uri = "http://$PVWA/PasswordVault/API/Configuration/LDAP/Directories/$DirectoryID/" 128 | } 129 | else{ 130 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 131 | $uri = "https://$PVWA/PasswordVault/API/Configuration/LDAP/Directories/$DirectoryID/" 132 | } 133 | 134 | Write-Verbose "MAKING API CALL TO CYBERARK" 135 | 136 | if($sessionval){ 137 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method DELETE -ContentType "application/json" -WebSession $sessionval 138 | } 139 | else{ 140 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method DELETE -ContentType "application/json" 141 | } 142 | Write-Verbose "SUCCESSFULLY DELETED: $DirectoryID" 143 | Write-Verbose "RETURNING TRUE" 144 | return $response 145 | }catch{ 146 | Write-Verbose "UNABLE TO DELETE DIRECTORY: $DirectoryID" 147 | Write-VPASOutput -str $_ -type E 148 | return $false 149 | } 150 | } 151 | End{ 152 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER 153 | } 154 | } 155 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/public/Update-VPASCustomThemeDraft.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | UPDATE A CUSTOM THEME DRAFT STATE 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | USE THIS FUNCTION TO UPDATE A CUSTOM THEME DRAFT STATE TO ACTIVE IN CYBERARK 7 | .LINK 8 | https://vpasmodule.com/commands/Update-VPASCustomThemeDraft 9 | .NOTES 10 | SelfHosted: TRUE 11 | PrivCloudStandard: FALSE 12 | SharedServices: FALSE 13 | .PARAMETER token 14 | HashTable of data containing various pieces of login information (PVWA, LoginToken, HeaderType, etc). 15 | If -token is not passed, function will use last known hashtable generated by New-VPASToken 16 | .PARAMETER ThemeName 17 | Unique identifier of the target theme 18 | .PARAMETER InputParameters 19 | HashTable of values containing the parameters required to make the API call 20 | .EXAMPLE 21 | $UpdateThemeDraftStatus = Update-VPASCustomThemeDraft -ThemeName {THEME NAME VALUE} 22 | .EXAMPLE 23 | $InputParameters = @{ 24 | ThemeName = "Default Light Copy" 25 | } 26 | $UpdateThemeDraftStatus = Update-VPASCustomThemeDraft -InputParameters $InputParameters 27 | .OUTPUTS 28 | $true if successful 29 | --- 30 | $false if failed 31 | #> 32 | function Update-VPASCustomThemeDraft{ 33 | [OutputType([bool])] 34 | [CmdletBinding(DefaultParameterSetName='Set1')] 35 | Param( 36 | [Parameter(Mandatory=$true,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true,HelpMessage="Enter theme name (for example: vpasdark)")] 37 | [String]$ThemeName, 38 | 39 | [Parameter(Mandatory=$true,ParameterSetName='InputParameters',ValueFromPipelineByPropertyName=$true,HelpMessage="Hashtable of parameters required to make API call, refer to get-help -examples for valid inputs")] 40 | [hashtable]$InputParameters, 41 | 42 | [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)] 43 | [hashtable]$token 44 | ) 45 | 46 | Begin{ 47 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 48 | $CommandName = $MyInvocation.MyCommand.Name 49 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND 50 | } 51 | Process{ 52 | try{ 53 | if($PSCmdlet.ParameterSetName -eq "InputParameters"){ 54 | $KeyHash = @{ 55 | set1 = @{ 56 | AcceptableKeys = @("ThemeName") 57 | MandatoryKeys = @("ThemeName") 58 | } 59 | } 60 | $CheckSet = Test-VPASHashtableKeysHelper -InputHash $InputParameters -KeyHash $KeyHash 61 | 62 | if(!$CheckSet){ 63 | $log = Write-VPASTextRecorder -inputval "FAILED TO FIND TARGET PARAMETER SET" -token $token -LogType MISC 64 | Write-Verbose "FAILED TO FIND TARGET PARAMETER SET" 65 | Write-VPASOutput -str "FAILED TO FIND TARGET PARAMETER SET...VIEW EXAMPLES BELOW:" -type E 66 | $examples = Write-VPASExampleHelper -CommandName $CommandName 67 | return $false 68 | } 69 | else{ 70 | foreach($key in $InputParameters.Keys){ 71 | Set-Variable -Name $key -Value $InputParameters.$key 72 | } 73 | } 74 | } 75 | }catch{ 76 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 77 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 78 | Write-Verbose "FAILED TO RETRIEVE THEME DETAILS" 79 | Write-VPASOutput -str $_ -type E 80 | return $false 81 | } 82 | 83 | try{ 84 | $params = @{ 85 | themeName = $ThemeName 86 | } 87 | $log = Write-VPASTextRecorder -inputval $params -token $token -LogType PARAMS 88 | $params = $params | ConvertTo-Json 89 | 90 | Write-Verbose "MAKING API CALL TO CYBERARK" 91 | if($NoSSL){ 92 | Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" 93 | $uri = "http://$PVWA/PasswordVault/API/Themes/$ThemeName/draft/" 94 | } 95 | else{ 96 | Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" 97 | $uri = "https://$PVWA/PasswordVault/API/Themes/$ThemeName/draft/" 98 | } 99 | $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI 100 | $log = Write-VPASTextRecorder -inputval "POST" -token $token -LogType METHOD 101 | 102 | if($sessionval){ 103 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method POST -Body $params -ContentType "application/json" -WebSession $sessionval 104 | } 105 | else{ 106 | $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method POST -Body $params -ContentType "application/json" 107 | } 108 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: TRUE" -token $token -LogType MISC 109 | Write-Verbose "SUCCESSFULLY UPDATED CUSTOM THEME DRAFT STATE" 110 | return $true 111 | }catch{ 112 | $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR 113 | $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC 114 | Write-Verbose "UNABLE TO UPDATE CUSTOM THEME DRAFT STATE" 115 | Write-VPASOutput -str $_ -type E 116 | return $false 117 | } 118 | } 119 | End{ 120 | $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /VpasModule/14.4.1/public/Write-VPASOutput.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .Synopsis 3 | OUTPUT MESSAGES FOR VpasModule 4 | CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com 5 | .DESCRIPTION 6 | OUTPUTS MESSAGES 7 | .LINK 8 | N/A 9 | .NOTES 10 | SelfHosted: TRUE 11 | PrivCloudStandard: TRUE 12 | SharedServices: TRUE 13 | .PARAMETER str 14 | Target string that will be displayed 15 | .PARAMETER type 16 | The type of the message (Red for errors, Yellow for user input, Magenta for extra information, etc.) 17 | Possible values: C, G, M, E, Y, S 18 | .PARAMETER Initialized 19 | Backend flag to not parse New-VPASToken variables 20 | .EXAMPLE 21 | $str = Write-VPASOutput -str "EXAMPLE ERROR MESSAGE" -type E 22 | .EXAMPLE 23 | $str = Write-VPASOutput -str "EXAMPLE RESPONSE MESSAGE" -type C 24 | .EXAMPLE 25 | $str = Write-VPASOutput -str "EXAMPLE GENERAL MESSAGE" -type M 26 | .EXAMPLE 27 | $str = Write-VPASOutput -str "EXAMPLE HEADER MESSAGE" -type G 28 | .EXAMPLE 29 | $str = Write-VPASOutput -str "EXAMPLE INPUT MESSAGE" -type Y 30 | .EXAMPLE 31 | $str = Write-VPASOutput -str "EXAMPLE SIMULATION MESSAGE" -type S 32 | .OUTPUTS 33 | String if successful 34 | --- 35 | $false if failed 36 | #> 37 | function Write-VPASOutput{ 38 | [OutputType([String])] 39 | [CmdletBinding(DefaultParameterSetName='Set1')] 40 | Param( 41 | [Parameter(Mandatory=$true,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true,HelpMessage="Enter string to output")] 42 | [String]$str, 43 | 44 | [Parameter(Mandatory=$true,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true,HelpMessage="Enter type of string (C, G, M, E, Y, S, DY)")] 45 | [ValidateSet('C','G','M','E','Y','S','DY')] 46 | [String]$type, 47 | 48 | [Parameter(Mandatory=$false,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true)] 49 | [Switch]$Initialized 50 | 51 | ) 52 | Begin{ 53 | if($Initialized){ 54 | $HideWarnings = $false 55 | } 56 | else{ 57 | $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token 58 | } 59 | } 60 | Process{ 61 | if($type -eq "g"){ 62 | write-host $str -ForegroundColor Green 63 | } 64 | elseif($type -eq "c"){ 65 | if(!$HideWarnings){ 66 | write-host $str -ForegroundColor Cyan 67 | } 68 | } 69 | elseif($type -eq "e"){ 70 | if(!$HideWarnings){ 71 | write-host $str -ForegroundColor Red 72 | } 73 | } 74 | elseif($type -eq "m"){ 75 | if(!$HideWarnings){ 76 | write-host $str -ForegroundColor Magenta 77 | } 78 | } 79 | elseif($type -eq "y"){ 80 | write-host $str -ForegroundColor Yellow -NoNewline 81 | } 82 | elseif($type -eq "s"){ 83 | write-host $str -ForegroundColor Gray 84 | } 85 | elseif($type -eq "dy"){ 86 | write-host $str -ForegroundColor DarkYellow 87 | } 88 | } 89 | End{ 90 | 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /VpasModule/LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 - 2025 Vadim Melamed 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /VpasModule/README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 |

6 | A simplified PowerShell module to interact with CyberArk Web Services for Self Hosted, PrivilegeCloud Standard, and SharedServices (ISPSS) solutions as well as Identity/DPA/ConnectorManagement API suite 7 |

8 | 9 |

10 | Creator: Vadim Melamed 11 |
12 | Email: vpasmodule@gmail.com 13 |

14 | 15 |
16 | 17 | | PSGallery | CodeFactor | 18 | |---------------------------|---------------------------| 19 | | [![downloads][]][psgallery-site] | [![codefactor][]][codefactor-site]| 20 | 21 | [downloads]:https://img.shields.io/powershellgallery/dt/vpasmodule.svg?color=darkblue 22 | [psgallery-site]:https://www.powershellgallery.com/packages/VpasModule 23 | [codefactor-site]:https://www.codefactor.io/repository/github/vmelamed5/cyberark 24 | [codefactor]:https://www.codefactor.io/repository/github/vmelamed5/cyberark/badge 25 | 26 |
27 | 28 | ## Installation 29 | 30 | Install the module via [PowershellGallery](https://www.powershellgallery.com/packages/VpasModule/) 31 | 32 | ```powershell 33 | Install-Module VpasModule -scope CurrentUser 34 | ``` 35 | 36 | ## Usage 37 | 38 | ```powershell 39 | # Step1) import vpasmodule 40 | Import-Module vpasmodule 41 | 42 | # Step2) Retrieve cyberark login token via New-VPASToken 43 | New-VPASToken -PVWA "MyPVWAServer.com" -AuthType cyberark 44 | 45 | # Step3) Run desired API calls 46 | $SafeDetails = Get-VPASSafes -searchQuery "TestSafe" 47 | $AllAccounts = Get-VPASAllAccounts 48 | 49 | # Step4: Invalidate cyberark login token via Remove-VPASToken 50 | Remove-VPASToken 51 | ``` 52 | 53 | ## Supported Versions 54 | ``` 55 | > v10.10 - SelfHosted 56 | > v11.X - SelfHosted 57 | > v12.X - SelfHosted 58 | > v13.X - SelfHosted + PrivilegeCloud 59 | > v14.X - SelfHosted + PrivilegeCloud + Identity 60 | ``` 61 | ``` 62 | > v14.4.1 (Current): 63 | - SelfHosted 64 | - PrivilegeCloudStandard 65 | - SharedServices (ISPSS) 66 | - Identity (WORK IN PROGRESS) 67 | - ConnectorManagement (WORK IN PROGRESS) 68 | - DynamicPrivilegedAccess (WORK IN PROGRESS) 69 | ``` 70 | 71 | ## Documentation 72 | Find version specific README.md inside specific vpasmodule versions for more documentation on function syntax, examples, usages, etc.\ 73 | \ 74 | Please visit [VpasModule Website](https://vpasmodule.com/index.html) to stay up to date with any updates, changes, and various other features 75 | 76 | --------------------------------------------------------------------------------