我具有以下功能。
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]
为什么我没有获得价值?
例如,我想要此输出:
参数输入为默认
答案 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
,您可能必须重构一下才能得到想要的东西。