如何在 PowerShell 中创建和使用自定义函数属性?
How do I create and use a custom function attribute in PowerShell?
我希望能够为我的 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"
它工作正常。所以类型显然被正确加载。我在这里错过了什么?
貌似有两点需要修改:
- 命令属性在句法上需要位于
param()
块之前。
- 使用
Name =
说明符似乎会导致 PowerShell 解析器将属性参数视为初始值设定项,此时构造函数不会得到解析。
function foo {
[MyDll.MyCustom("This is a good function")]
param()
# Do stuff
}
我希望能够为我的 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"
它工作正常。所以类型显然被正确加载。我在这里错过了什么?
貌似有两点需要修改:
- 命令属性在句法上需要位于
param()
块之前。 - 使用
Name =
说明符似乎会导致 PowerShell 解析器将属性参数视为初始值设定项,此时构造函数不会得到解析。
function foo {
[MyDll.MyCustom("This is a good function")]
param()
# Do stuff
}