C# 从PowerShell cmdlet返回对象

C# 从PowerShell cmdlet返回对象,c#,powershell,return-type,cmdlets,pscmdlet,C#,Powershell,Return Type,Cmdlets,Pscmdlet,我正在尝试为PowerShell管理单元创建自己的cmdlet集。我遇到的问题是,我已经创建了自己的对象,并在ProcessRecord方法中创建和填充该对象,但我无法更改返回类型以允许我返回所创建的对象 protected override void ProcessRecord() { ReportFileSettings rptFileSettings = new ReportFileSettings(); rptFileSettings.Enabled = string

我正在尝试为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中将其与值一起使用?

您永远不需要从该方法返回值。这种方法在实践中有其特定的位置和使用方式

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

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

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

为什么要从
ProcessRecord
方法返回任何内容?它有一个非常特殊的用途,在中返回的值没有任何用处。我对powershell和创建powershell cmdlet是新手,因此我正在努力学习。如果您只想通过管道将创建的对象传递给输出或其他cmdlet进行处理,则可以使用以下方法完成此操作。在您的情况下,
WriteObject(rptFileSettings)