Functions/Remove-DqEntity.ps1

Function Remove-DqEntity
{
  <#
    .SYNOPSIS
      Deze functie verwijdert een enkele entiteit uit een DQ Monitor Webservice.
   
    .DESCRIPTION
      De Remove-DqEntity functie geeft de mogelijkheid om een enkele entiteit te verwijderen uit een DQ Monitor Webservice.
      Voordat deze functie gebruikt wordt, zorg ervoor dat de Context is gezet via functie Set-DqContext.
   
    .PARAMETER Name
      De unieke naam van het entiteit zoals deze bekend is bij de DQ Monitor Webservice.
     
    .PARAMETER Force
      Optioneel: Indien opgegeven zal het entiteit worden verwijderd zonder eerst een bevestiging te vragen.
       
    .REMARS
      Let op: Indien er nog controles aan een entiteit hangen is het niet mogelijk het entiteit te verwijderen.
      Zorg er eerst voor dat het entiteit niet meer wordt gebruikt.
 
    .INPUTS
      Geen.
   
    .OUTPUTS
      Geen.
   
    .EXAMPLE
      PS> Remove-DqEntity -Name "Contract"
      Weet u zeker dat entiteit 'Contract' met Id 84 verwijderd moet worden uit DQ Monitor? Dit kan niet ongedaan gemaakt worden:
      Keuze (jn):
   
    .EXAMPLE
      PS> Remove-DqEntity -Name "Contract" -Force
      Entiteit is verwijderd.
 
    .LINK
      Set-DqContext
  #>


  [CmdletBinding(DefaultParameterSetName="ByEntityName")]
  Param(
    [Parameter(Mandatory=$True, ParameterSetName="ByEntityName", position=1)]
    [ValidateNotNullOrEmpty()]
    [String] $Name,

    [Parameter(Mandatory=$False, ParameterSetName="ByEntityName", position=2)]
    [Switch] $Force,

    [Parameter(Mandatory=$True, ParameterSetName="ByEntityObject", position=1)]
    [ValidateNotNull()]
    [PsCustomObject] $EntityObject
  )
  
  If ($PSCmdlet.ParameterSetName.Equals("ByEntityName"))
  { 
    $EntityObjects = Get-DqEntities -CustomOnly | Where-Object { $_.Name -eq $Name } 
    If (-not($EntityObjects))
    {
      Write-Host "Entiteit '$($Name)' kon niet worden gevonden." -ForegroundColor Red
      Return $False;
    }

    $EntityObject = $EntityObjects | Select -First 1
  }
  
  If (-not($EntityObject.IsCustom))
  {
    Write-Host "Entiteit '$($EntityObject.Name)' is geen eigen gemaakte entiteit. Verwijderen wordt niet ondersteund." -ForegroundColor Red 
    Return;
  }

  # Check if there are checks that depend on this entity
  [Array] $Checks = Get-DqChecks | Where-Object { $_.Entity -eq $EntityObject.Name }
  If ($Checks.Count -gt 0)
  {
    Write-Host "Entiteit '$($EntityObject.Name)' is nog gekoppeld aan $($Checks.Count) controle(s). Verwijderen wordt niet ondersteund." -ForegroundColor Red 
    Return;
  }
  
  If (-Not($Force.IsPresent) -or -not($Force))
  {
    Write-Host "Weet u zeker dat entiteit " -NoNewline
    Write-Host "'$($EntityObject.Name)'" -NoNewline -ForegroundColor White -BackgroundColor DarkRed 
    Write-Host " met Id " -NoNewline
    Write-Host "$($EntityObject.Id)" -NoNewline -ForegroundColor White -BackgroundColor DarkRed 
    Write-Host " verwijderd moet worden uit DQ Monitor? Dit kan niet ongedaan gemaakt worden:" 
  
    $Keuze = ""
    Do
    {
      $Keuze = Read-Host "Keuze (jn)"
    } While ($Keuze.Trim() -notmatch '^[jJnN]$')

    If ($Keuze.ToLowerInvariant().Equals("n"))
    {
      Write-Host "Handeling afgebroken."
      Return;
    }
  }

  Write-Verbose "Verwijderen van entiteit '$($EntityObject.Name)' met Id $($EntityObject.Id)..."
  Remove-Entity -EntityId $EntityObject.Id -ErrorAction Stop | Out-Null
  Write-Host "Entiteit is verwijderd."
}