如何输出参考值?

时间:2019-05-06 18:19:45

标签: powershell

我具有以下功能。

function Params {
    param (
        [Parameter(Mandatory = $true)]
        [Alias('Param1')]
        [AllowNull()]
        ${Param1[default value]}
    )
    [ref] $Param1 = 
        if (${Param1[default value]}) {
            ${Param1[default value]}
        } else {
            'default'
        }
}

Params

$input1 = $null

"the param input is $([ref]$input1)"

如果我在提示符下输入了一些参数或将其保留为默认值,则将其作为$([ref]$input)的输出

  

参数输入为System.Management.Automation.PSReference`1 [System.Management.Automation.LanguagePrimitives + Null]

为什么我没有获得价值?

例如,我想要此输出:

  

参数输入为默认

2 个答案:

答案 0 :(得分:1)

我最终采用了另一种方法来实现自己想要的目标:

在脚本顶部定义此:

[CmdletBinding()]
Param(
    $Param1 = (Read-Host -prompt "Param1")
)
if (!$Param1) { "default" }

"the param input is $Param1"

答案 1 :(得分:1)

[ref]类型加速器(通常意义上不是类型加速器,但是它确实创建了PSReference对象,所以它确实是)使您如愿以偿。告诉您一个PSReference对象。

为了从中检索值,您需要专门要求它。在您的代码中,您可以通过从创建的参考对象中提取Value属性来访问它。

"the param input is $(([ref]$input1).Value)"

但是,鉴于未分配$input1,您可能必须重构一下才能得到想要的东西。