2017-01-07 2 views
4

Je souhaite pouvoir créer et affecter un attribut personnalisé à mes fonctions PowerShell. J'ai regardé partout et cela semble possible mais je n'ai pas vu d'exemple. J'ai créé un attribut personnalisé en C# et je fais référence à l'assemblage dans mon script powershell. Cependant, je reçois une erreur indiquant Unexpected attribute 'MyDll.MyCustom'.Comment créer et utiliser un attribut de fonction personnalisé dans PowerShell?

Voici ce que j'ai:

MyCustomAttribute dans MyDll.dll:

namespace MyDll 
{ 
    [AttributeUsage(AttributeTargets.All, Inherited = true, AllowMultiple = false)] 
    public sealed class MyCustomAttribute : Attribute 
    { 
     public MyCustomAttribute(String Name) 
     { 
      this.Name= Name; 
     } 

     public string Name { get; private set; } 
    } 
} 

PowerShell Script:

Add-Type -Path "./MyDll.dll"; 
function foo { 
    [MyDll.MyCustom(Name = "This is a good function")] 

    # Do stuff 
} 

de note, cependant, est que si je fais cela:

$x = New-Object -TypeName "MyDll.MyCustomAttribute" -ArgumentList "Hello" 

Cela fonctionne très bien. Donc, le type est clairement chargé correctement. Qu'est-ce que j'oublie ici?

Répondre

2

deux choses que vous apparemment besoin de changer:

  1. attributs de commande doivent précéder syntaxiquement le bloc param(). L'utilisation du spécificateur Name = semble entraîner l'analyseur PowerShell à traiter l'argument d'attribut comme un initialiseur, auquel cas le constructeur ne sera pas résolu.

function foo { 
    [MyDll.MyCustom("This is a good function")] 
    param() 
    # Do stuff 
}