从PowerShell cmdlet返回对象

use*_*044 6 c# powershell cmdlets return-type pscmdlet

我正在尝试为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;
 }
Run Code Online (Sandbox Code Playgroud)

这是我的ProcessRecord方法,但是因为它覆盖了PSCmdlet中的那个,所以无法从void更改返回类型.

任何人都可以帮助返回rptFileSettings对象的最佳方法,以便我可以将其与其他cmdlet中的值一起使用吗?

fam*_*kin 7

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

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

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

protected override void ProcessRecord()
{
    ReportFileSettings rptFileSettings = new ReportFileSettings();
    ...
    WriteObject(rptFileSettings);
}
Run Code Online (Sandbox Code Playgroud)