2013-03-01 13 views
25

Będąc osobą, która lubi dokumentować dokładnie, z przyjemnością odkryłem atrybut SupportsWildcards, dodany m.in. w PowerShell V3. W odpowiednich bibliotekach nadałem parametry odpowiednio do tego atrybutu. Na dłuższą metę nie ma problemu, ale w krótkim okresie nadal jest wiele osób korzystających z V2 z różnych powodów (w tym ja w jednym środowisku).Jak kpić z atrybutów PowerShell V3 w V2

Wydaje się głupie, że tylko z powodu jednego atrybutu niektóre z moich funkcji nie mogą już działać w PowerShell V2. Tak więc szukam sposobu na wyśmiewanie się z atrybutu w V2, aby w istocie zmienić go w "no-op".

Rozwiązaniem, jak ja to widzę, potrzebuje dwóch części:

  1. tworzą zasadniczo pusty atrybut niestandardowy.
  2. Spraw, aby efekt ten działał w V2, ale zostanie zignorowany w V3 (a tym samym pozwoli, aby prawdziwy atrybut V3 działał poprawnie).

Szukam wskazówek na obie części, nie grając wcześniej z atrybutami niestandardowymi.

+1

Hmm ... nie jestem pewna, dlaczego był taki niepokój w związku z tym pytaniem, ale naprawdę chciałbym znaleźć odpowiedź. Z zadowoleniem przyjmuję sugestie, w jaki sposób zmienić je w bardziej odpowiednie! –

Odpowiedz

2

Być może możesz spróbować.

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 

Następnie wyjście:

SupportSomething : True 
    TypeId   : CustomAttribute 

najpierw zdefiniować atrybut w C#, który można również zrobić w PowerShell. Dodaj atrybut do parametru. Następnie zdobądź listę atrybutów. Zobacz here, aby uzyskać więcej przykładów atrybutów.

+0

Też znalazłem to od pewnego czasu: [link] (http://huddledmasses.org/more-custom-attributes-for-powershell-parameters/) – Coding101

+0

@msorens, czy to była odpowiedź na twoje pytanie? Proszę oznaczyć jako odpowiedź, jeśli tak ... – Joost