Team Ai
Datasetpublic

MegaBites-AI/Windows-powershell

sourceHugging Facemitupdated 6mo agoView on Hugging Face
0likes372downloads
InformationalRecord.cs268 linesDownload Raw Back to hostifaces
1// Copyright (c) Microsoft Corporation.2// Licensed under the MIT License.3 4using System.Collections;5using System.Collections.ObjectModel;6using System.Runtime.Serialization;7 8namespace System.Management.Automation9{10    /// <summary>11    /// Base class for items in the PSInformationalBuffers.12    ///13    /// A PSInformationalRecord consists of a string Message and the InvocationInfo and pipeline state corresponding14    /// to the command that created the record.15    /// </summary>16    [DataContract]17    public abstract class InformationalRecord18    {19        /// <remarks>20        /// This class can be instantiated only by its derived classes21        /// </remarks>22        internal InformationalRecord(string message)23        {24            _message = message;25            _invocationInfo = null;26            _pipelineIterationInfo = null;27            _serializeExtendedInfo = false;28        }29 30        /// <summary>31        /// Creates an InformationalRecord object from a record serialized as a PSObject by ToPSObjectForRemoting.32        /// </summary>33        internal InformationalRecord(PSObject serializedObject)34        {35            _message = (string)SerializationUtilities.GetPropertyValue(serializedObject, "InformationalRecord_Message");36            _serializeExtendedInfo = (bool)SerializationUtilities.GetPropertyValue(serializedObject, "InformationalRecord_SerializeInvocationInfo");37 38            if (_serializeExtendedInfo)39            {40                _invocationInfo = new InvocationInfo(serializedObject);41 42                ArrayList pipelineIterationInfo = (ArrayList)SerializationUtilities.GetPsObjectPropertyBaseObject(serializedObject, "InformationalRecord_PipelineIterationInfo");43 44                _pipelineIterationInfo = new ReadOnlyCollection<int>((int[])pipelineIterationInfo.ToArray(typeof(int)));45            }46            else47            {48                _invocationInfo = null;49            }50        }51 52        /// <summary>53        /// The message written by the command that created this record.54        /// </summary>55        public string Message56        {57            get58            {59                return _message;60            }61 62            set63            {64                _message = value;65            }66        }67 68        /// <summary>69        /// The InvocationInfo of the command that created this record.70        /// </summary>71        /// <remarks>72        /// The InvocationInfo can be null if the record was not created by a command.73        /// </remarks>74        public InvocationInfo InvocationInfo75        {76            get77            {78                return _invocationInfo;79            }80        }81 82        /// <summary>83        /// The status of the pipeline when this record was created.84        /// </summary>85        /// <remarks>86        /// The PipelineIterationInfo can be null if the record was not created by a command.87        /// </remarks>88        public ReadOnlyCollection<int> PipelineIterationInfo89        {90            get91            {92                return _pipelineIterationInfo;93            }94        }95 96        /// <summary>97        /// Sets the InvocationInfo (and PipelineIterationInfo) for this record.98        /// </summary>99        internal void SetInvocationInfo(InvocationInfo invocationInfo)100        {101            _invocationInfo = invocationInfo;102 103            //104            // Copy a snapshot of the PipelineIterationInfo from the InvocationInfo to this InformationalRecord105            //106            if (invocationInfo.PipelineIterationInfo != null)107            {108                int[] snapshot = (int[])invocationInfo.PipelineIterationInfo.Clone();109 110                _pipelineIterationInfo = new ReadOnlyCollection<int>(snapshot);111            }112        }113 114        /// <summary>115        /// Whether to serialize the InvocationInfo and PipelineIterationInfo during remote calls.116        /// </summary>117        internal bool SerializeExtendedInfo118        {119            get120            {121                return _serializeExtendedInfo;122            }123 124            set125            {126                _serializeExtendedInfo = value;127            }128        }129 130        /// <summary>131        /// Returns the record's message.132        /// </summary>133        public override string ToString()134        {135            return this.Message;136        }137 138        /// <summary>139        /// Adds the information about this informational record to a PSObject as note properties.140        /// The PSObject is used to serialize the record during remote operations.141        /// </summary>142        internal virtual void ToPSObjectForRemoting(PSObject psObject)143        {144            RemotingEncoder.AddNoteProperty<string>(psObject, "InformationalRecord_Message", () => this.Message);145 146            //147            // The invocation info may be null if the record was created via WriteVerbose/Warning/DebugLine instead of WriteVerbose/Warning/Debug, in that case148            // we set InformationalRecord_SerializeInvocationInfo to false.149            //150            if (!this.SerializeExtendedInfo || _invocationInfo == null)151            {152                RemotingEncoder.AddNoteProperty(psObject, "InformationalRecord_SerializeInvocationInfo", () => false);153            }154            else155            {156                RemotingEncoder.AddNoteProperty(psObject, "InformationalRecord_SerializeInvocationInfo", () => true);157                _invocationInfo.ToPSObjectForRemoting(psObject);158                RemotingEncoder.AddNoteProperty<object>(psObject, "InformationalRecord_PipelineIterationInfo", () => this.PipelineIterationInfo);159            }160        }161 162        [DataMember]163        private string _message;164 165        private InvocationInfo _invocationInfo;166        private ReadOnlyCollection<int> _pipelineIterationInfo;167        private bool _serializeExtendedInfo;168    }169 170    /// <summary>171    /// A warning record in the PSInformationalBuffers.172    /// </summary>173    [DataContract]174    public class WarningRecord : InformationalRecord175    {176        /// <summary>177        /// </summary>178        /// <param name="message"></param>179        public WarningRecord(string message)180            : base(message)181        { }182 183        /// <summary>184        /// </summary>185        /// <param name="record"></param>186        public WarningRecord(PSObject record)187            : base(record)188        { }189 190        /// <summary>191        /// Constructor for Fully qualified warning Id.192        /// </summary>193        /// <param name="fullyQualifiedWarningId">Fully qualified warning Id.</param>194        /// <param name="message">Warning message.</param>195        public WarningRecord(string fullyQualifiedWarningId, string message)196            : base(message)197        {198            _fullyQualifiedWarningId = fullyQualifiedWarningId;199        }200 201        /// <summary>202        /// Constructor for Fully qualified warning Id.203        /// </summary>204        /// <param name="fullyQualifiedWarningId">Fully qualified warning Id.</param>205        /// <param name="record">Warning serialized object.</param>206        public WarningRecord(string fullyQualifiedWarningId, PSObject record)207            : base(record)208        {209            _fullyQualifiedWarningId = fullyQualifiedWarningId;210        }211 212        /// <summary>213        /// String which uniquely identifies this warning condition.214        /// </summary>215        public string FullyQualifiedWarningId216        {217            get218            {219                return _fullyQualifiedWarningId ?? string.Empty;220            }221        }222 223        private readonly string _fullyQualifiedWarningId;224    }225 226    /// <summary>227    /// A debug record in the PSInformationalBuffers.228    /// </summary>229    [DataContract]230    public class DebugRecord : InformationalRecord231    {232        /// <summary>233        /// </summary>234        /// <param name="message"></param>235        public DebugRecord(string message)236            : base(message)237        { }238 239        /// <summary>240        /// </summary>241        /// <param name="record"></param>242        public DebugRecord(PSObject record)243            : base(record)244        { }245    }246 247    /// <summary>248    /// A verbose record in the PSInformationalBuffers.249    /// </summary>250    [DataContract]251    public class VerboseRecord : InformationalRecord252    {253        /// <summary>254        /// </summary>255        /// <param name="message"></param>256        public VerboseRecord(string message)257            : base(message)258        { }259 260        /// <summary>261        /// </summary>262        /// <param name="record"></param>263        public VerboseRecord(PSObject record)264            : base(record)265        { }266    }267}268