public/Remove-VPASDirectory.ps1
<#
.Synopsis DELETE DIRCECTORY CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com .DESCRIPTION USE THIS FUNCTION TO DELETE DIRECTORY .LINK https://vpasmodule.com/commands/Remove-VPASDirectory .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 .PARAMETER InputParameters HashTable of values containing the parameters required to make the API call .EXAMPLE $DeleteDirectoryStatus = Remove-VPASDirectory -DirectoryID {DIRECTORYID VALUE} .EXAMPLE $InputParameters = @{ DirectoryID = "DeleteDirectoryID" confirm = $true|$false } $DeleteDirectoryStatus = Remove-VPASDirectory -InputParameters $InputParameters .OUTPUTS $true if successful --- $false if failed #> function Remove-VPASDirectory{ [OutputType([bool])] [CmdletBinding(DefaultParameterSetName='Set1')] Param( [Parameter(Mandatory=$true,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true,HelpMessage="Enter target DirectoryID")] [String]$DirectoryID, [Parameter(Mandatory=$false,ParameterSetName='Set1',ValueFromPipelineByPropertyName=$true)] [Switch]$confirm, [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 = @("DirectoryID","confirm") MandatoryKeys = @("DirectoryID") } } $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 REMOVE DIRECTORY" Write-VPASOutput -str $_ -type E return $false } 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{ $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER } } |