Functions/Remove-DqChecks.ps1

Function Remove-DqChecks
{
  <#
    .SYNOPSIS
      Deze functie geeft de gebruiker, aan de hand van een lijst van controles, de mogelijkheid deze te verwijderen uit een DQ Monitor Webservice.
   
    .DESCRIPTION
      De Remove-DqChecks functie haalt een lijst op met controles uit een DQ Monitor Webservice die kunnen worden verwijderd en presenteert deze.
      Via een keuzemenu kan de gebruiker een of meerdere controles verwijderen.
      Voordat deze functie gebruikt wordt, zorg ervoor dat de Context is gezet via functie Set-DqContext.
   
    .INPUTS
      Geen.
   
    .OUTPUTS
      Geen.
     
    .EXAMPLE
      PS> Remove-DqChecks
       
      Maak een keuze uit een van onderstaande controles (kies 'Q' om af te breken):
          # Naam Entiteit Omschrijving
      ----- ------------------------- --------------- ----------------------------------------
      [ 1] MY_CUSTOM_CHECK006 Eenheid Controleert of er aanwezigheid en geldigheid controles aanwezig zijn.
      [ 2] WOONGELUK_REL_GEG_GELDIG Relatie Controleert per voorbeeldrelatie of de adresgegevens correct zijn ingevuld. Controle gaat alleen over relaties die nog staan ingeschreven.
      [ 3] WOONGELUK_REL_GEG_GELDIG2 Relatie Controleert per voorbeeldrelatie of de adresgegevens correct zijn ingevuld. Controle gaat alleen over relaties die nog staan ingeschreven.
   
      Keuze (1-3 of q):
 
    .LINK
      Set-DqContext
  #>


  [CmdletBinding()]
  Param()

  Write-Verbose "Verkrijgen van lijst van controles die verwijderd kunnen worden..."
  
  $Deleted = 0
  While ($True) 
  {
    # We only support custom checks at this point.
    [Array]$CustomChecks = Get-DqChecks -CustomOnly
   
    If ($CustomChecks.Count -eq 0)
    {
      If ($Deleted -gt 0)
      {
        Write-Warning "Geen controles meer gevonden die verwijderd kunnen worden."
      }
      Else 
      {
        Write-Warning "Geen controles gevonden die verwijderd kunnen worden."
      }
      
      Return;
    }
    
    $LengthMaxLength = ($CustomChecks | Select -ExpandProperty Name | Measure-Object -Maximum -Property Length).Maximum
    $EntityMaxLength = ($CustomChecks | Select -ExpandProperty Entity | Measure-Object -Maximum -Property Length).Maximum

    Write-Host ""
    Write-Host "Maak een keuze uit een van onderstaande controles (kies 'Q' om af te breken):" 
    Write-Host " "
    Write-Host " #" "Naam".PadRight($LengthMaxLength) "Entiteit".PadRight($EntityMaxLength) "Omschrijving"
    Write-Host "-----" "-".PadRight($LengthMaxLength, "-") "-".PadRight($EntityMaxLength, "-") "-".PadRight(40, "-")
    For($x=1;$x -le $CustomChecks.Count; $x++)
    {
      $Check = $CustomChecks[$x-1]
      $Description = $Check.Documentation.Description.Replace([Char]10, ' ').Replace([Char]13, ' ')
      If ($Description.Length -gt 140)
      {
        $Description = $Description.Substring(0, 140);
      }

      Write-Host ([String]::Format("[{0}] {1} {2} {3}", $x.ToString().PadLeft(3, " "), $Check.Name.PadRight($LengthMaxLength), $Check.Entity.PadRight($EntityMaxLength), $Description));
    }
   
    Write-Host " "
    $Keuze = ""
    Do 
    {
      Do
      {
        $Keuze = Read-Host "Keuze (1-$($CustomChecks.Count) of q)"
      } While ($Keuze.Trim() -notmatch '^([0-9]{1,2})$|^[qQ]$')
   
      If($Keuze -match "^\d+$")
      {
        # Make sure we do not get out of bounds.
        If ([Int]$Keuze - 1 -gt ($CustomChecks.Count - 1) -or [Int]$Keuze -eq 0)
        {
          $Keuze = ""
        }
      }
    } While ([String]::IsNullOrEmpty($Keuze))
  
    Write-Host ""
    If ($Keuze.ToLowerInvariant().Equals("q"))
    {
      Write-Host "Handeling afgebroken."
      Return;
    }
   
    $Check = $CustomChecks[$Keuze-1];
    $Result = Remove-DqCheck -CheckObject $Check
    
    If ($Result)
    {
      $Deleted += 1;  
    }
  }
}