Как программно добавить PSCmdlet в конвейер Powershell? - PullRequest
1 голос
/ 03 марта 2011

Я бы хотел программно собрать и запустить конвейер , содержащий мой собственный PSCmdlet . Однако класс Pipeline позволяет только добавлять строки и команды (которые по очереди строятся из строк).

var runspace = ...;
var pipeline = runspace.CreatePipeline();
pipeline.AddCommand("Get-Date"); // ok
var myCmdlet = new MyCmdlet();
pipeline.AddCommand(myCmdlet); // Doesn't compile - am I fundamentally 
       // misunderstanding some difference between commands and commandlets?
foreach(var res in pipeline.Invoke()) {...}

Я считаю, что то, что я делаю, должно иметь смысл ... или есть другой способ сделать это?

Ответы [ 2 ]

1 голос
/ 03 марта 2011

Ваш командлет должен иметь четко определенный синтаксис, основанный на том, что вы указали в атрибуте Cmdlet.

Например, вот начало, где я создаю свой собственный командлет clear-host, чтобы заменить встроенныйв функции clear-host:

<Cmdlet("clear", "host")> _
 Public Class Clearhost
     Inherits Cmdlet

Из атрибута Cmdlet синтаксис моего командлета является «clear-host».Вы должны иметь возможность использовать это (поскольку это строка) и добавить его в конвейер.

0 голосов
/ 17 сентября 2014

После поиска других ответов и просмотра System.Management.Automation в ILSpy я убежден, что невозможно напрямую добавить Cmdlet экземпляров.PowerShell требует, чтобы вы использовали строки, что очень жаль, если вы просто хотите выгнать его из .NET, используя правильные типы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...