Powershell:如何使用Splatting在函数调用中添加null参数

时间:2015-04-17 03:25:23

标签: powershell powershell-v3.0 powershell-v4.0

我使用Splatting实现了一个函数调用。

$funtioncall= @{                                   
      Param1=$Param1;
      Param2=$Param2;
      Param3=$Param3;
      Param4=$Param4;
      Param5=$Param5;
}
function @functioncall

在某种情况下,我希望只在它们不为空时才向函数调用添加两个可选参数。

所以我有$ OptionalParam1和$ OptionalParam2

我目前有以下代码启用splatting,因为它不允许空值包含在哈希表中!

if(($OptionalParam1)-and($OptionalParam2))
{
   $funtioncall= @{                                   
          Param1=$Param1;
          Param2=$Param2;
          Param3=$Param3;
          Param4=$Param4;
          Param5=$Param5;
          OptionalParam1=$OptionalParam1;
          OptionalParam2=$OptionalParam2;
                   }
}
else
{
   $funtioncall= @{                                   
          Param1=$Param1;
          Param2=$Param2;
          Param3=$Param3;
          Param4=$Param4;
          Param5=$Param5;
                  }
}
function @functioncall

使用Splatting是否有更简单的方法可以做到这一点?

这没有splatting会更容易实现,函数调用将如下所示(因为我可以在函数中定义参数以允许null)

function -Param1 $Param1 -Param2 $Param2 -Param3 $Param3 -Param4 $Param4 -Param5 $Param5 -OptionalParam1 $OptionalParam1 -OptionalParam2 $OptionalParam2

1 个答案:

答案 0 :(得分:2)

你不应该改变任何东西。 $null仍然是一个值,因此没有理由以不同方式处理变量$funtioncall的构建

$param1 = "Awesome"
$OptionalParam1 = $null

$funtioncall= @{                                   
      Param1=$Param1;
      OptionalParam1=$OptionalParam1;
}

现在哈希表包含OptionalParam1

的空值
Name                           Value                                                                                                                
----                           -----                                                                                                                
OptionalParam1                                                                                                                                      
Param1                         Awesome

因此,只要您的函数可以处理param为null的可能性,就没有问题。我做了一个显示这些值的小函数。

This @funtioncall

Param1 is 'Awesome'
OptionalParam1 is ''