Cómo simular los atributos de PowerShell V3 en V2
attributes compatibility (1)
Al ser uno de los que le gusta documentar a fondo, me complació descubrir el atributo SupportsWildcards
, entre otros, agregado en PowerShell V3. He decorado los parámetros en mi biblioteca con ese atributo según corresponda. A la larga, no hay problema, pero a corto plazo todavía hay mucha gente que usa V2 por varias razones (incluyéndome a mí en un entorno).
Parece tonto que solo por un atributo, algunas de mis funciones ya no puedan ejecutarse en PowerShell V2. Así que estoy buscando una manera de burlarme del atributo en V2 para convertirlo esencialmente en un "no-op".
La solución, como yo la veo, necesita dos partes:
- crear un atributo personalizado esencialmente vacío.
- haga que esto tenga efecto en V2 pero se ignore en V3 (y, por lo tanto, permita que el verdadero atributo V3 funcione correctamente).
Estoy buscando orientación en ambas partes, ya que no he jugado con atributos personalizados antes.
Quizás puedas probar esto.
Add-Type @"
public class CustomAttribute : System.Attribute
{
public bool SupportSomething { get; set; }
}
"@
function Do-Something {
param(
[CustomAttribute(SupportSomething=$true)]
$Command
)
}
$parameters = Get-Command -Name Do-Something | Select-Object -ExpandProperty Parameters
$parameters["Command"].Attributes
Entonces la salida:
SupportSomething : True
TypeId : CustomAttribute
Primero definimos el atributo en C #, lo que también puede hacer en PowerShell. Agregue el atributo al parámetro. A continuación, obtener la lista de atributos. Vea here para más ejemplos de atributos