Functions/Monitoring/Export-PASPSMRecording.ps1
function Export-PASPSMRecording { <# .SYNOPSIS Saves a PSM Recording .DESCRIPTION Saves a specific recorded session to a file .PARAMETER RecordingID Unique ID of the recorded PSM session .PARAMETER Path The output file path for the recording. .PARAMETER sessionToken Hashtable containing the session token returned from New-PASSession .PARAMETER WebSession WebRequestSession object returned from New-PASSession .PARAMETER BaseURI PVWA Web Address Do not include "/PasswordVault/" .PARAMETER PVWAAppName The name of the CyberArk PVWA Virtual Directory. Defaults to PasswordVault .PARAMETER ExternalVersion The External CyberArk Version, returned automatically from the New-PASSession function from version 9.7 onwards. If the minimum version requirement of this function is not satisfied, execution will be halted. Omitting a value for this parameter, or supplying a version of "0.0" will skip the version check. .EXAMPLE $token | Export-PASPSMRecording -RecordingID 123_45 -path C:\PSMRecording.avi Saves PSM Recording with Id 123_45 to C:\PSMRecording.avi .INPUTS All parameters can be piped by property name .OUTPUTS .NOTES Minimum CyberArk Version 10.6 .LINK #> [CmdletBinding()] param( [parameter( Mandatory = $true, ValueFromPipelinebyPropertyName = $true )] [string]$RecordingID, [parameter( Mandatory = $true, ValueFromPipelinebyPropertyName = $true )] [ValidateNotNullOrEmpty()] [ValidateScript( { Test-Path -Path $_ -PathType Leaf -IsValid})] [string]$path, [parameter( Mandatory = $true, ValueFromPipelinebyPropertyName = $true )] [ValidateNotNullOrEmpty()] [hashtable]$sessionToken, [parameter( ValueFromPipelinebyPropertyName = $true )] [Microsoft.PowerShell.Commands.WebRequestSession]$WebSession, [parameter( Mandatory = $true, ValueFromPipelinebyPropertyName = $true )] [string]$BaseURI, [parameter( Mandatory = $false, ValueFromPipelinebyPropertyName = $true )] [string]$PVWAAppName = "PasswordVault", [parameter( Mandatory = $false, ValueFromPipelinebyPropertyName = $true )] [System.Version]$ExternalVersion = "0.0" ) BEGIN { $MinimumVersion = [System.Version]"10.6" }#begin PROCESS { Assert-VersionRequirement -ExternalVersion $ExternalVersion -RequiredVersion $MinimumVersion #Create URL for Request $URI = "$baseURI/$PVWAAppName/API/Recordings/$($RecordingID | Get-EscapedString)/Play" #send request to PAS web service $result = Invoke-PASRestMethod -Uri $URI -Method POST -Headers $sessionToken -WebSession $WebSession #if we get a platform byte array if($result) { try { $output = @{ Path = $path Value = $result Encoding = "Byte" } If($IsCoreCLR) { #amend parameters for splatting if we are in Core $output.Add("AsByteStream", $true) $output.Remove("Encoding") } #write it to a file Set-Content @output -ErrorAction Stop } catch {throw "Error Saving $path"} } } #process END {}#end } |