Возврат объекта из командлета PowerShell

Я пытаюсь создать свой собственный набор командлетов для оснастки PowerShell. Проблема в том, что я создал свой собственный объект, который я создаю и заполняю в методе ProcessRecord, но я не могу изменить тип возврата, чтобы позволить мне вернуть созданный объект.

 protected override void ProcessRecord()
 {
    ReportFileSettings rptFileSettings = new ReportFileSettings();
    rptFileSettings.Enabled = string.Equals((reader.GetAttribute("Enabled").ToString().ToLower()), "yes");
    rptFileSettings.FileLocation = reader.GetAttribute("FileLocation").ToString();
    rptFileSettings.OverwriteExisting = string.Equals(reader.GetAttribute("OverwriteExistingFile").ToString().ToLower(), "yes");
    rptFileSettings.NoOfDaysToKeep = int.Parse(reader.GetAttribute("NumberOfDaysToKeep").ToString());
    rptFileSettings.ArchiveFileLocation = reader.GetAttribute("ArchiveFileLocation").ToString();

    return rptFileSettings;
 }

Это мой метод ProcessRecord, но поскольку он переопределяет метод из PSCmdlet, я не могу изменить тип возврата из void.

может ли кто-нибудь помочь с лучшим способом вернуться the rptFileSettings объект, чтобы я мог использовать его со значениями в других командлетах?

1 ответов


вам никогда не нужно возвращать значение из Cmdlet.ProcessRecord метод. Этот метод имеет свое конкретное место и способ использования в жизненный цикл обработки командлетов PowerShell.

передача объектов по конвейеру обработки командлетов обрабатывается платформой для вас. Точно так же, как экземпляр командлета получает входные данные, он может отправлять их на выход для дальнейшей обработки. Передача объектов на выход осуществляется с помощью Cmdlet.WriteObject метод внутри методов обработки входных данных, то есть BeginProcessing, ProcessRecord и EndProcessing.

передать построенное rptFileSettings объект для вывода командлета вам нужно только сделать это:

protected override void ProcessRecord()
{
    ReportFileSettings rptFileSettings = new ReportFileSettings();
    ...
    WriteObject(rptFileSettings);
}