如果在调用函数时未指定,则在Powershell中是否有一种方法可以使布尔参数自动为true?

时间:2019-06-24 17:29:56

标签: powershell powershell-3.0 azure-powershell

如果该函数名为myFunc -IsLightOn $true,则不应返回任何内容。 myFunc - IsLightOn $False应该返回“ Light off”。但是,如果未为IsLightOn参数指定true或false,则应将变量默认设置为true,从而不返回任何内容

function myFunc{
   Param(
    [bool]$IsLightOn
   ) if ($LightIsOn -EQ $false){
      Write-Host "Light off"
   }
}

在指定了值之后,一切正常,但我不知道如何将IsLightOn默认设置为true。

3 个答案:

答案 0 :(得分:2)

正如其他人所述,Switch参数类型可能就是您想要的。但是,通常,该开关用于指定非默认行为(因此,如果未提供switch参数,则默认值为$ false)。因此,您可以执行类似于TheIncorrigible1所说的内容:

function Set-LightStatus {
    param(
        [switch] $Off
     )

    if ($Off) {
        'Light off'
    }  
}

但是,如果您确实想要问题中所要的内容,则可以继续使用布尔参数值。您可以在Param()块中设置默认值,如下所示:

function myFunc {
  param(
    [bool]$IsLightOn = $true
)
  if ($IsLightOn -EQ $false){ Write-Host "Light off" }  
}

答案 1 :(得分:1)

您要寻找的是[switch]类型:

function Set-LightStatus {
    param(
        [switch] $On
    )

    if (-not $On.IsPresent) {
        'Light off'
    }
}

答案 2 :(得分:0)

在参数中使用默认值,例如:

function myFunc{
    Param(
        [bool]$IsLightOn=$true # Default value
    ) 

    if (!$IsLightOn) { # CHECKING THE VALUE
        Write-Host "Light off" # PRINTING ON THE HOST
    } # END OF IF

} # END OF FUNCTION

myFunc # WITHOUT PASSING VALUE
myFunc -IsLightOn:$true # PASSING TRUE VALUE
myFunc -IsLightOn:$false # PASSING FALSE VALUE