Skip to content

Personalización de errores de validación de parámetros en PowerShell

  • by Jesús Torres
No diría que Binance es la plataforma más fácil para principiantes, pero puede sentir que está seguro dentro de ella. Puede ...
Leer Más
Hoy, veremos una de las criptomonedas más exclusivas: Dogecoin y descubriremos dónde y cómo comprar Dogecoin. En esta guía, aprenderá ...
Leer Más
Este corredor en línea tiene tarifas de negociación bajas y una amplia cartera de instrumentos financieros. Cubriendo más de 135 ...
Leer Más

El manejo de errores es a menudo uno de los aspectos más tediosos y que requieren más tiempo de la programación. Las funciones avanzadas de PowerShell tienen la capacidad muy útil de rendir una multitud de formas de validar parámetros antaño de que sean evaluados por la función en su conjunto. Evitar datos erróneos mediante la acometividad de parámetros hace que el trabajo de un programador sea mucho más obvio.

En el pasado, los errores que se transmitían al beneficiario no siempre eran muy avíos. Comenzando en PowerShell Core y continuando en PowerShell 7, la capacidad de delimitar un mensaje de error personalizado es posible. En sitio de utilizar un error predeterminado basado en la ornato del parámetro, puede delimitar el suyo propio. ¡Aprenda a mejorar sus funciones avanzadas para rendir esta nueva funcionalidad!

Cuál es el ErrorMessage ¿propiedad?

Es posible que haya conocido un interiorista de parámetros como ValidateScript antaño y, si se usaba, descubrió que el mensaje de error no siempre era el más descriptivo. A menudo, es útil crear su propio mensaje que refleje con maduro precisión lo que está haciendo la función y por qué puede tener un error. Tres decoradores de acometividad de parámetros tienen el extra ErrorMessage propiedad arreglado para ellos.

  • ValidateSet
  • ValidateScript
  • ValidatePattern

¿Qué hace en realidad esta propiedad? Primero, veamos la forma antigua de hacer esto. En el código de ejemplo a continuación, estamos usando ValidatePattern para probar si una cautiverio tiene 8 dígitos. Si no se proporciona una cautiverio completamente numérica, recibimos un error que podría considerarse críptico y no muy útil para el beneficiario de su función.

Function Test-ValidatePattern {
    [CmdletBinding()]
    Param (
        [ValidatePattern('^d{8}$')]
        [String]$Digits
    )

    Process {
      Write-Output $Digits
    }
}

Donde hace ErrorMessage entrar entonces? Bueno, simplemente agregando la propiedad adicional y especificando un mensaje de error para mostrar al beneficiario final, podemos hacer que la función sea mucho más útil y obvio de usar.

Function Test-ValidatePattern {
    [CmdletBinding()]
    Param (
        [ValidatePattern('^d{8}$',ErrorMessage = "Please use an 8 digit numeric value.")]
        [String]$Digits
    )

    Process {
      Write-Output $Digits
    }
}

Extendiendo el ErrorMessage Funcionalidad

Utilizando el ErrorMessage El parámetro hace que la visualización de errores sea mucho más obvio de usar. Un aspecto que yerro es el valencia que se transmite en sí mismo. En el mensaje de error predeterminado innovador, es posible que haya notado que tanto el valencia pasado como el patrón de expresión regular de acometividad se mostraban en el mensaje de error. Gracias a Dios, usando una sintaxis similar al cirujano de formato en PowerShell, además podemos incluir esos títulos en nuestro mensaje de error.

  • {0} – El pasado en valencia.
  • {1} – El patrón de expresiones regulares.
Function Test-ValidatePattern {
    [CmdletBinding()]
    Param (
        [ValidatePattern('^d{8}$',ErrorMessage = "{0} is not an 8 digit numeric value fitting the pattern, {1}")]
        [String]$Digits
    )

    Process {
      Write-Output $Digits
    }
}

Esta sintaxis funciona en los tres decoradores de acometividad y de la misma guisa. El primer parámetro de formato es la representación de texto del valencia que se pasa mientras que el segundo parámetro de formato es el conjunto, secuencia de comandos o patrón con el que se compara el valencia.

Más ejemplos de utilización ErrorMessage

Para ilustrar cómo usar ErrorMessage interiormente de tu ValidateSet, ValidateScripty ValidatePattern Los decoradores pueden mover aún más los pasos de acometividad desde interiormente de sus bloques de inicio o proceso hasta los parámetros mismos, echemos un vistazo a una función que utiliza los tres decoradores de parámetros.

Function Get-Computer {
  [CmdletBinding()]
  Param (
    [ValidatePattern('^NET-d{8}$',ErrorMessage = "{0} is not an 8 digit numeric value preceded by 'NET-' fitting the pattern, {1}")]
    [String]$ComputerName,

    [ValidateSet('Desktop','Laptop','Mobile',ErrorMessage = "{0} is not one of the allowed devices, {1}")]
    [String]$Type,

    [ValidateScript({
      $_ -GT (Get-Date)
    },ErrorMessage = "The expiration date, {0}, is not greater than the current date per the following script: {1}")]
    [DateTime]$ExpirationDate
  )

  Process {
    [PSCustomObject]@{
      "ComputerName" = $ComputerName
      "Type"         = $Type
      "ExpireDate"   = $ExpirationDate
    }
  }
}

Como puede ver, a medida que se validaba cada parámetro, la ejecución se detendría si el valencia no pasaba. Si proporciona varios títulos incorrectos, solo el primero generará un error y los siguientes errores no se mostrarán hasta que se haya corregido ese valencia.

Conclusión

Añadiendo funcionalidad adicional para el ValidateSet, ValidateScripty ValidatePattern Los decoradores de parámetros son una gran preeminencia para la usabilidad de las funciones avanzadas de PowerShell. En sitio de mensajes de error crípticos que tienen un valencia leve para el beneficiario que ejecuta la función, se pueden mostrar mensajes de error adecuados que dan una idea de lo que salió mal. Esto mueve el manejo de errores a un nivel más parada que los bloques de inicio o proceso, lo que hace que el código sea más honesto y conciso.

Transmitido que esta funcionalidad está arreglado en PowerShell Core y PowerShell 7, necesitará una traducción más flamante de PowerShell para rendir esta funcionalidad. Con la puesta al día, además se obtienen numerosos beneficios de velocidad, seguridad y funcionalidad. ¡Mejore sus funciones avanzadas con esta útil propiedad y haga la vida más obvio para los usuarios de sus funciones hoy!