PowerShell: GetNewClosure () e Cmdlets com validação

Eu estou tentando entender como. GetNewClosure () funciona dentro do contexto de um cmdlet de script no PowerShell 2.

Em essência, eu tenho uma função que retorna um objeto da seguinte forma:

function Get-AnObject {
param(
    [CmdletBinding()]
    [Parameter(....)]
    [String[]]$Id
    ..
    [ValidateSet('Option1','Option2')]
    [String[]]$Options
)

...

    $T = New-Object PSCustomObject -Property @{ ..... } 
    $T | Add-Member -MemberType ScriptProperty -Name ExpensiveScriptProperty -Value {
        $this | Get-ExpensiveStuff
    }.GetNewClosure() 

..
}

Desde que eu não tenha as opções de validação, o fechamento parece funcionar bem. Se estiver incluído, no entanto, o novo fechamento falhará com o seguinte erro.

Exceção chamando "GetNewClosure" com argumento (s) "0": "Atributo não pode ser adicionado porque faria com que a variável Opções com valor se tornasse inválida."

Presumivelmente, o encerramento está tentando capturar o contexto da chamada para o Cmdlet. Uma vez que o parâmetro "Opções" não está vinculado a tudo isso não é bem com a validação do parâmetro.

Eu imagino que é possível evitar isso colocando a validação como código dentro do corpo do Cmdlet em vez de fazer uso dos decoradores [Validate * ()] - mas isso parece desagradável e bastante obscuro. Existe uma maneira de fundir essas duas ideias?

questionAnswers(2)

yourAnswerToTheQuestion