如何在V2中模拟PowerShell V3属性

时间:2013-03-01 16:15:09

标签: powershell attributes compatibility

作为一个喜欢彻底记录的人,我很高兴发现PowerShell V3中添加的SupportsWildcards属性等。我已根据需要在我的库中使用该属性修饰参数。从长远来看,没有问题,但在短期内仍有很多人因各种原因使用V2(包括我在一个环境中)。

仅仅因为一个属性,我的某些功能无法再在PowerShell V2中运行,这似乎很愚蠢。所以我正在寻找一种方法来模拟V2中的属性,从根本上把它变成“无操作”。

我认为解决方案需要两个部分:

  1. 创建一个基本为空的自定义属性。
  2. 使其在V2中生效但在V3中被忽略(因此允许真正的V3属性正常工作)。
  3. 我正在寻找两个部分的指导,之前没有玩过自定义属性。

1 个答案:

答案 0 :(得分: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中执行此操作。 将该属性添加到参数中。然后获取属性列表。有关更多属性示例,请参阅here