ValidateScript ParameterAttribute在C#中二进制的PowerShel

2019-10-21 14:36发布

我最近开始与C#二进制PowerShell的编程尝试,并且我遇到一些麻烦ParameterValidationAttributes的ValidateScript属性居多。 基本上,我想创建一个名为帕拉姆“计算机名”,并验证计算机是当时在线。 这是很容易在PowerShell中:

    [Parameter(ValueFromPipeLine = $true)]
    [ValidateScript({ if (Test-Connection -ComputerName $_ -Quiet -Count 1) { $true } else { throw "Unable to connect to $_." }})]
    [String]
    $ComputerName = $env:COMPUTERNAME,

但我无法弄清楚如何复制,在C#。 在ValidateScript属性需要一个脚本块对象http://msdn.microsoft.com/en-us/library/system.management.automation.scriptblock(v=vs.85).aspx我只是不知道如何创建一个在C#中,我真的不能找到任何的例子。

[Parameter(ValueFromPipeline = true)]
[ValidateScript(//Code Here//)]
public string ComputerName { get; set; }

C#是很新的给我,所以我appologize如果这是一个愚蠢的问题。 这里是一个链接的ValidateScript属性类: http://msdn.microsoft.com/en-us/library/system.management.automation.validatescriptattribute(v=vs.85).aspx

Answer 1:

这不是在C#可能的,因为.NET只允许编译时间常数, typeof表达式和用于属性参数阵列创建表达式并且仅恒定可供参考类型其他然后stringnull 。 相反,你应该从派生ValidateArgumentsAttribute并重写Validate进行验证:

class ValidateCustomAttribute:ValidateArgumentsAttribute {
    protected override void Validate(object arguments,EngineIntrinsics engineIntrinsics) {
        //Custom validation code
    }
}


文章来源: ValidateScript ParameterAttribute in C# Binary PowerShell Module