Как издеваться над атрибутами V3 PowerShell в V2
Будучи тем, кто любит документировать, я был рад узнать атрибут SupportsWildcards
, среди прочих, добавленный в PowerShell V3. Я украсил параметры в своей библиотеке с соответствующим атрибутом. В конечном счете нет проблем, но в краткосрочной перспективе все еще есть много людей, использующих V2 по разным причинам (включая меня в одной среде).
Кажется глупым, что только из-за одного атрибута некоторые из моих функций больше не могут запускаться в PowerShell V2. Поэтому я ищу способ издеваться над атрибутом в V2, чтобы превратить его в "no-op".
Решение, как я вижу, нуждается в двух частях:
- создать по существу пустой пользовательский атрибут.
- сделать это в V2, но игнорировать в V3 (и, следовательно, позволить истинному атрибуту V3 работать правильно).
Я ищу руководство для обеих частей, не играя с пользовательскими атрибутами раньше.
Ответы
Ответ 1
Возможно, вы можете попробовать это.
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
Затем вывод:
SupportSomething : True
TypeId : CustomAttribute
Сначала определим атрибут в С#, который вы также можете сделать в PowerShell.
Добавьте атрибут к параметру. Затем получите список атрибутов. См. здесь для получения дополнительных примеров атрибутов