/// <summary> /// Adds the information about this informational record to a PSObject as note properties. /// The PSObject is used to serialize the record during remote operations. /// </summary> /// <remarks> /// InvocationInfos are usually serialized as part of another object, so we add "InvocationInfo_" to /// the note properties to prevent collisions with any properties set by the containing object. /// </remarks> internal void ToPSObjectForRemoting(PSObject psObject) { RemotingEncoder.AddNoteProperty <object>(psObject, "InvocationInfo_BoundParameters", () => this.BoundParameters); RemotingEncoder.AddNoteProperty <CommandOrigin>(psObject, "InvocationInfo_CommandOrigin", () => this.CommandOrigin); RemotingEncoder.AddNoteProperty <bool>(psObject, "InvocationInfo_ExpectingInput", () => this.ExpectingInput); RemotingEncoder.AddNoteProperty <string>(psObject, "InvocationInfo_InvocationName", () => this.InvocationName); RemotingEncoder.AddNoteProperty <string>(psObject, "InvocationInfo_Line", () => this.Line); RemotingEncoder.AddNoteProperty <int>(psObject, "InvocationInfo_OffsetInLine", () => this.OffsetInLine); RemotingEncoder.AddNoteProperty <long>(psObject, "InvocationInfo_HistoryId", () => this.HistoryId); RemotingEncoder.AddNoteProperty <int[]>(psObject, "InvocationInfo_PipelineIterationInfo", () => this.PipelineIterationInfo); RemotingEncoder.AddNoteProperty <int>(psObject, "InvocationInfo_PipelineLength", () => this.PipelineLength); RemotingEncoder.AddNoteProperty <int>(psObject, "InvocationInfo_PipelinePosition", () => this.PipelinePosition); RemotingEncoder.AddNoteProperty <string>(psObject, "InvocationInfo_PSScriptRoot", () => this.PSScriptRoot); RemotingEncoder.AddNoteProperty <string>(psObject, "InvocationInfo_PSCommandPath", () => this.PSCommandPath); // PositionMessage is ignored when deserializing because it is synthesized from the other position related fields, but // it is serialized for backwards compatibility. RemotingEncoder.AddNoteProperty <string>(psObject, "InvocationInfo_PositionMessage", () => this.PositionMessage); RemotingEncoder.AddNoteProperty <int>(psObject, "InvocationInfo_ScriptLineNumber", () => this.ScriptLineNumber); RemotingEncoder.AddNoteProperty <string>(psObject, "InvocationInfo_ScriptName", () => this.ScriptName); RemotingEncoder.AddNoteProperty <object>(psObject, "InvocationInfo_UnboundArguments", () => this.UnboundArguments); ScriptExtent extent = DisplayScriptPosition as ScriptExtent; if (extent != null) { extent.ToPSObjectForRemoting(psObject); RemotingEncoder.AddNoteProperty(psObject, "SerializeExtent", () => true); } else { RemotingEncoder.AddNoteProperty(psObject, "SerializeExtent", () => false); } RemoteCommandInfo.ToPSObjectForRemoting(this.MyCommand, psObject); }
internal void ToPSObjectForRemoting(PSObject psObject) { RemotingEncoder.AddNoteProperty <object>(psObject, "InvocationInfo_BoundParameters", () => this.BoundParameters); RemotingEncoder.AddNoteProperty <System.Management.Automation.CommandOrigin>(psObject, "InvocationInfo_CommandOrigin", () => this.CommandOrigin); RemotingEncoder.AddNoteProperty <bool>(psObject, "InvocationInfo_ExpectingInput", () => this.ExpectingInput); RemotingEncoder.AddNoteProperty <string>(psObject, "InvocationInfo_InvocationName", () => this.InvocationName); RemotingEncoder.AddNoteProperty <string>(psObject, "InvocationInfo_Line", () => this.Line); RemotingEncoder.AddNoteProperty <int>(psObject, "InvocationInfo_OffsetInLine", () => this.OffsetInLine); RemotingEncoder.AddNoteProperty <long>(psObject, "InvocationInfo_HistoryId", () => this.HistoryId); RemotingEncoder.AddNoteProperty <int[]>(psObject, "InvocationInfo_PipelineIterationInfo", () => this.PipelineIterationInfo); RemotingEncoder.AddNoteProperty <int>(psObject, "InvocationInfo_PipelineLength", () => this.PipelineLength); RemotingEncoder.AddNoteProperty <int>(psObject, "InvocationInfo_PipelinePosition", () => this.PipelinePosition); RemotingEncoder.AddNoteProperty <string>(psObject, "InvocationInfo_PSScriptRoot", () => this.PSScriptRoot); RemotingEncoder.AddNoteProperty <string>(psObject, "InvocationInfo_PSCommandPath", () => this.PSCommandPath); RemotingEncoder.AddNoteProperty <string>(psObject, "InvocationInfo_PositionMessage", () => this.PositionMessage); RemotingEncoder.AddNoteProperty <int>(psObject, "InvocationInfo_ScriptLineNumber", () => this.ScriptLineNumber); RemotingEncoder.AddNoteProperty <string>(psObject, "InvocationInfo_ScriptName", () => this.ScriptName); RemotingEncoder.AddNoteProperty <object>(psObject, "InvocationInfo_UnboundArguments", () => this.UnboundArguments); ScriptExtent displayScriptPosition = this.DisplayScriptPosition as ScriptExtent; if (displayScriptPosition != null) { displayScriptPosition.ToPSObjectForRemoting(psObject); RemotingEncoder.AddNoteProperty <bool>(psObject, "SerializeExtent", () => true); } else { RemotingEncoder.AddNoteProperty <bool>(psObject, "SerializeExtent", () => false); } RemoteCommandInfo.ToPSObjectForRemoting(this.MyCommand, psObject); }