MegaBites-AI/Windows-powershell
0372
1// Copyright (c) Microsoft Corporation.2// Licensed under the MIT License.3 4#region Using directives5 6using System;7using System.Collections.Generic;8using System.Diagnostics.CodeAnalysis;9using System.Management.Automation;10 11#endregion12 13namespace Microsoft.Management.Infrastructure.CimCmdlets14{15 /// <summary>16 /// Enables the user to remove a CimInstance.17 /// </summary>18 [Alias("rcim")]19 [Cmdlet(20 VerbsCommon.Remove,21 "CimInstance",22 SupportsShouldProcess = true,23 DefaultParameterSetName = CimBaseCommand.CimInstanceComputerSet,24 HelpUri = "https://go.microsoft.com/fwlink/?LinkId=227964")]25 public class RemoveCimInstanceCommand : CimBaseCommand26 {27 #region constructor28 29 /// <summary>30 /// Initializes a new instance of the <see cref="RemoveCimInstanceCommand"/> class.31 /// </summary>32 public RemoveCimInstanceCommand()33 : base(parameters, parameterSets)34 {35 DebugHelper.WriteLogEx();36 }37 38 #endregion39 40 #region parameters41 /// <summary>42 /// The following is the definition of the input parameter "Session".43 /// CIM session used to remove the CIM Instance.44 /// </summary>45 [Parameter(46 Mandatory = true,47 ValueFromPipeline = true,48 ParameterSetName = CimBaseCommand.CimInstanceSessionSet)]49 [Parameter(50 Mandatory = true,51 ValueFromPipeline = true,52 ParameterSetName = CimBaseCommand.QuerySessionSet)]53 [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]54 public CimSession[] CimSession55 {56 get57 {58 return cimSession;59 }60 61 set62 {63 cimSession = value;64 base.SetParameter(value, nameCimSession);65 }66 }67 68 private CimSession[] cimSession;69 70 /// <summary>71 /// <para>72 /// The following is the definition of the input parameter "ResourceUri".73 /// Define the Resource Uri for which the instances are retrieved.74 /// </para>75 /// </summary>76 [Parameter(ValueFromPipelineByPropertyName = true,77 ParameterSetName = CimBaseCommand.CimInstanceComputerSet)]78 [Parameter(ValueFromPipelineByPropertyName = true,79 ParameterSetName = CimBaseCommand.CimInstanceSessionSet)]80 public Uri ResourceUri81 {82 get83 {84 return resourceUri;85 }86 87 set88 {89 this.resourceUri = value;90 base.SetParameter(value, nameResourceUri);91 }92 }93 94 private Uri resourceUri;95 96 /// <summary>97 /// The following is the definition of the input parameter "ComputerName".98 /// </summary>99 [Alias(AliasCN, AliasServerName)]100 [Parameter(101 ValueFromPipelineByPropertyName = true,102 ParameterSetName = CimBaseCommand.QueryComputerSet)]103 [Parameter(104 ParameterSetName = CimBaseCommand.CimInstanceComputerSet)]105 [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]106 public string[] ComputerName107 {108 get109 {110 return computername;111 }112 113 set114 {115 computername = value;116 base.SetParameter(value, nameComputerName);117 }118 }119 120 private string[] computername;121 122 /// <summary>123 /// The following is the definition of the input parameter "Namespace".124 /// The Namespace used to look for the Class instances under.125 /// </summary>126 [Parameter(127 Position = 1,128 ValueFromPipelineByPropertyName = true,129 ParameterSetName = CimBaseCommand.QuerySessionSet)]130 [Parameter(131 Position = 1,132 ValueFromPipelineByPropertyName = true,133 ParameterSetName = CimBaseCommand.QueryComputerSet)]134 public string Namespace135 {136 get137 {138 return nameSpace;139 }140 141 set142 {143 nameSpace = value;144 base.SetParameter(value, nameNamespace);145 }146 }147 148 private string nameSpace;149 150 /// <summary>151 /// The following is the definition of the input parameter "OperationTimeoutSec".152 /// Used to set the invocation operation time out. This value overrides the153 /// CimSession operation timeout.154 /// </summary>155 [Alias(AliasOT)]156 [Parameter]157 public uint OperationTimeoutSec { get; set; }158 159 /// <summary>160 /// The following is the definition of the input parameter "InputObject".161 /// Used to get a CimInstance using Get-CimInstance | Remove-CimInstance.162 /// </summary>163 [Parameter(164 Mandatory = true,165 Position = 0,166 ValueFromPipeline = true,167 ParameterSetName = CimBaseCommand.CimInstanceComputerSet)]168 [Parameter(169 Mandatory = true,170 Position = 0,171 ValueFromPipeline = true,172 ParameterSetName = CimBaseCommand.CimInstanceSessionSet)]173 [Alias(CimBaseCommand.AliasCimInstance)]174 public CimInstance InputObject175 {176 get177 {178 return CimInstance;179 }180 181 set182 {183 CimInstance = value;184 base.SetParameter(value, nameCimInstance);185 }186 }187 188 /// <summary>189 /// Property for internal usage purpose.190 /// </summary>191 internal CimInstance CimInstance { get; private set; }192 193 /// <summary>194 /// The following is the definition of the input parameter "Query".195 /// </summary>196 [Parameter(197 Mandatory = true,198 Position = 0,199 ValueFromPipelineByPropertyName = true,200 ParameterSetName = CimBaseCommand.QueryComputerSet)]201 [Parameter(202 Mandatory = true,203 Position = 0,204 ValueFromPipelineByPropertyName = true,205 ParameterSetName = CimBaseCommand.QuerySessionSet)]206 public string Query207 {208 get209 {210 return query;211 }212 213 set214 {215 query = value;216 base.SetParameter(value, nameQuery);217 }218 }219 220 private string query;221 222 /// <summary>223 /// The following is the definition of the input parameter "QueryDialect".224 /// Specifies the dialect used by the query Engine that interprets the Query225 /// string.226 /// </summary>227 [Parameter(ValueFromPipelineByPropertyName = true,228 ParameterSetName = CimBaseCommand.QuerySessionSet)]229 [Parameter(ValueFromPipelineByPropertyName = true,230 ParameterSetName = CimBaseCommand.QueryComputerSet)]231 public string QueryDialect232 {233 get234 {235 return querydialect;236 }237 238 set239 {240 querydialect = value;241 base.SetParameter(value, nameQueryDialect);242 }243 }244 245 private string querydialect;246 247 #endregion248 249 #region cmdlet methods250 251 /// <summary>252 /// BeginProcessing method.253 /// </summary>254 protected override void BeginProcessing()255 {256 CimRemoveCimInstance cimRemoveInstance = this.GetOperationAgent() ?? CreateOperationAgent();257 258 this.CmdletOperation = new CmdletOperationRemoveCimInstance(this, cimRemoveInstance);259 this.AtBeginProcess = false;260 }261 262 /// <summary>263 /// ProcessRecord method.264 /// </summary>265 protected override void ProcessRecord()266 {267 base.CheckParameterSet();268 CimRemoveCimInstance cimRemoveInstance = this.GetOperationAgent();269 cimRemoveInstance.RemoveCimInstance(this);270 cimRemoveInstance.ProcessActions(this.CmdletOperation);271 }272 273 /// <summary>274 /// EndProcessing method.275 /// </summary>276 protected override void EndProcessing()277 {278 CimRemoveCimInstance cimRemoveInstance = this.GetOperationAgent();279 cimRemoveInstance?.ProcessRemainActions(this.CmdletOperation);280 }281 282 #endregion283 284 #region helper methods285 286 /// <summary>287 /// <para>288 /// Get <see cref="CimRemoveCimInstance"/> object, which is289 /// used to delegate all Remove-CimInstance operations.290 /// </para>291 /// </summary>292 private CimRemoveCimInstance GetOperationAgent()293 {294 return this.AsyncOperation as CimRemoveCimInstance;295 }296 297 /// <summary>298 /// <para>299 /// Create <see cref="CimRemoveCimInstance"/> object, which is300 /// used to delegate all Remove-CimInstance operations.301 /// </para>302 /// </summary>303 /// <returns></returns>304 private CimRemoveCimInstance CreateOperationAgent()305 {306 CimRemoveCimInstance cimRemoveInstance = new();307 this.AsyncOperation = cimRemoveInstance;308 return cimRemoveInstance;309 }310 311 #endregion312 313 #region private members314 315 #region const string of parameter names316 internal const string nameCimSession = "CimSession";317 internal const string nameComputerName = "ComputerName";318 internal const string nameResourceUri = "ResourceUri";319 internal const string nameNamespace = "Namespace";320 internal const string nameCimInstance = "InputObject";321 internal const string nameQuery = "Query";322 internal const string nameQueryDialect = "QueryDialect";323 #endregion324 325 /// <summary>326 /// Static parameter definition entries.327 /// </summary>328 private static readonly Dictionary<string, HashSet<ParameterDefinitionEntry>> parameters = new()329 {330 {331 nameCimSession, new HashSet<ParameterDefinitionEntry> {332 new ParameterDefinitionEntry(CimBaseCommand.CimInstanceSessionSet, true),333 new ParameterDefinitionEntry(CimBaseCommand.QuerySessionSet, true),334 }335 },336 {337 nameComputerName, new HashSet<ParameterDefinitionEntry> {338 new ParameterDefinitionEntry(CimBaseCommand.QueryComputerSet, false),339 new ParameterDefinitionEntry(CimBaseCommand.CimInstanceComputerSet, false),340 }341 },342 {343 nameNamespace, new HashSet<ParameterDefinitionEntry> {344 new ParameterDefinitionEntry(CimBaseCommand.QuerySessionSet, false),345 new ParameterDefinitionEntry(CimBaseCommand.QueryComputerSet, false),346 }347 },348 {349 nameCimInstance, new HashSet<ParameterDefinitionEntry> {350 new ParameterDefinitionEntry(CimBaseCommand.CimInstanceComputerSet, true),351 new ParameterDefinitionEntry(CimBaseCommand.CimInstanceSessionSet, true),352 }353 },354 {355 nameQuery, new HashSet<ParameterDefinitionEntry> {356 new ParameterDefinitionEntry(CimBaseCommand.QueryComputerSet, true),357 new ParameterDefinitionEntry(CimBaseCommand.QuerySessionSet, true),358 }359 },360 {361 nameQueryDialect, new HashSet<ParameterDefinitionEntry> {362 new ParameterDefinitionEntry(CimBaseCommand.QuerySessionSet, false),363 new ParameterDefinitionEntry(CimBaseCommand.QueryComputerSet, false),364 }365 },366 {367 nameResourceUri, new HashSet<ParameterDefinitionEntry> {368 new ParameterDefinitionEntry(CimBaseCommand.CimInstanceComputerSet, false),369 new ParameterDefinitionEntry(CimBaseCommand.CimInstanceSessionSet, false),370 }371 },372 };373 374 /// <summary>375 /// Static parameter set entries.376 /// </summary>377 private static readonly Dictionary<string, ParameterSetEntry> parameterSets = new()378 {379 { CimBaseCommand.CimInstanceComputerSet, new ParameterSetEntry(1, true) },380 { CimBaseCommand.CimInstanceSessionSet, new ParameterSetEntry(2) },381 { CimBaseCommand.QueryComputerSet, new ParameterSetEntry(1) },382 { CimBaseCommand.QuerySessionSet, new ParameterSetEntry(2) },383 };384 #endregion385 }386}387 