Как правильно вызвать командлет из другого командлета?

У меня есть несколько командлетов, написанных. Тот, над которым я сейчас работаю, я хотел бы назвать другими командлетами. Я пытаюсь сделать это так:

//Calling cmdlet
protected override void ProcessRecord()
{
    Cmdlet1 _cmdlet1 = new Cmdlet1();
    _cmdlet1.configFilePath = this.configFilePath; //set a few parameters the cmdlet will need
    _cmdlet1.useConfigFile = true; //and one more
    _cmdlet1.Invoke();

    Cmdlet2 _cmdlet2 = new Cmdlet2();
    _cmdlet2.configFilePath = this.configFilePath; //set a few parameters again
    _cmdlet2.useConfigFile = true; //one more
    _cmdlet2.Invoke();
}

Однако, когда я запускаю «Вызов командлета» из powershell, ничего не происходит. Ошибок нет, ни один код, который я написал в других моих командлетах, не запускается. В Cmdlet1 и Cmdlet2 есть несколько вызовов WriteObject, разве я не должен их видеть, если командлеты действительно выполняются? Хотя я должен упомянуть, что это, очевидно, не единственное, что я проверяю, чтобы убедиться, что они успешно вызываются.


person tnw    schedule 11.06.2013    source источник


Ответы (1)


Объекты, которые вы пишете с помощью WriteObject, возвращаются через вызов метода Invoke(). Переберите результаты этого вызова, чтобы получить отдельные объекты из вызова командлета, например:

foreach (var result in _cmdlet1.Invoke())
{
    ...
}

См. этот раздел MSDN для более подробной информации.

person Keith Hill    schedule 11.06.2013