gpt4 book ai didi

validation - 使用 ScriptBlock 作为 Mandatory 的确定

转载 作者:行者123 更新时间:2023-12-01 08:03:58 25 4
gpt4 key购买 nike

我希望我可以设置一个 cmdlet,以便它可以使用环境变量作为参数值(如果存在),或者以其他方式提示。

function Test-Mandatory
{
[CmdletBinding()]
param(
[Parameter(Mandatory = { [string]::IsNullOrEmpty($Env:TEST_PARAM) })]
[string]
$foo = $Env:TEST_PARAM
)

Write-Host $foo
}

不幸的是,似乎不管我有没有 $Env:TEST_PARAM设置,cmdlet 总是提示输入 $foo。

我可以重新进行验证以使用 [ValidateScript({ #snip #}) ,但是我不会再让 Powershell 提示输入所需的值,应该 $Env:TEST_PARAM不存在。我只会得到一个验证错误。

所以这里有2个问题
  • 如果它似乎没有得到尊重,为什么我什至可以将脚本块分配给 Mandatory?
  • 根据我指定的条件,是否有一种简单的方法可以获得默认的 PS 提示行为?
  • 最佳答案

    仅供引用,这是微软不得不说的:

    "It’s not really a bug. Script blocks are valid attribute arguments – e.g. ValidateScriptBlock wouldn’t work very well otherwise.
    Attribute arguments are always converted to the parameter type. In the case of Mandatory – it takes a bool, and any time you convert a ScriptBlock to bool, you’ll get the value $true. You never invoke a script block to do a conversion."

    关于validation - 使用 ScriptBlock 作为 Mandatory 的确定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12623749/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com