Подтвердить что ты не робот

Как издеваться над атрибутами V3 PowerShell в V2

Будучи тем, кто любит документировать, я был рад узнать атрибут SupportsWildcards, среди прочих, добавленный в PowerShell V3. Я украсил параметры в своей библиотеке с соответствующим атрибутом. В конечном счете нет проблем, но в краткосрочной перспективе все еще есть много людей, использующих V2 по разным причинам (включая меня в одной среде).

Кажется глупым, что только из-за одного атрибута некоторые из моих функций больше не могут запускаться в PowerShell V2. Поэтому я ищу способ издеваться над атрибутом в V2, чтобы превратить его в "no-op".

Решение, как я вижу, нуждается в двух частях:

  • создать по существу пустой пользовательский атрибут.
  • сделать это в V2, но игнорировать в V3 (и, следовательно, позволить истинному атрибуту V3 работать правильно).

Я ищу руководство для обеих частей, не играя с пользовательскими атрибутами раньше.

4b9b3361

Ответ 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. Добавьте атрибут к параметру. Затем получите список атрибутов. См. здесь для получения дополнительных примеров атрибутов