示例#1
0
        internal IEnumerable <dynamic> ExecuteCommand(string commandOrScript, WSManConnectionInfo connectionInfo,
                                                      PowerShellModulesToLoad modules, RemoteScriptFolders folders, IEnumerable <CommandParameter> parameters = null,
                                                      bool logOutput = true)
        {
            var host = new ConDepPSHost();

            using (var runspace = RunspaceFactory.CreateRunspace(host, connectionInfo))
            {
                runspace.Open();

                var ps = PowerShell.Create();
                ps.Runspace = runspace;

                using (var pipeline =
                           ps.Runspace.CreatePipeline(
                               "set-executionpolicy remotesigned -force; $VerbosePreference = 'continue'; $DebugPreference = 'continue'"))
                {
                    ConfigureConDepModule(pipeline, folders, modules);
                    ConfigureConDepNodeModule(pipeline, folders, modules);
                    ConfigureConDepDotNetLibrary(pipeline, folders, modules);

                    ConfigureCommand(commandOrScript, parameters, pipeline);

                    dynamic result = pipeline.Invoke();

                    if (pipeline.Error.Count > 0)
                    {
                        var errorCollection = new PowerShellErrors();
                        foreach (var exception in pipeline.Error.NonBlockingRead().OfType <ErrorRecord>())
                        {
                            errorCollection.Add(exception.Exception);
                        }
                        throw errorCollection;
                    }

                    if (logOutput && result.Count > 0)
                    {
                        Logger.WithLogSection("Script output:", () =>
                        {
                            foreach (var psObject in result)
                            {
                                if (psObject.ConDepResult == null)
                                {
                                    Logger.Info(psObject.ToString());
                                }
                            }
                        });
                    }

                    return(result);
                }
            }
        }
        internal IEnumerable<dynamic> ExecuteCommand(string commandOrScript, WSManConnectionInfo connectionInfo, PowerShellModulesToLoad modules, RemoteScriptFolders folders, IEnumerable<CommandParameter> parameters = null, bool logOutput = true)
        {
            var host = new ConDepPSHost();
            using (var runspace = RunspaceFactory.CreateRunspace(host, connectionInfo))
            {
                runspace.Open();

                var ps = PowerShell.Create();
                ps.Runspace = runspace;

                using (var pipeline = ps.Runspace.CreatePipeline("set-executionpolicy remotesigned -force; $VerbosePreference = 'continue'; $DebugPreference = 'continue'"))
                {
                    ConfigureConDepModule(pipeline, folders, modules);
                    ConfigureConDepNodeModule(pipeline, folders, modules);
                    ConfigureConDepDotNetLibrary(pipeline, folders, modules);

                    ConfigureCommand(commandOrScript, parameters, pipeline);

                    var result = pipeline.Invoke();

                    if (pipeline.Error.Count > 0)
                    {
                        var errorCollection = new PowerShellErrors();
                        foreach (var exception in pipeline.Error.NonBlockingRead().OfType<ErrorRecord>())
                        {
                            errorCollection.Add(exception.Exception);
                        }
                        throw errorCollection;
                    }

                    if (logOutput && result.Count > 0)
                    {
                        Logger.WithLogSection("Script output", () =>
                        {
                            foreach (var psObject in result)
                            {
                                Logger.Info(psObject.ToString());
                            }
                        });
                    }

                    return result;
                }
            }
        }