在Powershell中为变量设置默认值

Joh*_*Loo 9 powershell

在bash中我可以做这样的事情,name如果UserName没有设置,设置为默认值:

name=${UserName:-James}
Run Code Online (Sandbox Code Playgroud)

Powershell是否支持这样的事情?

Aus*_*nch 2

使用函数和参数,我们可以做一些像我相信你正在做的事情。

一个函数示例:

function WriteUser
{
    param($user = "A User",
    $message = "Message")
    Write-Host $user
    Write-Host $message
}
Run Code Online (Sandbox Code Playgroud)

调用不带参数的函数

WriteUser
Run Code Online (Sandbox Code Playgroud)

会给你输出:

一个用户

信息

WriteUser -用户“我”-消息“错误”

会写出以下内容:

错误

一些额外的注意事项,您不必使用参数名称。

WriteUser "Bob" "All Systems Go" would work by the order of the parameters.
Run Code Online (Sandbox Code Playgroud)

您也可以切换命名参数的顺序:

WriteUser -message "Error" -user "user, user"
Run Code Online (Sandbox Code Playgroud)

该函数会将 传递给正确的参数。

否则,我相信你必须做一些事情来近似三元行为,例如:

function Like-Tern
{
    for ($i = 1; $i -lt $args.Count; $i++)
    {
        if ($args[$i] -eq ":")
        {
            $coord = $i
            break
        }
    }
    
    if ($coord -eq 0) { throw new System.Exception "No operator!" }
    $toReturn
    if ($args[$coord - 1] -eq "")
    {
        $toReturn = $args[$coord + 1]
    }
    else 
    {
        $toReturn = $args[$coord -1]
    }
    
    return $toReturn
}
Run Code Online (Sandbox Code Playgroud)

感谢这里的想法 函数文件还可以包括:

Set-Alias ~ Like-Tern -Option AllScope
Run Code Online (Sandbox Code Playgroud)

然后你会像这样使用它:

$var = ~ $Value : "Johnny"
Run Code Online (Sandbox Code Playgroud)

当然,~这完全是任意的,因为我无法${上班......

  • 进一步的证据表明 PowerShell 的设计者不知道他们在做什么。 (4认同)