MegaBites-AI/Windows-powershell
0372
1// Copyright (c) Microsoft Corporation.2// Licensed under the MIT License.3 4#region Using directives5using System;6using System.Collections;7using System.Collections.Generic;8using System.Diagnostics.CodeAnalysis;9using System.Management.Automation;10#endregion11 12namespace Microsoft.Management.Infrastructure.CimCmdlets13{14 /// <summary>15 /// <para>16 /// Enables the user to Set properties and keys on a specific <see cref="CimInstance"/>17 /// CimInstance must have values of all [KEY] properties.18 /// </para>19 /// </summary>20 [Alias("scim")]21 [Cmdlet(22 VerbsCommon.Set,23 "CimInstance",24 SupportsShouldProcess = true,25 DefaultParameterSetName = CimBaseCommand.CimInstanceComputerSet,26 HelpUri = "https://go.microsoft.com/fwlink/?LinkId=227962")]27 public class SetCimInstanceCommand : CimBaseCommand28 {29 #region constructor30 31 /// <summary>32 /// Initializes a new instance of the <see cref="SetCimInstanceCommand"/> class.33 /// </summary>34 public SetCimInstanceCommand()35 : base(parameters, parameterSets)36 {37 }38 39 #endregion40 41 #region parameters42 /// <summary>43 /// The following is the definition of the input parameter "Session".44 /// CIM session used to set the CIM Instance.45 /// </summary>46 [Parameter(47 Mandatory = true,48 ValueFromPipeline = true,49 ParameterSetName = CimBaseCommand.CimInstanceSessionSet)]50 [Parameter(51 Mandatory = true,52 ValueFromPipeline = true,53 ParameterSetName = CimBaseCommand.QuerySessionSet)]54 [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]55 public CimSession[] CimSession56 {57 get58 {59 return cimSession;60 }61 62 set63 {64 cimSession = value;65 base.SetParameter(value, nameCimSession);66 }67 }68 69 private CimSession[] cimSession;70 71 /// <summary>72 /// The following is the definition of the input parameter "ComputerName".73 /// </summary>74 [Alias(AliasCN, AliasServerName)]75 [Parameter(76 ValueFromPipelineByPropertyName = true,77 ParameterSetName = CimBaseCommand.QueryComputerSet)]78 [Parameter(79 ParameterSetName = CimBaseCommand.CimInstanceComputerSet)]80 [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]81 public string[] ComputerName82 {83 get84 {85 return computername;86 }87 88 set89 {90 computername = value;91 base.SetParameter(value, nameComputerName);92 }93 }94 95 private string[] computername;96 97 /// <summary>98 /// <para>99 /// The following is the definition of the input parameter "ResourceUri".100 /// Define the Resource Uri for which the instances are retrieved.101 /// </para>102 /// </summary>103 [Parameter(ValueFromPipelineByPropertyName = true,104 ParameterSetName = CimBaseCommand.CimInstanceComputerSet)]105 [Parameter(ValueFromPipelineByPropertyName = true,106 ParameterSetName = CimBaseCommand.CimInstanceSessionSet)]107 public Uri ResourceUri108 {109 get110 {111 return resourceUri;112 }113 114 set115 {116 this.resourceUri = value;117 base.SetParameter(value, nameResourceUri);118 }119 }120 121 private Uri resourceUri;122 123 /// <summary>124 /// The following is the definition of the input parameter "Namespace".125 /// The Namespace used to look for the Class instances under.126 /// </summary>127 [Parameter(ValueFromPipelineByPropertyName = true,128 ParameterSetName = CimBaseCommand.QuerySessionSet)]129 [Parameter(ValueFromPipelineByPropertyName = true,130 ParameterSetName = CimBaseCommand.QueryComputerSet)]131 public string Namespace132 {133 get134 {135 return nameSpace;136 }137 138 set139 {140 nameSpace = value;141 base.SetParameter(value, nameNamespace);142 }143 }144 145 private string nameSpace;146 147 /// <summary>148 /// The following is the definition of the input parameter "OperationTimeoutSec".149 /// Used to set the invocation operation time out. This value overrides the150 /// CimSession operation timeout.151 /// </summary>152 [Alias(AliasOT)]153 [Parameter]154 public uint OperationTimeoutSec { get; set; }155 156 /// <summary>157 /// The following is the definition of the input parameter "InputObject".158 /// Used to get a CimInstance using Get-CimInstance | Set-CimInstance.159 /// </summary>160 [Parameter(161 Mandatory = true,162 Position = 0,163 ValueFromPipeline = true,164 ParameterSetName = CimBaseCommand.CimInstanceComputerSet)]165 [Parameter(166 Mandatory = true,167 Position = 0,168 ValueFromPipeline = true,169 ParameterSetName = CimBaseCommand.CimInstanceSessionSet)]170 [Alias(CimBaseCommand.AliasCimInstance)]171 public CimInstance InputObject172 {173 get174 {175 return CimInstance;176 }177 178 set179 {180 CimInstance = value;181 base.SetParameter(value, nameCimInstance);182 }183 }184 185 /// <summary>186 /// Property for internal usage purpose.187 /// </summary>188 internal CimInstance CimInstance { get; private set; }189 190 /// <summary>191 /// The following is the definition of the input parameter "Query".192 /// </summary>193 [Parameter(194 Mandatory = true,195 Position = 0,196 ValueFromPipelineByPropertyName = true,197 ParameterSetName = CimBaseCommand.QueryComputerSet)]198 [Parameter(199 Mandatory = true,200 Position = 0,201 ValueFromPipelineByPropertyName = true,202 ParameterSetName = CimBaseCommand.QuerySessionSet)]203 public string Query204 {205 get206 {207 return query;208 }209 210 set211 {212 query = value;213 base.SetParameter(value, nameQuery);214 }215 }216 217 private string query;218 219 /// <summary>220 /// The following is the definition of the input parameter "QueryDialect".221 /// Specifies the dialect used by the query Engine that interprets the Query222 /// string.223 /// </summary>224 [Parameter(ValueFromPipelineByPropertyName = true,225 ParameterSetName = CimBaseCommand.QuerySessionSet)]226 [Parameter(ValueFromPipelineByPropertyName = true,227 ParameterSetName = CimBaseCommand.QueryComputerSet)]228 public string QueryDialect229 {230 get231 {232 return querydialect;233 }234 235 set236 {237 querydialect = value;238 base.SetParameter(value, nameQueryDialect);239 }240 }241 242 private string querydialect;243 244 /// <summary>245 /// <para>246 /// The following is the definition of the input parameter "Property",247 /// defines the value to be changed.248 /// </para>249 /// <para>250 /// The key properties will be ignored. Any invalid property will cause251 /// termination of the cmdlet execution.252 /// </para>253 /// </summary>254 [Parameter(Mandatory = true,255 ValueFromPipelineByPropertyName = true,256 ParameterSetName = CimBaseCommand.QuerySessionSet)]257 [Parameter(Mandatory = true,258 ValueFromPipelineByPropertyName = true,259 ParameterSetName = CimBaseCommand.QueryComputerSet)]260 [Parameter(ValueFromPipelineByPropertyName = true,261 ParameterSetName = CimBaseCommand.CimInstanceSessionSet)]262 [Parameter(ValueFromPipelineByPropertyName = true,263 ParameterSetName = CimBaseCommand.CimInstanceComputerSet)]264 [SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]265 [Alias("Arguments")]266 public IDictionary Property267 {268 get269 {270 return property;271 }272 273 set274 {275 property = value;276 base.SetParameter(value, nameProperty);277 }278 }279 280 private IDictionary property;281 282 /// <summary>283 /// <para>284 /// The following is the definition of the input parameter "PassThru",285 /// indicate whether Set-CimInstance should output modified result instance or not.286 /// </para>287 /// <para>288 /// True indicates output the result instance, otherwise output nothing as by default289 /// behavior.290 /// </para>291 /// </summary>292 [Parameter]293 [ValidateNotNull]294 public SwitchParameter PassThru { get; set; }295 296 #endregion297 298 #region cmdlet methods299 300 /// <summary>301 /// BeginProcessing method.302 /// </summary>303 protected override void BeginProcessing()304 {305 CimSetCimInstance cimSetCimInstance = this.GetOperationAgent() ?? CreateOperationAgent();306 307 this.CmdletOperation = new CmdletOperationSetCimInstance(this, cimSetCimInstance);308 this.AtBeginProcess = false;309 }310 311 /// <summary>312 /// ProcessRecord method.313 /// </summary>314 protected override void ProcessRecord()315 {316 base.CheckParameterSet();317 CimSetCimInstance cimSetCimInstance = this.GetOperationAgent();318 cimSetCimInstance.SetCimInstance(this);319 cimSetCimInstance.ProcessActions(this.CmdletOperation);320 }321 322 /// <summary>323 /// EndProcessing method.324 /// </summary>325 protected override void EndProcessing()326 {327 CimSetCimInstance cimSetCimInstance = this.GetOperationAgent();328 cimSetCimInstance?.ProcessRemainActions(this.CmdletOperation);329 }330 331 #endregion332 333 #region helper methods334 335 /// <summary>336 /// <para>337 /// Get <see cref="CimSetCimInstance"/> object, which is338 /// used to delegate all Set-CimInstance operations.339 /// </para>340 /// </summary>341 private CimSetCimInstance GetOperationAgent()342 {343 return this.AsyncOperation as CimSetCimInstance;344 }345 346 /// <summary>347 /// <para>348 /// Create <see cref="CimSetCimInstance"/> object, which is349 /// used to delegate all Set-CimInstance operations.350 /// </para>351 /// </summary>352 /// <returns></returns>353 private CimSetCimInstance CreateOperationAgent()354 {355 CimSetCimInstance cimSetCimInstance = new();356 this.AsyncOperation = cimSetCimInstance;357 return cimSetCimInstance;358 }359 360 #endregion361 362 #region private members363 364 #region const string of parameter names365 internal const string nameCimSession = "CimSession";366 internal const string nameComputerName = "ComputerName";367 internal const string nameResourceUri = "ResourceUri";368 internal const string nameNamespace = "Namespace";369 internal const string nameCimInstance = "InputObject";370 internal const string nameQuery = "Query";371 internal const string nameQueryDialect = "QueryDialect";372 internal const string nameProperty = "Property";373 #endregion374 375 /// <summary>376 /// Static parameter definition entries.377 /// </summary>378 private static readonly Dictionary<string, HashSet<ParameterDefinitionEntry>> parameters = new()379 {380 {381 nameCimSession, new HashSet<ParameterDefinitionEntry> {382 new ParameterDefinitionEntry(CimBaseCommand.CimInstanceSessionSet, true),383 new ParameterDefinitionEntry(CimBaseCommand.QuerySessionSet, true),384 }385 },386 {387 nameComputerName, new HashSet<ParameterDefinitionEntry> {388 new ParameterDefinitionEntry(CimBaseCommand.QueryComputerSet, false),389 new ParameterDefinitionEntry(CimBaseCommand.CimInstanceComputerSet, false),390 }391 },392 {393 nameNamespace, new HashSet<ParameterDefinitionEntry> {394 new ParameterDefinitionEntry(CimBaseCommand.QuerySessionSet, false),395 new ParameterDefinitionEntry(CimBaseCommand.QueryComputerSet, false),396 }397 },398 {399 nameCimInstance, new HashSet<ParameterDefinitionEntry> {400 new ParameterDefinitionEntry(CimBaseCommand.CimInstanceComputerSet, true),401 new ParameterDefinitionEntry(CimBaseCommand.CimInstanceSessionSet, true),402 }403 },404 {405 nameQuery, new HashSet<ParameterDefinitionEntry> {406 new ParameterDefinitionEntry(CimBaseCommand.QueryComputerSet, true),407 new ParameterDefinitionEntry(CimBaseCommand.QuerySessionSet, true),408 }409 },410 {411 nameQueryDialect, new HashSet<ParameterDefinitionEntry> {412 new ParameterDefinitionEntry(CimBaseCommand.QuerySessionSet, false),413 new ParameterDefinitionEntry(CimBaseCommand.QueryComputerSet, false),414 }415 },416 {417 nameProperty, new HashSet<ParameterDefinitionEntry> {418 new ParameterDefinitionEntry(CimBaseCommand.QuerySessionSet, true),419 new ParameterDefinitionEntry(CimBaseCommand.QueryComputerSet, true),420 new ParameterDefinitionEntry(CimBaseCommand.CimInstanceSessionSet, false),421 new ParameterDefinitionEntry(CimBaseCommand.CimInstanceComputerSet, false),422 }423 },424 {425 nameResourceUri, new HashSet<ParameterDefinitionEntry> {426 new ParameterDefinitionEntry(CimBaseCommand.CimInstanceComputerSet, false),427 new ParameterDefinitionEntry(CimBaseCommand.CimInstanceSessionSet, false),428 }429 },430 };431 432 /// <summary>433 /// Static parameter set entries.434 /// </summary>435 private static readonly Dictionary<string, ParameterSetEntry> parameterSets = new()436 {437 { CimBaseCommand.QuerySessionSet, new ParameterSetEntry(3) },438 { CimBaseCommand.QueryComputerSet, new ParameterSetEntry(2) },439 { CimBaseCommand.CimInstanceSessionSet, new ParameterSetEntry(2) },440 { CimBaseCommand.CimInstanceComputerSet, new ParameterSetEntry(1, true) },441 };442 #endregion443 }444}445 