我最近开始尝试使用C#进行Binary PowerShell编程,而ParameterValidationAttributes(主要是ValidateScript Attribute)遇到了一些麻烦。基本上,我想创建一个名为“ComputerName”的参数并确认计算机当时处于联机状态。在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属性采用ScriptBlock对象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#对我来说很新,所以我很抱歉这是一个愚蠢的问题。这是ValidateScript属性类的链接:http://msdn.microsoft.com/en-us/library/system.management.automation.validatescriptattribute(v=vs.85).aspx
最佳答案
在C#中是不可能的,因为.NET仅允许为属性参数使用编译时常量,typeof
表达式和数组创建表达式,并且除了string
之外,仅常量可用于引用类型为null
。相反,您应该从ValidateArgumentsAttribute
派生并覆盖Validate
以执行验证:
class ValidateCustomAttribute:ValidateArgumentsAttribute {
protected override void Validate(object arguments,EngineIntrinsics engineIntrinsics) {
//Custom validation code
}
}
关于c# - C#二进制PowerShell模块中的ValidateScript ParameterAttribute,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27908470/