private/Write-VPASTextRecorder.ps1

<#
.Synopsis
   OUTPUT TEXT RECORDING FOR AN API SESSION
   CREATED BY: Vadim Melamed, EMAIL: vmelamed5@gmail.com
.DESCRIPTION
   HELPER FUNCTION TO RECORD TEXT FOR AN API SESSION
#>

function Write-VPASTextRecorder{
    [OutputType([bool])]
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=0)]
        [ValidateSet('MISC','URI','METHOD','RETURN','PARAMS','ERROR','DIVIDER','COMMAND','HELPER','DIVIDERHELPER','RETURNARRAY','WHATIF1','WHATIF2')]
        [String]$LogType,

        [Parameter(ValueFromPipelineByPropertyName=$true,Position=1)]
        [Switch]$NewFile,

        [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=2)]
        [hashtable]$token,

        [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=3)]
        [psobject]$inputval,

        [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=4)]
        [Switch]$Helper
    )

    Begin{
        $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion = Get-VPASSession -token $token
    }
    Process{
        try{
            if($EnableTextRecorder){
                $timestamp = Get-Date -Format "(MM-dd-yyyy HH:mm:ss)"
                $curUser = $env:UserName
                $targetDirectory = "C:\Users\$curUser\AppData\Local\VPASModuleOutputs"
                $targetLogsDirectory = "C:\Users\$curUser\AppData\Local\VPASModuleOutputs\APITextRecorder"
                $targetLog = "C:\Users\$curUser\AppData\Local\VPASModuleOutputs\APITextRecorder\APISession_$AuditTimeStamp.log"

            if($NewFile){
                #CREATING DIRECTORY
                if(Test-Path -Path $targetDirectory){
                    #DO NOTHING
                }
                else{
                    write-verbose "$targetDirectory DOES NOT EXIST, CREATING DIRECTORY"
                    $MakeDirectory = New-Item -Path $targetDirectory -Type Directory
                }

                if(Test-Path -Path $targetLogsDirectory){
                    #DO NOTHING
                }
                else{
                    write-verbose "$targetLogsDirectory DOES NOT EXIST, CREATING DIRECTORY"
                    $MakeDirectory = New-Item -Path $targetLogsDirectory -Type Directory
                }
                write-output "$timestamp : BEGIN TEXT RECORDER" | Set-Content $targetLog
            }

                if($LogType -eq "MISC"){
                    if($Helper){
                        write-output "$timestamp : `t$inputval" | Add-Content $targetLog
                    }
                    else{
                        write-output "$timestamp : $inputval" | Add-Content $targetLog
                    }
                }
                elseif($LogType -eq "URI"){
                    if($Helper){
                        write-output "$timestamp : `tREST API URL: $inputval" | Add-Content $targetLog
                    }
                    else{
                        write-output "$timestamp : REST API URL: $inputval" | Add-Content $targetLog
                    }
                }
                elseif($LogType -eq "METHOD"){
                    if($Helper){
                        write-output "$timestamp : `tREST API METHOD: $inputval" | Add-Content $targetLog
                    }
                    else{
                        write-output "$timestamp : REST API METHOD: $inputval" | Add-Content $targetLog
                    }
                }
                elseif($LogType -eq "RETURN"){

                    if($Helper){
                        write-output "$timestamp : `tREST API RETURN:" | Add-Content $targetLog
                        foreach($key in $inputval.PSObject.Properties.name){
                            $keyval = $inputval.$key
                            if([String]::IsNullOrEmpty($keyval)){
                                $keyval = "NULL"
                            }
                            write-output "$timestamp : `t`t$key = $keyval" | Add-Content $targetLog
                        }
                    }
                    else{
                        write-output "$timestamp : REST API RETURN:" | Add-Content $targetLog
                        foreach($key in $inputval.PSObject.Properties.name){
                            $keyval = $inputval.$key
                            if([String]::IsNullOrEmpty($keyval)){
                                $keyval = "NULL"
                            }
                            write-output "$timestamp : `t$key = $keyval" | Add-Content $targetLog
                        }
                    }
                }
                elseif($LogType -eq "RETURNARRAY"){

                    if($Helper){
                        write-output "$timestamp : REST API RETURN:" | Add-Content $targetLog
                        foreach($key in $inputval.PSObject.Properties.name){
                            $keyval = $inputval.$key
                            if(!$keyval){
                                $keyval = "NULL"
                                write-output "$timestamp : `t`t$key = $keyval" | Add-Content $targetLog
                            }
                            else{
                                write-output "$timestamp : `t`t$key = @{" | Add-Content $targetLog
                                foreach($arrentry in $keyval){
                                    write-output "$timestamp : `t`t`t@(" | Add-Content $targetLog
                                    foreach($key2 in $arrentry.PSObject.Properties.name){
                                        $keyval2 = $arrentry.$key2
                                        if(!$keyval2){
                                            $keyval2 = "NULL"
                                        }
                                        write-output "$timestamp : `t`t`t`t$key2 = $keyval2" | Add-Content $targetLog
                                    }
                                    write-output "$timestamp : `t`t`t)" | Add-Content $targetLog
                                }
                                write-output "$timestamp : `t`t}" | Add-Content $targetLog
                            }
                        }
                    }
                    else{
                        write-output "$timestamp : REST API RETURN:" | Add-Content $targetLog
                        foreach($key in $inputval.PSObject.Properties.name){
                            $keyval = $inputval.$key
                            if(!$keyval){
                                $keyval = "NULL"
                                write-output "$timestamp : `t$key = $keyval" | Add-Content $targetLog
                            }
                            else{
                                write-output "$timestamp : `t$key = @{" | Add-Content $targetLog
                                foreach($arrentry in $keyval){
                                    write-output "$timestamp : `t`t@(" | Add-Content $targetLog
                                    foreach($key2 in $arrentry.PSObject.Properties.name){
                                        $keyval2 = $arrentry.$key2
                                        if(!$keyval2){
                                            $keyval2 = "NULL"
                                        }
                                        write-output "$timestamp : `t`t`t$key2 = $keyval2" | Add-Content $targetLog
                                    }
                                    write-output "$timestamp : `t`t)" | Add-Content $targetLog
                                }
                                write-output "$timestamp : `t}" | Add-Content $targetLog
                            }
                        }
                    }
                }
                elseif($LogType -eq "PARAMS"){

                    if($Helper){
                        write-output "$timestamp : `tREST API PARAMETERS:" | Add-Content $targetLog
                        $timestamp = Get-Date -Format "(MM-dd-yyyy HH:mm:ss)"
                        $outputstr = "$timestamp : `tparams = @{"
                        write-output $outputstr | Add-Content $targetLog

                        $LogOut = Write-Iterate -inputval $inputval -counter 2 -targetLog $targetLog

                        $timestamp = Get-Date -Format "(MM-dd-yyyy HH:mm:ss)"
                        $outputstr = "$timestamp : `t}"
                        write-output $outputstr | Add-Content $targetLog
                    }
                    else{
                        write-output "$timestamp : REST API PARAMETERS:" | Add-Content $targetLog
                        $timestamp = Get-Date -Format "(MM-dd-yyyy HH:mm:ss)"
                        $outputstr = "$timestamp : params = @{"
                        write-output $outputstr | Add-Content $targetLog

                        $LogOut = Write-Iterate -inputval $inputval -counter 1 -targetLog $targetLog

                        $timestamp = Get-Date -Format "(MM-dd-yyyy HH:mm:ss)"
                        $outputstr = "$timestamp : }"
                        write-output $outputstr | Add-Content $targetLog
                    }
                }
                elseif($LogType -eq "ERROR"){
                    if($Helper){
                        write-output "$timestamp : `tREST API ERROR MESSAGE: $inputval" | Add-Content $targetLog
                    }
                    else{
                        write-output "$timestamp : REST API ERROR MESSAGE: $inputval" | Add-Content $targetLog
                    }
                }
                elseif($LogType -eq "DIVIDER"){
                    if($Helper){
                        write-output "$timestamp : `t***END OF HELPER COMMAND: $inputval" | Add-Content $targetLog
                    }
                    else{
                        write-output "$timestamp : END OF COMMAND: $inputval" | Add-Content $targetLog
                        write-output "$timestamp : *********************************" | Add-Content $targetLog
                    }
                }
                elseif($LogType -eq "COMMAND"){
                    if($Helper){
                        write-output "$timestamp : `t***BEGINNING HELPER COMMAND: $inputval" | Add-Content $targetLog
                    }
                    else{
                        write-output "$timestamp : BEGINNING COMMAND: $inputval" | Add-Content $targetLog
                    }
                }
                elseif($LogType -eq "WHATIF1"){
                    write-output "$timestamp : =================================" | Add-Content $targetLog
                    write-output "$timestamp : ============ WHAT IF ============" | Add-Content $targetLog
                    write-output "$timestamp : =================================" | Add-Content $targetLog
                }
                elseif($LogType -eq "WHATIF2"){
                    write-output "$timestamp : =================================" | Add-Content $targetLog
                    write-output "$timestamp : ======= END OF SIMLUATION =======" | Add-Content $targetLog
                    write-output "$timestamp : =================================" | Add-Content $targetLog
                }
                return $true
            }
            else{
                return $true
            }
        }catch{
            Write-VPASOutput -str "COULD NOT WRITE TO LOGS" -type E
            Write-VPASOutput -str "$_" -type E
            return $false
        }
    }
    End{

    }
}