ValidateScript ParameterAttribute в C # Двоичный модуль PowerShell

1

Недавно я начал экспериментировать с Binary PowerShell Programming в С#, и у меня возникают некоторые проблемы с 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,

Но я не могу понять, как воспроизвести это на С#. атрибут ValidateScript принимает объект ScriptBlock http://msdn.microsoft.com/en-us/library/system.management.automation.scriptblock(v=vs.85).aspx im просто не уверен, как создать его на С#, и я не могу найти ни одного примера.

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

С# для меня очень новичок, поэтому я придумываю, если это глупый вопрос. здесь ссылка: класс атрибута ValidateScript: http://msdn.microsoft.com/en-us/library/system.management.automation.validatescriptattribute(v=vs.85).aspx

Теги:
powershell
binary
powershell-module

1 ответ

3
Лучший ответ

Это не возможно в С#, так как.NET только позволяет компилировать временные константы, typeof выражений и выражений создания массива для параметров атрибутов и только константы для ссылочных типов другие, то string является null. Вместо этого вы должны получить значение ValidateArgumentsAttribute и переопределить Validate для выполнения проверки:

class ValidateCustomAttribute:ValidateArgumentsAttribute {
    protected override void Validate(object arguments,EngineIntrinsics engineIntrinsics) {
        //Custom validation code
    }
}
  • 0
    Спасибо за информацию, это может быть немного из моей концепции C #. Итак, после создания этого класса я могу просто вызвать его в ValidateScript ()? [ValidateScript ({ValidateCustomAttribute.Validate (arg0, arg1)})]
  • 0
    @ dotps1 Вы применяете свой пользовательский атрибут вместо ValidateScriptAttribute .
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню