PowerShell是否提供了创建函数注释的方法?

时间:2016-12-30 15:32:47

标签: powershell

已编辑以减少对预期目标的混淆

是否可以创建任何可以将常用模式应用于函数的注释?

示例可以是标准错误处理例程。不必使用错误处理函数实现相同的try / catch结构,最好有一个属性或注释,我可以用它来装饰函数,从而实现公共模式,而不需要在每个函数中使用相同的显式代码

也许这是试图让PowerShell做一些不应该做的事情,但我想避免一些我在脚本中最常见的重复。

1 个答案:

答案 0 :(得分:5)

您只需从ValidateArgumentsAttribute类继承并在Validate方法中提供自定义验证逻辑:
C#:

Add-Type @‘
    using System;
    using System.Management.Automation;
    public class ValidateIsEvenAttribute : ValidateArgumentsAttribute {
        protected override void Validate(object arguments, EngineIntrinsics engineIntrinsics) {
            if(LanguagePrimitives.ConvertTo<int>(arguments)%2==1) {
                throw new Exception("Not even");
            }
        }
    }
’@

PowerShell v5:

class ValidateIsOddAttribute : Management.Automation.ValidateArgumentsAttribute {
    [void] Validate([object] $arguments, [Management.Automation.EngineIntrinsics] $engineIntrinsics) {
        if($arguments%2-eq0) {
            throw 'Not odd'
        }
    }
}

然后您可以将该属性应用于函数参数:

function f { param([ValidateIsEven()]$i, [ValidateIsOdd()] $j) $i, $j }

f 2 1 #OK
f 2 2 #Error
f 1 1 #Error