Как создать и использовать пользовательский атрибут функции в PowerShell?

Я хочу иметь возможность создавать и назначать пользовательский атрибут для моих функций PowerShell. Я посмотрел везде, и это кажется возможным, но я не видел пример. Я создал собственный атрибут в C# и ссылаюсь на сборку в моем скрипте powershell. Тем не менее, я получаю сообщение об ошибке Unexpected attribute 'MyDll.MyCustom'.

Вот что у меня есть:

MyCustomAttribute в 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:

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 ответ

Решение

Казалось бы, две вещи нужно изменить:

  1. Атрибуты команды должны синтаксически предшествовать param() блок.
  2. С использованием Name = спецификатор, кажется, заставляет анализатор PowerShell обрабатывать аргумент атрибута как инициализатор, после чего конструктор не будет разрешен.

function foo {
    [MyDll.MyCustom("This is a good function")]
    param()
    # Do stuff 
}
Другие вопросы по тегам