8

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 から変更できません。

rptFileSettingsオブジェクトを返して、他のコマンドレットでその値を使用できるようにするための最良の方法を誰かが手伝ってくれますか?

4

1 に答える 1

9

Cmdlet.ProcessRecordメソッドから値を返す必要はありません。このメソッドには、 PowerShell コマンドレット処理ライフサイクルの特定の場所と使用方法があります。

オブジェクトをコマンドレット処理パイプラインに渡すことは、フレームワークによって処理されます。コマンドレット インスタンスが入力データを取得するのと同じ方法で、さらに処理するためにデータを出力に送信できます。出力へのオブジェクトの受け渡しは、入力処理メソッド内のメソッド、つまり および を使用して行わCmdlet.WriteObjectれます。BeginProcessingProcessRecordEndProcessing

構築されたrptFileSettingsオブジェクトをコマンドレット出力に渡すには、これを行うだけです。

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