Как создать и использовать пользовательский атрибут функции в 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 ответ
Решение
Казалось бы, две вещи нужно изменить:
- Атрибуты команды должны синтаксически предшествовать
param()
блок. - С использованием
Name =
спецификатор, кажется, заставляет анализатор PowerShell обрабатывать аргумент атрибута как инициализатор, после чего конструктор не будет разрешен.
function foo {
[MyDll.MyCustom("This is a good function")]
param()
# Do stuff
}