如何在powershell函数中给出空字符串时使用默认值?
我想在给定一个空字符串时使用默认值。我希望更优雅的东西,然后有if语句来检查$Var
是否为空,并将其设置为默认值。任何人都知道这是否可以实现?还需要支持PowerShell版本2.0。如何在powershell函数中给出空字符串时使用默认值?
下面是我试图完成的一个片段。给定一个空字符串,我希望它打印“VAR:DEFAULT”。
$ErrorActionPreference = "Stop"
function Test-Function(
[parameter(Mandatory = $true)][string] $Var = "DEFAULT"
) {
# If Mandatory is set to $true an error is thrown
# "Cannot bind argument to parameter 'password' because it is an empty string."
# When Mandatory is set to $false, $Var is an empty string rather than "DEFAULT"
Write-Host "Var: $Var"
}
$EmptyString = ""
Test-Function -Var $EmptyString
有没有优雅的方式来做到这一点。至少没有内置的方式来做到这一点。你可以只验证该字符串不为空或空:
function Test {
Param (
[ValidateNotNullOrEmpty()]
[String]
$String = 'DEFAULT'
)
Write-Host -Object "String: $String"
}
自己的函数中使用此:
If (!($var)) {$var = "DEFAULT"} #basically, if $var doesn't exist, create it
PS。我刚刚用Mandatory = $ false对其进行了测试,它按预期工作,不知道为什么它不适用于您,当mandatory = $ false时它会执行什么操作?
当'强制性= $ FALSE'输出只是'VAR:'当我想到'VAR:DEFAULT' –
对我来说,它就像我说的那样完美。但无论如何,我的答案符合你的目的,试试吧 – 4c74356b41
var为空字符串,因为你明确地传递一个空字符串。空字符串仍然是对象,不为空。您对Test-Function -Var $ EmptyString的调用无法为您提供您正在查找的输出,因为您将等于空字符串,并将null指定为.Net中的false。您的声明“当强制性设置为$ false时,$ Var是一个空字符串而不是'DEFAULT'”是正确的,因为您传递了一个空字符串,因此从不调用值“DEFAULT”的赋值。
您可以删除Mandatory = $ true,在这种情况下显示“默认”值当参数未通过时。
function Test-Function(
[parameter(Mandatory = $false)]
[string] $Var = "DEFAULT"
){
Write-Host "Var: $Var"
}
Test-Function
这会按预期生成Var: DEFAULT
。
无论参数是否为强制参数,如果传递一个空字符串,$ Var =“Default”的赋值永远不会到达,因为$ Var的值为'',而empty实际上是一个字符串。
Test-Function ''
这会产生无功:这可能看起来像错误的,但它输出的空字符串,你告诉它。
如果你想允许当参数不通过使用强制性= $假,正如我上面没有指定一个默认值将被分配一个默认值。如果你想测试传递的值,并且如果它是一个空字符串,则分配一个默认值,你应该在函数的begin块中做这个。
function Test-Function(
[parameter(Mandatory = $false)]
[string] $Var = "DEFAULT"
){
begin{if([String]::IsNullOrWhiteSpace($Var)){$Var="DEFAULT"}}
process{Write-Host "Var: $Var"}
end{}
}
Test-Function
Test-Function ''
Test-Function 'SomeValue'
这生成我认为是你所期待的下列情况:
Var: DEFAULT
Var: DEFAULT
Var: SomeValue
谢谢你的回应。所以我想如果我总是想尝试传入一个'$ Var',那么我想要做的事是不可能的,而不使用'if'语句。 –
这不使用默认值。抛出异常,指示参数为null或空。而不是抛出这个异常,我想要使用默认值。 –
“没有优雅的方式来做到这一点,至少没有内建的方法可以这样做,你可以验证字符串不是空或空的”...与'[ValidateNotNullOrEmpty()]' –