如何在PowerShell V2中模拟PowerShell V3属性

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

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

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

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

我正在寻求关于两个部分的指导,因为我以前没有使用过自定义属性。


1
嗯...不确定为什么这个问题会引起如此的焦虑,但我真的很想找到答案。欢迎提出建议,如何重新表述以使其更合适! - Michael Sorens
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中这样做。 将属性添加到参数中。然后获取属性列表。更多属性示例请参见此处


我也找到了一些时间以前的东西:[链接](http://huddledmasses.org/more-custom-attributes-for-powershell-parameters/) - Coding101

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接