我希望我可以设置一个 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 #}) ,但是如果 $Env:TEST_PARAM 不存在,我将不会再收到 Powershell 提示输入所需值的信息。我只会得到一个验证错误。

所以这里有2个问题
  • 为什么我什至可以为 Mandatory 分配一个脚本块,如果它看起来不受欢迎呢?
  • 根据我指定的条件,是否有一种简单的方法可以获得默认的 PS 提示行为?
  • 最佳答案

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

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

    10-12 19:32