public/Export-VPASPlatform.ps1
<#
.Synopsis EXPORT PLATFORM FROM CYBERARK CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com .DESCRIPTION USE THIS FUNCTION TO EXPORT A PLATFORM FROM CYBERARK .LINK https://vpasmodule.com/commands/Export-VPASPlatform .PARAMETER token HashTable of data containing various pieces of login information (PVWA, LoginToken, HeaderType, etc). If -token is not passed, function will use last known hashtable generated by New-VPASToken .PARAMETER HideOutput Suppress any output to the console .PARAMETER Directory Location where the exported files should be placed .PARAMETER PlatformName Unique target PlatformName that will be exported .PARAMETER InputParameters HashTable of values containing the parameters required to make the API call .EXAMPLE $ExportPlatformStatus = Export-VPASPlatform -PlatformName {PLATFORMNAME VALUE} .EXAMPLE $ExportPlatformStatus = Export-VPASPlatform -PlatformName {PLATFORMNAME VALUE} -Directory {C:\ExampleDir} .EXAMPLE $InputParameters = @{ PlatformName = "TargetPlatformID" Directory = "C:\temp\platformExports" HideOutput = $true|$false } $ExportPlatformStatus = Export-VPASPlatform -InputParameters $InputParameters .OUTPUTS $true if successful --- $false if failed #> function Export-VPASPlatform{ [OutputType([bool])] [CmdletBinding(DefaultParameterSetName='Set1')] Param( [Parameter(Mandatory=$true,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true,HelpMessage="PlatformID of target platform to be exported (for example: WinSeverLocal)")] [String]$PlatformName, [Parameter(Mandatory=$false,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true)] [String]$Directory, [Parameter(Mandatory=$false,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true)] [Switch]$HideOutput, [Parameter(Mandatory=$true,ParameterSetName='InputParameters',ValueFromPipelineByPropertyName=$true,HelpMessage="Hashtable of parameters required to make API call, refer to get-help -examples for valid inputs")] [hashtable]$InputParameters, [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)] [hashtable]$token ) Begin{ $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token $CommandName = $MyInvocation.MyCommand.Name $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND } Process{ try{ if($PSCmdlet.ParameterSetName -eq "InputParameters"){ $KeyHash = @{ set1 = @{ AcceptableKeys = @("PlatformName","Directory","HideOutput") MandatoryKeys = @("PlatformName") } } $CheckSet = Test-VPASHashtableKeysHelper -InputHash $InputParameters -KeyHash $KeyHash if(!$CheckSet){ $log = Write-VPASTextRecorder -inputval "FAILED TO FIND TARGET PARAMETER SET" -token $token -LogType MISC Write-Verbose "FAILED TO FIND TARGET PARAMETER SET" Write-VPASOutput -str "FAILED TO FIND TARGET PARAMETER SET...VIEW EXAMPLES BELOW:" -type E $examples = Write-VPASExampleHelper -CommandName $CommandName return $false } else{ foreach($key in $InputParameters.Keys){ Set-Variable -Name $key -Value $InputParameters.$key } } } }catch{ $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC Write-Verbose "FAILED TO EXPORT PLATFORM" Write-VPASOutput -str $_ -type E return $false } try{ if($NoSSL){ Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" $uri = "http://$PVWA/PasswordVault/API/Platforms/$PlatformName/Export" } else{ Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" $uri = "https://$PVWA/PasswordVault/API/Platforms/$PlatformName/Export" } $log = Write-VPASTextRecorder -inputval $uri -token $token -LogType URI $log = Write-VPASTextRecorder -inputval "POST" -token $token -LogType METHOD if([String]::IsNullOrEmpty($Directory)){ $curUser = $env:UserName $outpath = "C:\Users\$curUser\AppData\Local\VPASModuleOutputs" Write-Verbose "NO DIRECTORY SPECIFIED, USING THE FOLLOWING OUTPUT DIRECTORY:" Write-Verbose $outpath } else{ Write-Verbose "SUPPLIED DIRECTORY VALUE: $Directory" $outpath = $Directory } if(Test-Path -Path $outpath){ write-verbose "$outpath EXISTS" } else{ write-verbose "$outpath DOES NOT EXIST, CREATING DIRECTORY" $MakeDirectory = New-Item -Path $outpath -Type Directory } Write-Verbose "MAKING API CALL TO CYBERARK" if($sessionval){ $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method POST -ContentType "application/json" -WebSession $sessionval -OutFile "$outpath\$PlatformName.zip" } else{ $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method POST -ContentType "application/json" -OutFile "$outpath\$PlatformName.zip" } Write-Verbose "SUCCESSFULLY EXPORTED $PlatformName TO $outpath" if(!$HideOutput){ Write-VPASOutput -str "SUCCESSFULLY EXPORTED $PlatformName TO $outpath" -type M } $log = Write-VPASTextRecorder -inputval "$PlatformName EXPORTED TO $outpath" -token $token -LogType MISC $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: TRUE" -token $token -LogType MISC return $true }catch{ $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC Write-Verbose "UNABLE TO EXPORT $PlatformName" Write-VPASOutput -str $_ -type E return $false } } End{ $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER } } |