25

作为一个喜欢彻底记录文档的人,我很高兴发现SupportsWildcardsPowerShell V3 中添加的属性等。我在我的库中使用该属性适当地修饰了参数。从长远来看没有问题,但在短期内仍然有很多人出于各种原因使用 V2(包括我在一个环境中)。

仅仅因为一个属性,我的一些函数就不能在 PowerShell V2 中运行,这似乎很愚蠢。因此,我正在寻找一种方法来模拟 V2 中的属性,以将其本质上变成“无操作”。

在我看来,解决方案需要两个部分:

  1. 创建一个本质上为空的自定义属性。
  2. 使其在 V2 中生效,但在 V3 中被忽略(因此允许真正的 V3 属性正常工作)。

我正在寻找这两个部分的指导,以前没有玩过自定义属性。

4

1 回答 1

2

也许你可以试试这个。

    Add-Type @"    
        public class CustomAttribute : System.Attribute
        {
           public bool SupportSomething { get; set; } 
        }
    "@

    function Do-Something {
        param(
            [CustomAttribute(SupportSomething=$true)]
            $Command
        )
    }

    $parameters = Get-Command -Name Do-Something | Select-Object -ExpandProperty Parameters
    $parameters["Command"].Attributes

然后输出:

    SupportSomething : True
    TypeId           : CustomAttribute

我们首先在 C# 中定义属性,您也可以在 PowerShell 中这样做。将属性添加到参数。然后获取属性列表。有关更多属性示例,请参见此处

于 2013-03-22T14:22:47.700 回答