Exemple #1
0
        protected static ICollection <PSObject> ExecuteCmdlet(string cmdlet, bool isNeedDC, PSParameters parms)
        {
            if (isNeedDC)
            {
                //parms.Add(new PSParameter("DomainController", PreferDC));
            }
            if (cmdlet == null)
            {
                throw new ArgumentNullException("cmdlet");
            }
            if (cmdlet.Length == 0)
            {
                throw new ArgumentException("cmdlet length is zero", "cmdlet");
            }

            Command item = new Command(cmdlet);

            foreach (PSParameter parameter in parms)
            {
                if (parameter.Value == null)
                {
                    item.Parameters.Add(parameter.Name);
                }
                else
                {
                    item.Parameters.Add(parameter.Name, parameter.Value);
                }
            }

            ICollection <PSObject> is2 = null;
            Pipeline      pipeline     = null;
            List <object> errorList    = new List <object>();

            try
            {
                lock (sync)
                {
                    if (_runspace.RunspaceStateInfo.State == RunspaceState.Broken)
                    {
                        _runspace.Close();
                        ReOpen();
                    }

                    SubmitSecurity subSecurity = new SubmitSecurity();
                    if (subSecurity.impersonateValidUser(DomainAdmin, Domain, DomainAdminPass))
                    {
                        pipeline = _runspace.CreatePipeline();
                        using (Pipeline pipeline2 = pipeline)
                        {
                            pipeline.Commands.Add(item);
                            is2 = pipeline.Invoke();

                            if (pipeline.Error != null && pipeline.Error.Count > 0)
                            {
                                foreach (object item1 in pipeline.Error.ReadToEnd())
                                {
                                    errorList.Add(item1);
                                    string errorMessage = string.Format("Invoke error: {0}", item1);
                                    Log4netHelper.Error(errorMessage);
                                }
                            }
                        }
                    }
                }
            }
            finally
            {
                pipeline = null;
            }
            return(is2);
        }