8

我正在尝试为 PowerShell 管理单元创建自己的一组 cmdlet。我遇到的问题是我创建了自己的对象,我在 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 更改。

任何人都可以提供返回rptFileSettings对象的最佳方法,以便我可以在其他 cmdlet 中使用它的值吗?

4

1 回答 1

9

您永远不需要从Cmdlet.ProcessRecord方法中返回值。此方法在PowerShell cmdlet 处理生命周期中有其特定的位置和使用方式。

将对象向下传递到 cmdlet 处理管道由框架为您处理。与您的 cmdlet 实例获取输入数据的方式相同,它可以将数据发送到输出以进行进一步处理。将对象传递到输出是使用Cmdlet.WriteObject输入处理方法内部的方法完成的,BeginProcessingProcessRecordEndProcessing

要将构造的rptFileSettings对象传递给您的 cmdlet 输出,您只需执行以下操作:

protected override void ProcessRecord()
{
    ReportFileSettings rptFileSettings = new ReportFileSettings();
    ...
    WriteObject(rptFileSettings);
}
于 2014-06-24T15:27:02.230 回答