PowerShell: GetNewClosure () y Cmdlets con validación

Estoy tratando de entender cómo funciona .GetNewClosure () en el contexto de un cmdlet de script en PowerShell 2.

En esencia tengo una función que devuelve un objeto así:

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() 

..
}

Si no tengo las opciones del conjunto de validación, el cierre parece funcionar bien. Si se incluye, sin embargo, el nuevo cierre falla con el siguiente error.

La excepción llama a "GetNewClosure" con "0" argumento (s): "El atributo no se puede agregar porque causaría que la variable Opciones con valor dejara de ser válida".

Presumiblemente, el cierre está intentando capturar el contexto de la llamada al Cmdlet. Dado que el parámetro "Opciones" no está vinculado en absoluto, esto no está bien con la validación del parámetro.

Imagino que es posible evitar esto colocando la validación como código dentro del cuerpo del Cmdlet en lugar de utilizar los decoradores [Validar * ()], pero esto parece desagradable y bastante oscuro. ¿Hay alguna manera de fusionar estas dos ideas?

Respuestas a la pregunta(2)

Su respuesta a la pregunta