当前位置: 首页 > 知识库问答 >
问题:

在powershell函数中给定空字符串时,如何使用默认值?

伍耀
2023-03-14

我希望在给定空字符串时使用默认值。我希望有更优雅的东西,然后使用if语句检查<code>$Var

下面是我试图完成的一个片段。给定一个空字符串,我希望它打印“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

共有3个答案

郝君博
2023-03-14

在函数中使用它:

If (!($var)) {$var = "DEFAULT"} #basically, if $var doesn't exist, create it

附言。我刚刚用强制=$false测试了它,它按预期工作,不知道为什么它不适合你,当强制=$false时它会做什么?

谢誉
2023-03-14

没有优雅的方法来做到这一点。至少没有内置的方法来做到这一点。您可以只验证字符串是否为空或为空:

function Test {
    Param (
        [ValidateNotNullOrEmpty()]
        [String]
        $String = 'DEFAULT'
    )

    Write-Host -Object "String: $String"
}
白越
2023-03-14

var是一个空字符串,因为您正在显式传递一个空字符串。空字符串仍然是对象,而不是null。您对Test-Function-Var$空字符串的调用无法为您提供所需的输出,因为您将空字符串和null等同起来,而null在. net中为false。您的语句“当强制设置为$false时,$Var是一个空字符串,而不是'DEFAULT'”是正确的,因为您确实传递了一些东西,一个空字符串,因此从未调用值“DEFAULT”的赋值。

您可以删除 Mandatory=$true在这种情况下,当参数未传递时,将显示您的“默认”值。

function Test-Function(
  [parameter( Mandatory = $false )]
  [string] $Var = "DEFAULT"
  ){
  Write-Host "Var: $Var"
 }
Test-Function

这将按预期生成< code>Var: DEFAULT。

无论参数是否为强制参数,如果传递空字符串,则永远不会达到对$Var=“Default”的赋值,因为$Var的值为“”,而该值为空时实际上是一个字符串。

Test-Function ''

这会生成Var:,它看起来可能是错误的,但它会输出您告诉它的空字符串。

如果您想允许在未传递参数时分配默认值,请使用Mandative=$false并像我上面所做的那样分配默认值。如果您想测试传递的值并在它是空字符串时分配默认值,您应该在函数的开始块中执行此操作。

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
 类似资料:
  • 问题内容: 是否可以通过SQL语句确保列的默认值为空字符串而不是? 问题答案: 是-使用DEFAULT约束:

  • 问题内容: 是否可以通过SQL语句确保列的默认值为空字符串而不是? 问题答案: 是-使用DEFAULT约束:

  • 本文向大家介绍如何从PowerShell中删除空字符串/行?,包括了如何从PowerShell中删除空字符串/行?的使用技巧和注意事项,需要的朋友参考一下 在许多情况下,您需要从PowerShell字符串数组或文件中删除空行或字符串。在本文中,我们将删除结果或从不为空的行中过滤输出,而不是删除空字符串。这样,我们可以获得没有空行的输出。 考虑下面的示例,我们有一个名为EmptryString.tx

  • 在PowerShell中,是否有一个内置的类函数来检查字符串是空还是空? 到目前为止我还找不到它,如果有一个内置的方式,我不想为此写一个函数。

  • 我有一个打开的api yaml文件如下。我想分配空字符串值作为默认字符串类型属性。做这件事的方法是什么

  • Powershell 5说“no way Jose”,不能用空字符串或空字符串连接path。我说为什么不呢?有没有办法让join-path更“灵活”,而无需添加更多if-else块?