powershell - 如何在 PSCustomObject 的 ScriptMethod 上使用默认值
问题描述
我试图指定方法的第三个参数的值,同时仍然让方法中的第二个参数默认。
我能够将其拼凑起来以使其正常工作,但我希望其他人有更好的解决方案
$o=[PSCustomObject]@{};
Add-Member -MemberType ScriptMethod -InputObject $o -Name 'WrapText' -Value {
param($S,$Open='"',$Close)
if($Close){
"$Open$S$Close"
}else{
"$Open$S$Open"
}
}
$DefaultValues = @{};
$o.WrapText.Script.Ast.ParamBlock.Parameters | %{
$DefaultValues.($_.Name.ToString()) = $_.DefaultValue.Value
}
$o.WrapText('Some Text',$DefaultValues.'$Open','|')
解决方案
为了检查参数是否绑定到参数,您需要使用$PSBoundParameters
:
Add-Member -MemberType ScriptMethod -InputObject $o -Name 'WrapText' -Value {
param($S,$Open='"',$Close='"')
if($PSBoundParameters.ContainsKey('Close')){
"$Open$S$Close"
}else{
"$Open$S$Open"
}
}
现在if
条件是仅$true
当提供第三个参数时:
PS ~> $o.WrapText('abc')
"abc"
PS ~> $o.WrapText('abc',"'")
'abc'
PS ~> $o.WrapText('abc',"'",'$')
'abc$
推荐阅读
- javascript - 页面转换后重新加载脚本(Highway JS)
- react-hooks - 如何使用 Apollo 和 NextJS 将数据转发到下一页
- c# - C#:如何将随机 int 值分配给变量?
- c# - 如何使这个作为父游戏对象的子对象实例化的游戏对象定位在偏移量?
- spring-integration - 弹簧集成行业使用
- kotlin - 字符串到 Int 抛出 NumberFormatException
- python - python键盘:转到文本的顶部?
- angular - Protractor - 如何在运行时运行特定套件并使用通用命令运行所有套件?
- django - django 中每个应用程序的单独媒体设置
- python-3.x - 从 pyqt5 的新窗口返回一个值