【问题标题】:How to mock PowerShell V3 attributes in V2如何在 V2 中模拟 PowerShell V3 属性
【发布时间】:2013-03-01 16:15:09
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 嗯...不知道为什么对这个问题如此焦虑,但我真的很想找到答案。我欢迎有关如何改写它以使其更合适的建议!

标签: powershell attributes compatibility


【解决方案1】:

也许你可以试试这个。

    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

【讨论】:

  • 我不久前也发现了这个:link
猜你喜欢
  • 1970-01-01
  • 2012-08-03
  • 2016-08-29
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多