45 votes

Comment valider les paramètres de fonction PowerShell autorisant les chaînes vides ?

S'il vous plaît essayez ceci:

 function f1
{
    param(
    [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
    [string]
    $Text
    )
    $text
}

function f2
{
    param(
    [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
    #[string]
    $Text
    )
    $text
}

function f3
{
    param(
    [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$true)]
    [string]
    $Text
    )
    $text
}

f1 ''
f2 ''
f3 ''

Ici, f1 renvoie une erreur. Maintenant essaye

 f2 $null 
f3 $null    

Cette fois, seul f2 renvoie une erreur. Ce que je veux, c'est une fonction f, pour que

 f '' # is accepted
f $null # returns an error

90voto

Shay Levy Points 41404

L'attribut Obligatoire bloque les valeurs nulles et vides et vous invite à saisir une valeur. Pour autoriser les valeurs vides (y compris null), ajoutez l' attribut de paramètre AllowEmptyString :

 function f1
{
    param(
    [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
    [AllowEmptyString()]
    [string]$Text
    )
    $text
}

1voto

empo Points 12803

Juste par souci d'exhaustivité, si vous souhaitez que votre entrée soit validée par rapport au type de chaîne, vous pouvez le faire après la déclaration des paramètres :

 function f1
{
    param(
    [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
    $Text
    )
    if (!($text -eq '') -and !($text -as [string])) {write-host "wrong type"; return }
    $text
}

Cette fonction se comporte comme suit :

  • Lève l'exception "Impossible de lier l'argument.." lorsque l'entrée est $null
  • Passe lorsque l'entrée est une chaîne vide
  • Sort avec un type de message incorrect lorsque l'entrée n'est pas une chaîne

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X