从PowerShell cmdlet返回一个对象

本文关键字:一个对象 返回 cmdlet PowerShell | 更新日期: 2023-09-27 18:10:01

我正在尝试为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更改返回类型。

任何人都可以帮助最好的方式来返回 rptfilessettings 对象,这样我就可以在其他cmdlet中使用它的值?

从PowerShell cmdlet返回一个对象

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

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

要将构造的rptFileSettings对象传递到cmdlet输出,您只需要这样做:

protected override void ProcessRecord()
{
    ReportFileSettings rptFileSettings = new ReportFileSettings();
    ...
    WriteObject(rptFileSettings);
}
相关文章: