public/Remove-VPASDirectory.ps1

<#
.Synopsis
   DELETE DIRCECTORY
   CREATED BY: Vadim Melamed, EMAIL: vmelamed5@gmail.com
.DESCRIPTION
   USE THIS FUNCTION TO DELETE DIRECTORY
.PARAMETER NoSSL
   If the environment is not set up for SSL, API calls will be made via HTTP not HTTPS (Not Recommended!)
.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 confirm
   Remove the confirmation prompt asking to confirm the deletion of the selected DirectoryID
.PARAMETER DirectoryID
   Unique DirectoryID that maps to the target Directory to be deleted
.EXAMPLE
   $DeleteDirectoryStatus = Remove-VPASDirectory -DirectoryID {DIRECTORYID VALUE}
.OUTPUTS
   $true if successful
   $false if failed
#>

function Remove-VPASDirectory{
    [OutputType([bool])]
    [CmdletBinding()]
    Param(

        [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,HelpMessage="Enter target DirectoryID",Position=0)]
        [String]$DirectoryID,

        [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=1)]
        [Switch]$confirm,

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

        [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=3)]
        [Switch]$NoSSL

    )

    Begin{
        $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL = Get-VPASSession -token $token
    }
    Process{

        Write-Verbose "SUCCESSFULLY PARSED PVWA VALUE"
        Write-Verbose "SUCCESSFULLY PARSED TOKEN VALUE"
        Write-Verbose "SUCCESSFULLY PARSED DIRECTORYID: $DirectoryID"

        try{

            $continueFlag = $false
            if(!$confirm){
                Write-VPASOutput -str "ARE YOU SURE YOU WANT TO DELETE $DirectoryID (THIS IS NOT REVERSABLE) [N]: " -type Y
                $choice = Read-Host
                Write-Verbose "PARSING USER INPUT"

                if([String]::IsNullOrEmpty($choice)){
                    Write-Verbose "SETTING DEFAULT RESPONSE OF 'N'"
                    $choice = "n"
                }


                $choice = $choice.ToLower()
                if($choice -eq "y"){
                    $continueFlag = $true
                    Write-Verbose "COMMAND WILL CONTINUE"
                }
                else{
                    $continueFlag = $false
                    Write-Verbose "COMMAND WILL STOP"
                }
            }
            else{
                $continueFlag = $true
                Write-Verbose "CONFIRM FLAG PASSED, SKIPPING CONFIRMATION"
            }

            if(!$continueFlag){
                Write-Verbose "EXITING COMMAND AND RETURNING FALSE"
                return $false
            }

            if($NoSSL){
                Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS"
                $uri = "http://$PVWA/PasswordVault/API/Configuration/LDAP/Directories/$DirectoryID/"
            }
            else{
                Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS"
                $uri = "https://$PVWA/PasswordVault/API/Configuration/LDAP/Directories/$DirectoryID/"
            }

            Write-Verbose "MAKING API CALL TO CYBERARK"

            if($sessionval){
                $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method DELETE -ContentType "application/json" -WebSession $sessionval
            }
            else{
                $response = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method DELETE -ContentType "application/json"
            }
            Write-Verbose "SUCCESSFULLY DELETED: $DirectoryID"
            Write-Verbose "RETURNING TRUE"
            return $response
        }catch{
            Write-Verbose "UNABLE TO DELETE DIRECTORY: $DirectoryID"
            Write-VPASOutput -str $_ -type E
            return $false
        }
    }
    End{

    }
}