Team Ai
Datasetpublic

MegaBites-AI/Windows-powershell

sourceHugging Facemitupdated 6mo agoView on Hugging Face
0likes308downloads
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    /// This cmdlet enables the user to invoke a static method on a CIM class using16    /// the arguments passed as a list of name value pair dictionary.17    /// </summary>18    [Alias("icim")]19    [Cmdlet(20        "Invoke",21        "CimMethod",22        SupportsShouldProcess = true,23        DefaultParameterSetName = CimBaseCommand.ClassNameComputerSet,24        HelpUri = "https://go.microsoft.com/fwlink/?LinkId=227965")]25    public class InvokeCimMethodCommand : CimBaseCommand26    {27        #region constructor28 29        /// <summary>30        /// Initializes a new instance of the <see cref="InvokeCimMethodCommand"/> class.31        /// </summary>32        public InvokeCimMethodCommand()33            : base(parameters, parameterSets)34        {35            DebugHelper.WriteLogEx();36        }37 38        #endregion39 40        #region parameters41 42        /// <summary>43        /// The following is the definition of the input parameter "ClassName".44        /// Specifies the Class Name, on which to invoke static method.45        /// </summary>46        [Parameter(Mandatory = true,47                   Position = 0,48                   ValueFromPipelineByPropertyName = true,49                   ParameterSetName = CimBaseCommand.ClassNameComputerSet)]50        [Parameter(Mandatory = true,51                   Position = 0,52                   ValueFromPipelineByPropertyName = true,53                   ParameterSetName = CimBaseCommand.ClassNameSessionSet)]54        [Alias("Class")]55        public string ClassName56        {57            get58            {59                return className;60            }61 62            set63            {64                className = value;65                base.SetParameter(value, nameClassName);66            }67        }68 69        private string className;70 71        /// <summary>72        /// <para>73        /// The following is the definition of the input parameter "ResourceUri".74        /// Define the Resource Uri for which the instances are retrieved.75        /// </para>76        /// </summary>77        [Parameter(ValueFromPipelineByPropertyName = true,78                   ParameterSetName = CimBaseCommand.CimInstanceComputerSet)]79        [Parameter(ValueFromPipelineByPropertyName = true,80                   ParameterSetName = CimBaseCommand.CimInstanceSessionSet)]81        [Parameter(Mandatory = true,82                   ValueFromPipelineByPropertyName = true,83                   ParameterSetName = CimBaseCommand.ResourceUriComputerSet)]84        [Parameter(Mandatory = true,85                   ValueFromPipelineByPropertyName = true,86                   ParameterSetName = CimBaseCommand.ResourceUriSessionSet)]87        public Uri ResourceUri88        {89            get90            {91                return resourceUri;92            }93 94            set95            {96                this.resourceUri = value;97                base.SetParameter(value, nameResourceUri);98            }99        }100 101        private Uri resourceUri;102 103        /// <summary>104        /// The following is the definition of the input parameter "CimClass".105        /// Specifies the <see cref="CimClass"/> object, on which to invoke static method.106        /// </summary>107        [Parameter(Mandatory = true,108            Position = 0,109            ValueFromPipeline = true,110            ParameterSetName = CimClassComputerSet)]111        [Parameter(Mandatory = true,112            Position = 0,113            ValueFromPipeline = true,114            ParameterSetName = CimClassSessionSet)]115        public CimClass CimClass116        {117            get118            {119                return cimClass;120            }121 122            set123            {124                cimClass = value;125                base.SetParameter(value, nameCimClass);126            }127        }128 129        private CimClass cimClass;130 131        /// <summary>132        /// The following is the definition of the input parameter "Query".133        /// Specifies the <see cref="CimClass"/> object, on which to invoke static method.134        /// </summary>135        [Parameter(Mandatory = true,136                   ValueFromPipelineByPropertyName = true,137                   ParameterSetName = CimBaseCommand.QueryComputerSet)]138        [Parameter(Mandatory = true,139                   ValueFromPipelineByPropertyName = true,140                   ParameterSetName = CimBaseCommand.QuerySessionSet)]141        public string Query142        {143            get144            {145                return query;146            }147 148            set149            {150                query = value;151                base.SetParameter(value, nameQuery);152            }153        }154 155        private string query;156 157        /// <summary>158        /// <para>159        /// The following is the definition of the input parameter "QueryDialect".160        /// Specifies the dialect used by the query Engine that interprets the Query161        /// string.162        /// </para>163        /// </summary>164        [Parameter(ValueFromPipelineByPropertyName = true,165                   ParameterSetName = CimBaseCommand.QueryComputerSet)]166        [Parameter(ValueFromPipelineByPropertyName = true,167                   ParameterSetName = CimBaseCommand.QuerySessionSet)]168        public string QueryDialect169        {170            get171            {172                return queryDialect;173            }174 175            set176            {177                queryDialect = value;178                base.SetParameter(value, nameQueryDialect);179            }180        }181 182        private string queryDialect;183 184        /// <summary>185        /// The following is the definition of the input parameter "InputObject".186        /// Takes a CimInstance object retrieved by a Get-CimInstance call.187        /// Invoke the method against the given instance.188        /// </summary>189        [Parameter(Mandatory = true,190                   Position = 0,191                   ValueFromPipeline = true,192                   ParameterSetName = CimBaseCommand.CimInstanceComputerSet)]193        [Parameter(Mandatory = true,194                   Position = 0,195                   ValueFromPipeline = true,196                   ParameterSetName = CimBaseCommand.CimInstanceSessionSet)]197        [Alias(CimBaseCommand.AliasCimInstance)]198        public CimInstance InputObject199        {200            get201            {202                return CimInstance;203            }204 205            set206            {207                CimInstance = value;208                base.SetParameter(value, nameCimInstance);209            }210        }211 212        /// <summary>213        /// Property for internal usage purpose.214        /// </summary>215        internal CimInstance CimInstance { get; private set; }216 217        /// <summary>218        /// <para>The following is the definition of the input parameter "ComputerName".219        /// Provides the name of the computer from which to invoke the method. The220        /// ComputerName is used to create a temporary CimSession with default parameter221        /// values, which is then used to retrieve the instances.222        /// </para>223        /// <para>224        /// If no ComputerName is specified the default value is "localhost"225        /// </para>226        /// </summary>227        [Alias(AliasCN, AliasServerName)]228        [Parameter(229            ValueFromPipelineByPropertyName = true,230            ParameterSetName = CimBaseCommand.ClassNameComputerSet)]231        [Parameter(232            ValueFromPipelineByPropertyName = true,233            ParameterSetName = CimBaseCommand.QueryComputerSet)]234        [Parameter(235            ParameterSetName = CimBaseCommand.CimInstanceComputerSet)]236        [Parameter(237            ValueFromPipelineByPropertyName = true,238            ParameterSetName = CimBaseCommand.CimClassComputerSet)]239        [Parameter(240            ValueFromPipelineByPropertyName = true,241            ParameterSetName = CimBaseCommand.ResourceUriComputerSet)]242        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]243        public string[] ComputerName244        {245            get246            {247                return computerName;248            }249 250            set251            {252                DebugHelper.WriteLogEx();253                computerName = value;254                base.SetParameter(value, nameComputerName);255            }256        }257 258        private string[] computerName;259 260        /// <summary>261        /// <para>262        /// The following is the definition of the input parameter "CimSession".263        /// Identifies the CimSession which is to be used to retrieve the instances.264        /// </para>265        /// </summary>266        [Parameter(267            Mandatory = true,268            ValueFromPipeline = true,269            ParameterSetName = CimBaseCommand.CimInstanceSessionSet)]270        [Parameter(271            Mandatory = true,272            ValueFromPipeline = true,273            ParameterSetName = CimBaseCommand.QuerySessionSet)]274        [Parameter(275            Mandatory = true,276            ValueFromPipeline = true,277            ParameterSetName = CimBaseCommand.ClassNameSessionSet)]278        [Parameter(279            Mandatory = true,280            ValueFromPipeline = true,281            ParameterSetName = CimClassSessionSet)]282        [Parameter(Mandatory = true,283                   ValueFromPipelineByPropertyName = true,284                   ParameterSetName = CimBaseCommand.ResourceUriSessionSet)]285        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]286        public CimSession[] CimSession287        {288            get289            {290                return cimSession;291            }292 293            set294            {295                cimSession = value;296                base.SetParameter(value, nameCimSession);297            }298        }299 300        private CimSession[] cimSession;301 302        /// <summary>303        /// The following is the definition of the input parameter "Arguments".304        /// Specifies the parameter arguments for the static method using a name value305        /// pair.306        /// </summary>307        [Parameter(Position = 1, ValueFromPipelineByPropertyName = true)]308        [SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]309        public IDictionary Arguments { get; set; }310 311        /// <summary>312        /// The following is the definition of the input parameter "MethodName".313        /// Name of the Static Method to use.314        /// </summary>315        [Parameter(Mandatory = true,316                   Position = 2,317                   ValueFromPipelineByPropertyName = true)]318        [Alias("Name")]319        public string MethodName320        {321            get322            {323                return methodName;324            }325 326            set327            {328                methodName = value;329                base.SetParameter(value, nameMethodName);330            }331        }332 333        private string methodName;334 335        /// <summary>336        /// The following is the definition of the input parameter "Namespace".337        /// Specifies the NameSpace in which the class or instance lives under.338        /// </summary>339        [Parameter(ValueFromPipelineByPropertyName = true,340            ParameterSetName = CimBaseCommand.ClassNameComputerSet)]341        [Parameter(ValueFromPipelineByPropertyName = true,342            ParameterSetName = CimBaseCommand.ClassNameSessionSet)]343        [Parameter(ValueFromPipelineByPropertyName = true,344            ParameterSetName = CimBaseCommand.QueryComputerSet)]345        [Parameter(ValueFromPipelineByPropertyName = true,346            ParameterSetName = CimBaseCommand.QuerySessionSet)]347        [Parameter(348            ValueFromPipelineByPropertyName = true,349            ParameterSetName = CimBaseCommand.ResourceUriComputerSet)]350        [Parameter(351            ValueFromPipelineByPropertyName = true,352            ParameterSetName = CimBaseCommand.ResourceUriSessionSet)]353        public string Namespace354        {355            get356            {357                return nameSpace;358            }359 360            set361            {362                nameSpace = value;363                base.SetParameter(value, nameNamespace);364            }365        }366 367        private string nameSpace;368 369        /// <summary>370        /// The following is the definition of the input parameter "OperationTimeoutSec".371        /// Enables the user to specify the operation timeout in Seconds. This value372        /// overwrites the value specified by the CimSession Operation timeout.373        /// </summary>374        [Alias(AliasOT)]375        [Parameter]376        public uint OperationTimeoutSec { get; set; }377 378        #endregion379 380        #region cmdlet methods381 382        /// <summary>383        /// BeginProcessing method.384        /// </summary>385        protected override void BeginProcessing()386        {387            CimInvokeCimMethod cimInvokeMethod = this.GetOperationAgent() ?? CreateOperationAgent();388 389            this.CmdletOperation = new CmdletOperationInvokeCimMethod(this, cimInvokeMethod);390            this.AtBeginProcess = false;391        }392 393        /// <summary>394        /// ProcessRecord method.395        /// </summary>396        protected override void ProcessRecord()397        {398            base.CheckParameterSet();399            this.CheckArgument();400            CimInvokeCimMethod cimInvokeMethod = this.GetOperationAgent();401            cimInvokeMethod.InvokeCimMethod(this);402            cimInvokeMethod.ProcessActions(this.CmdletOperation);403        }404 405        /// <summary>406        /// EndProcessing method.407        /// </summary>408        protected override void EndProcessing()409        {410            CimInvokeCimMethod cimInvokeMethod = this.GetOperationAgent();411            cimInvokeMethod?.ProcessRemainActions(this.CmdletOperation);412        }413 414        #endregion415 416        #region helper methods417 418        /// <summary>419        /// <para>420        /// Get <see cref="CimInvokeCimMethod"/> object, which is421        /// used to delegate all Invoke-CimMethod operations.422        /// </para>423        /// </summary>424        private CimInvokeCimMethod GetOperationAgent()425        {426            return this.AsyncOperation as CimInvokeCimMethod;427        }428 429        /// <summary>430        /// <para>431        /// Create <see cref="CimInvokeCimMethod"/> object, which is432        /// used to delegate all Invoke-CimMethod operations.433        /// </para>434        /// </summary>435        /// <returns></returns>436        private CimInvokeCimMethod CreateOperationAgent()437        {438            CimInvokeCimMethod cimInvokeMethod = new();439            this.AsyncOperation = cimInvokeMethod;440            return cimInvokeMethod;441        }442 443        /// <summary>444        /// Check argument value.445        /// </summary>446        private void CheckArgument()447        {448            switch (this.ParameterSetName)449            {450                case CimBaseCommand.ClassNameComputerSet:451                case CimBaseCommand.ClassNameSessionSet:452                    // validate the classname453                    this.className = ValidationHelper.ValidateArgumentIsValidName(nameClassName, this.className);454                    break;455                default:456                    break;457            }458        }459        #endregion460 461        #region private members462 463        #region const string of parameter names464        internal const string nameClassName = "ClassName";465        internal const string nameCimClass = "CimClass";466        internal const string nameQuery = "Query";467        internal const string nameResourceUri = "ResourceUri";468        internal const string nameQueryDialect = "QueryDialect";469        internal const string nameCimInstance = "InputObject";470        internal const string nameComputerName = "ComputerName";471        internal const string nameCimSession = "CimSession";472        internal const string nameArguments = "Arguments";473        internal const string nameMethodName = "MethodName";474        internal const string nameNamespace = "Namespace";475        #endregion476 477        /// <summary>478        /// Static parameter definition entries.479        /// </summary>480        private static readonly Dictionary<string, HashSet<ParameterDefinitionEntry>> parameters = new()481        {482            {483                nameClassName, new HashSet<ParameterDefinitionEntry> {484                                    new ParameterDefinitionEntry(CimBaseCommand.ClassNameComputerSet, true),485                                    new ParameterDefinitionEntry(CimBaseCommand.ClassNameSessionSet, true),486                                 }487            },488            {489                nameCimClass, new HashSet<ParameterDefinitionEntry> {490                                    new ParameterDefinitionEntry(CimBaseCommand.CimClassComputerSet, true),491                                    new ParameterDefinitionEntry(CimBaseCommand.CimClassSessionSet, true),492                                 }493            },494            {495                nameQuery, new HashSet<ParameterDefinitionEntry> {496                                    new ParameterDefinitionEntry(CimBaseCommand.QueryComputerSet, true),497                                    new ParameterDefinitionEntry(CimBaseCommand.QuerySessionSet, true),498                                 }499            },500            {501                nameQueryDialect, new HashSet<ParameterDefinitionEntry> {502                                    new ParameterDefinitionEntry(CimBaseCommand.QueryComputerSet, false),503                                    new ParameterDefinitionEntry(CimBaseCommand.QuerySessionSet, false),504                                 }505            },506            {507                nameCimInstance, new HashSet<ParameterDefinitionEntry> {508                                    new ParameterDefinitionEntry(CimBaseCommand.CimInstanceComputerSet, true),509                                    new ParameterDefinitionEntry(CimBaseCommand.CimInstanceSessionSet, true),510                                 }511            },512            {513                nameComputerName, new HashSet<ParameterDefinitionEntry> {514                                    new ParameterDefinitionEntry(CimBaseCommand.ClassNameComputerSet, false),515                                    new ParameterDefinitionEntry(CimBaseCommand.QueryComputerSet, false),516                                    new ParameterDefinitionEntry(CimBaseCommand.CimInstanceComputerSet, false),517                                    new ParameterDefinitionEntry(CimBaseCommand.CimClassComputerSet, false),518                                    new ParameterDefinitionEntry(CimBaseCommand.ResourceUriComputerSet, false),519                                 }520            },521            {522                nameCimSession, new HashSet<ParameterDefinitionEntry> {523                                    new ParameterDefinitionEntry(CimBaseCommand.CimInstanceSessionSet, true),524                                    new ParameterDefinitionEntry(CimBaseCommand.QuerySessionSet, true),525                                    new ParameterDefinitionEntry(CimBaseCommand.ClassNameSessionSet, true),526                                    new ParameterDefinitionEntry(CimBaseCommand.CimClassSessionSet, true),527                                    new ParameterDefinitionEntry(CimBaseCommand.ResourceUriSessionSet, true),528                                 }529            },530            {531                nameMethodName, new HashSet<ParameterDefinitionEntry> {532                                    new ParameterDefinitionEntry(CimBaseCommand.ClassNameComputerSet, true),533                                    new ParameterDefinitionEntry(CimBaseCommand.ClassNameSessionSet, true),534                                    new ParameterDefinitionEntry(CimBaseCommand.QueryComputerSet, true),535                                    new ParameterDefinitionEntry(CimBaseCommand.QuerySessionSet, true),536                                    new ParameterDefinitionEntry(CimBaseCommand.CimInstanceComputerSet, true),537                                    new ParameterDefinitionEntry(CimBaseCommand.CimInstanceSessionSet, true),538                                    new ParameterDefinitionEntry(CimBaseCommand.CimClassComputerSet, true),539                                    new ParameterDefinitionEntry(CimBaseCommand.CimClassSessionSet, true),540                                    new ParameterDefinitionEntry(CimBaseCommand.ResourceUriSessionSet, true),541                                    new ParameterDefinitionEntry(CimBaseCommand.ResourceUriComputerSet, true),542                                 }543            },544            {545                nameNamespace, new HashSet<ParameterDefinitionEntry> {546                                    new ParameterDefinitionEntry(CimBaseCommand.ClassNameComputerSet, false),547                                    new ParameterDefinitionEntry(CimBaseCommand.ClassNameSessionSet, false),548                                    new ParameterDefinitionEntry(CimBaseCommand.QueryComputerSet, false),549                                    new ParameterDefinitionEntry(CimBaseCommand.QuerySessionSet, false),550                                    new ParameterDefinitionEntry(CimBaseCommand.ResourceUriSessionSet, false),551                                    new ParameterDefinitionEntry(CimBaseCommand.ResourceUriComputerSet, false),552                                 }553            },554            {555                nameResourceUri, new HashSet<ParameterDefinitionEntry> {556                                    new ParameterDefinitionEntry(CimBaseCommand.CimInstanceComputerSet, false),557                                    new ParameterDefinitionEntry(CimBaseCommand.CimInstanceSessionSet, false),558                                    new ParameterDefinitionEntry(CimBaseCommand.ResourceUriSessionSet, true),559                                    new ParameterDefinitionEntry(CimBaseCommand.ResourceUriComputerSet, true),560                                 }561            },562        };563 564        /// <summary>565        /// Static parameter set entries.566        /// </summary>567        private static readonly Dictionary<string, ParameterSetEntry> parameterSets = new()568        {569            {   CimBaseCommand.ClassNameComputerSet, new ParameterSetEntry(2, true)     },570            {   CimBaseCommand.ResourceUriSessionSet, new ParameterSetEntry(3)     },571            {   CimBaseCommand.ResourceUriComputerSet, new ParameterSetEntry(2)     },572            {   CimBaseCommand.ClassNameSessionSet, new ParameterSetEntry(3)     },573            {   CimBaseCommand.QueryComputerSet, new ParameterSetEntry(2)     },574            {   CimBaseCommand.QuerySessionSet, new ParameterSetEntry(3)     },575            {   CimBaseCommand.CimInstanceComputerSet, new ParameterSetEntry(2)     },576            {   CimBaseCommand.CimInstanceSessionSet, new ParameterSetEntry(3)     },577            {   CimBaseCommand.CimClassComputerSet, new ParameterSetEntry(2)     },578            {   CimBaseCommand.CimClassSessionSet, new ParameterSetEntry(3)     },579        };580        #endregion581    }582}583