Fondamentaux

Passer une variable $Null à un paramètre du type Boolean

Aujourd’hui, j’ai eu une découverte intéressante sur l’un de mes projets PowerShell DSC, concernant l’utilisation des paramètres de type Boolean.

Le problème que j’ai rencontré était centré sur faite d’avoir un paramètre facultatif de type boolean. Je veux donc m’assurer que les seules options valides sont $true ou $false. Tout fonctionnait parfaitement jusqu’à ce que je réalise qu’il y avait en réalité une autre option possible…

Avant de pouvoir comprendre le problème, nous devons étudier le comportement du script suivant :

Function Test-ParamBoolean
{
  param(
    [System.boolean]
    $TestCase
  )
  Write-Output "The test case is $TestCase"
}

Quand j’exécute cette fonction sur mon environnement de test, je constate rapidement que si je passe le paramètre TestCase avec $true ou $false, cette fonction retournera exactement ce que j’attendais, mais si je ne passe pas de paramètre la fonction retournera $false.

N’oubliez pas qu’un type booléen est un switch et peut être activé ou désactivé.

Comment pouvons-nous permettre la valeur $null en plus des valeur $True et $False pour le paramètre TestCase.

J’ai donc trouvé qu’il y avait l’option [AllowNull()] qui pouvait être ajoutée à mon paramètre. Ceci n’a pas fonctionné et m’a donné les mêmes résultats.

Après quelques recherches, j’ai trouvé un article intéressant sur une classe .NET Nullable (T) Struct. grâce à cet article j’ai rapidement compris je pouvais placer a l’intérieur de [System.Nullable] le type [System.Boolean], ce qui me permet enfin de pouvoir gérer $true, $false et $null.

Function Test-ParamBoolean
{
  param(
    [System.Nullable[System.boolean]]
    $TestCase
  )
  if( -not [string]::IsNullOrEmpty($TestCase) )
  {
    Write-Output "The test case is $TestCase"
  }
  else
  {
    Write-Output "Hey buddy, I don't read minds!"
  }
}

Je me suis rapidement rendu compte que j’avais besoin de modifier le comportement de base de mon paramètre, en effet celui-ci renvoie $null alors que mon script powershell a besoin que cette variable soit a $false par défaut !

Voici donc ci-dessous la modification que j’ai effectuée pour résoudre ce problème :

Function Test-ParamBoolean
{
  param(
    [System.Nullable[System.boolean]]
    $TestCase = $false
  )
  if( -not [string]::IsNullOrEmpty($TestCase) )
  {
    Write-Output "The test case is $TestCase"
  }
  else
  {
    Write-Output "Hey buddy, I don't read minds!"
  }
}
Tags

Thomas ILLIET

Si le développement PowerShell était un art, vous pourriez certainement me considérer comme un artisan au sens noble du terme. Apportant un savoir-faire unique, un amour du travail bien fait et une personnalisation rendant chaque pièce produite parfaitement ciselée au besoin de son commanditaire.

Articles similaires

Fermer
Fermer