Team Ai
Datasetpublic

MegaBites-AI/Windows-powershell

sourceHugging Facemitupdated 6mo agoView on Hugging Face
0likes372downloads
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