如何在PowerShell中创建和使用自定义函数属性?

时间:2017-01-07 19:28:16

标签: function powershell custom-attributes

我希望能够为我的powershell函数创建和分配自定义属性。我到处看,似乎有可能,但我还没有看到一个例子。我在C#中创建了一个自定义属性,并在我的powershell脚本中引用了程序集。但是,我收到一条错误,指出Unexpected attribute 'MyDll.MyCustom'.

这就是我所拥有的:

MyDll.dll中的MyCustomAttribute:

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脚本:

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

    # Do stuff 
}

但值得注意的是,如果我这样做:

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

工作正常。所以类型显然正确加载。我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

您似乎需要改变两件事:

  1. 命令属性需要在语法上位于param()块之前。
  2. 使用Name =说明符似乎会导致PowerShell解析器将属性参数视为初始值设定项,此时构造函数不会得到解析。
  3. function foo {
        [MyDll.MyCustom("This is a good function")]
        param()
        # Do stuff 
    }