MegaBites-AI/Windows-powershell
0372
1// Copyright (c) Microsoft Corporation.2// Licensed under the MIT License.3 4using System.Diagnostics.CodeAnalysis;5using System.Management.Automation.Remoting;6using System.Runtime.Serialization;7using System.Security.Permissions;8 9namespace System.Management.Automation.Runspaces10{11 /// <summary>12 /// Error record in remoting cases.13 /// </summary>14 public class RemotingErrorRecord : ErrorRecord15 {16 /// <summary>17 /// Contains the origin information.18 /// </summary>19 public OriginInfo OriginInfo20 {21 get22 {23 return _originInfo;24 }25 }26 27 private readonly OriginInfo _originInfo;28 29 /// <summary>30 /// Constructor.31 /// </summary>32 /// <param name="errorRecord">The error record that is wrapped.</param>33 /// <param name="originInfo">Origin information.</param>34 public RemotingErrorRecord(ErrorRecord errorRecord, OriginInfo originInfo)35 : this(errorRecord, originInfo, null) { }36 37 /// <summary>38 /// Constructor that is used to wrap an error record.39 /// </summary>40 /// <param name="errorRecord"></param>41 /// <param name="originInfo"></param>42 /// <param name="replaceParentContainsErrorRecordException"></param>43 private RemotingErrorRecord(44 ErrorRecord errorRecord,45 OriginInfo originInfo,46 Exception replaceParentContainsErrorRecordException)47 : base(errorRecord, replaceParentContainsErrorRecordException)48 {49 if (errorRecord != null)50 {51 base.SetInvocationInfo(errorRecord.InvocationInfo);52 }53 54 _originInfo = originInfo;55 }56 57 #region ISerializable implementation58 59 /// <summary>60 /// Deserializer constructor.61 /// </summary>62 /// <param name="info">Serializer information.</param>63 /// <param name="context">Streaming context.</param>64 [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]65 protected RemotingErrorRecord(SerializationInfo info, StreamingContext context) : base(info, context)66 {67 throw new NotSupportedException();68 }69 70 #endregion71 72 #region Override73 74 /// <summary>75 /// Wrap the current ErrorRecord instance.76 /// </summary>77 /// <param name="replaceParentContainsErrorRecordException">78 /// If the wrapped exception contains a ParentContainsErrorRecordException, the new79 /// ErrorRecord should have this exception as its Exception instead.80 /// </param>81 /// <returns></returns>82 internal override ErrorRecord WrapException(Exception replaceParentContainsErrorRecordException)83 {84 return new RemotingErrorRecord(this, this.OriginInfo, replaceParentContainsErrorRecordException);85 }86 87 #endregion Override88 }89 90 /// <summary>91 /// Progress record containing origin information.92 /// </summary>93 [DataContract]94 public class RemotingProgressRecord : ProgressRecord95 {96 /// <summary>97 /// Contains the origin information.98 /// </summary>99 public OriginInfo OriginInfo100 {101 get { return _originInfo; }102 }103 104 [DataMember]105 private readonly OriginInfo _originInfo;106 107 /// <summary>108 /// Constructor.109 /// </summary>110 /// <param name="progressRecord">The progress record that is wrapped.</param>111 /// <param name="originInfo">Origin information.</param>112 public RemotingProgressRecord(ProgressRecord progressRecord, OriginInfo originInfo)113 : base(114 Validate(progressRecord).ActivityId,115 Validate(progressRecord).Activity,116 Validate(progressRecord).StatusDescription)117 {118 _originInfo = originInfo;119 if (progressRecord != null)120 {121 this.PercentComplete = progressRecord.PercentComplete;122 this.ParentActivityId = progressRecord.ParentActivityId;123 this.RecordType = progressRecord.RecordType;124 this.SecondsRemaining = progressRecord.SecondsRemaining;125 if (!string.IsNullOrEmpty(progressRecord.CurrentOperation))126 {127 this.CurrentOperation = progressRecord.CurrentOperation;128 }129 }130 }131 132 private static ProgressRecord Validate(ProgressRecord progressRecord)133 {134 ArgumentNullException.ThrowIfNull(progressRecord);135 return progressRecord;136 }137 }138 139 /// <summary>140 /// Warning record containing origin information.141 /// </summary>142 [DataContract]143 public class RemotingWarningRecord : WarningRecord144 {145 /// <summary>146 /// Contains the origin information.147 /// </summary>148 public OriginInfo OriginInfo149 {150 get { return _originInfo; }151 }152 153 [DataMember]154 private readonly OriginInfo _originInfo;155 156 /// <summary>157 /// Constructor.158 /// </summary>159 /// <param name="message">The warning message that is wrapped.</param>160 /// <param name="originInfo">The origin information.</param>161 public RemotingWarningRecord(string message, OriginInfo originInfo)162 : base(message)163 {164 _originInfo = originInfo;165 }166 167 /// <summary>168 /// Constructor taking WarningRecord to wrap and OriginInfo.169 /// </summary>170 /// <param name="warningRecord">WarningRecord to wrap.</param>171 /// <param name="originInfo">OriginInfo.</param>172 internal RemotingWarningRecord(173 WarningRecord warningRecord,174 OriginInfo originInfo)175 : base(warningRecord.FullyQualifiedWarningId, warningRecord.Message)176 {177 _originInfo = originInfo;178 }179 }180 181 /// <summary>182 /// Debug record containing origin information.183 /// </summary>184 [DataContract]185 public class RemotingDebugRecord : DebugRecord186 {187 /// <summary>188 /// Contains the origin information.189 /// </summary>190 public OriginInfo OriginInfo191 {192 get { return _originInfo; }193 }194 195 [DataMember]196 private readonly OriginInfo _originInfo;197 198 /// <summary>199 /// Constructor.200 /// </summary>201 /// <param name="message">The debug message that is wrapped.</param>202 /// <param name="originInfo">The origin information.</param>203 public RemotingDebugRecord(string message, OriginInfo originInfo)204 : base(message)205 {206 _originInfo = originInfo;207 }208 }209 210 /// <summary>211 /// Verbose record containing origin information.212 /// </summary>213 [DataContract]214 public class RemotingVerboseRecord : VerboseRecord215 {216 /// <summary>217 /// Contains the origin information.218 /// </summary>219 public OriginInfo OriginInfo220 {221 get { return _originInfo; }222 }223 224 [DataMember]225 private readonly OriginInfo _originInfo;226 227 /// <summary>228 /// Constructor.229 /// </summary>230 /// <param name="message">The verbose message that is wrapped.</param>231 /// <param name="originInfo">The origin information.</param>232 public RemotingVerboseRecord(string message, OriginInfo originInfo)233 : base(message)234 {235 _originInfo = originInfo;236 }237 }238 239 /// <summary>240 /// Information record containing origin information.241 /// </summary>242 [DataContract]243 public class RemotingInformationRecord : InformationRecord244 {245 /// <summary>246 /// Contains the origin information.247 /// </summary>248 public OriginInfo OriginInfo249 {250 get { return _originInfo; }251 }252 253 [DataMember]254 private readonly OriginInfo _originInfo;255 256 /// <summary>257 /// Constructor.258 /// </summary>259 /// <param name="record">The Information message that is wrapped.</param>260 /// <param name="originInfo">The origin information.</param>261 public RemotingInformationRecord(InformationRecord record, OriginInfo originInfo)262 : base(record)263 {264 _originInfo = originInfo;265 }266 }267}268 269namespace System.Management.Automation.Remoting270{271 /// <summary>272 /// Contains OriginInfo for an error record.273 /// </summary>274 /// <remarks>This class should only be used when275 /// defining origin information for error records.276 /// In case of output objects, the information277 /// should directly be added to the object as278 /// properties</remarks>279 [DataContract]280 public class OriginInfo281 {282 /// <summary>283 /// The HostEntry information for the machine on284 /// which this information originated.285 /// </summary>286 [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "PSIP")]287 public string PSComputerName288 {289 get290 {291 return _computerName;292 }293 }294 295 [DataMember]296 private readonly string _computerName;297 298 /// <summary>299 /// Runspace instance ID.300 /// </summary>301 [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "ID")]302 public Guid RunspaceID303 {304 get305 {306 return _runspaceID;307 }308 }309 310 [DataMember]311 private readonly Guid _runspaceID;312 313 /// <summary>314 /// Error record source instance ID.315 /// </summary>316 [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "ID")]317 public Guid InstanceID318 {319 get320 {321 return _instanceId;322 }323 324 set325 {326 _instanceId = value;327 }328 }329 330 [DataMember]331 private Guid _instanceId;332 333 /// <summary>334 /// Public constructor.335 /// </summary>336 /// <param name="computerName">Machine name.</param>337 /// <param name="runspaceID">Instance id of runspace.</param>338 [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "ID")]339 public OriginInfo(string computerName, Guid runspaceID)340 : this(computerName, runspaceID, Guid.Empty)341 { }342 343 /// <summary>344 /// Public constructor.345 /// </summary>346 /// <param name="computerName">Machine name.</param>347 /// <param name="runspaceID">Instance id of runspace.</param>348 /// <param name="instanceID">Instance id for the origin object.</param>349 [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "ID")]350 public OriginInfo(string computerName, Guid runspaceID, Guid instanceID)351 {352 _computerName = computerName;353 _runspaceID = runspaceID;354 _instanceId = instanceID;355 }356 357 /// <summary>358 /// Overridden ToString() method.359 /// </summary>360 /// <returns>Returns the computername.</returns>361 public override string ToString()362 {363 return PSComputerName;364 }365 }366}367 