如何在V2中模拟PowerShell V3属性

Mic*_*ens 25 powershell compatibility attributes

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

仅仅因为一个属性,我的某些功能无法再在PowerShell V2中运行,这似乎很愚蠢.所以我正在寻找一种方法来模拟V2中的属性,实质上将其变成"无操作".

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

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

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

Cod*_*101 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
Run Code Online (Sandbox Code Playgroud)

然后输出:

    SupportSomething : True
    TypeId           : CustomAttribute
Run Code Online (Sandbox Code Playgroud)

我们首先在 C# 中定义属性,您也可以在 PowerShell 中执行此操作。将属性添加到参数中。然后获取属性列表。请参阅此处了解更多属性示例