Ejemplo n.º 1
0
        public void ExecuteHook(HookTypeRef hookTypeRef, string arguments = null)
        {
            _output.WriteLine("Executing plugin hook: " + hookTypeRef);
            var hookInstance = Activator.CreateInstance(hookTypeRef.Class) as IHook;

            if (hookInstance != null)
            {
                hookInstance.Execute(_config);
            }
        }
        public void ExecutePreInstall_ExecutesDiscoveredHooks()
        {
            var fakeHook = new HookTypeRef("file.txt", HookType.File);

            _finder.Setup(x => x.DiscoverHooks()).Returns(new Hooks {
                PreInstall = new List <HookTypeRef> {
                    fakeHook
                }
            });

            _ihe.ExecutePreInstall();

            _fakeHookRunner.Verify(x => x.ExecuteHook(fakeHook, null), Times.Once());
        }
Ejemplo n.º 3
0
        public void ExecuteHook(HookTypeRef hookTypeRef, string arguments = null)
        {
            _output.WriteLine("Executing package hookFileName: " + hookTypeRef.FileName);

            var hookFilename = hookTypeRef.FileName;
            var startInfo    = new ProcessStartInfo
            {
                FileName  = hookFilename,
                Arguments = arguments ?? string.Empty,
                RedirectStandardOutput = true,
                UseShellExecute        = false,
            };

            CopyVariablesToEnvironment(startInfo);
            PrefixCommonScriptRuntimes(hookFilename, startInfo);
            StartProcess(hookFilename, startInfo, _output);
        }
Ejemplo n.º 4
0
        public void ExecuteHook(HookTypeRef hookTypeRef, string arguments = null)
        {
            _output.WriteLine("Running {0} hook {1}", hookTypeRef.Type, hookTypeRef.FileName);
            string scriptContent = "";

            using (var file = _fs.File.Open(hookTypeRef.FileName, FileMode.Open, FileAccess.Read))
                using (var reader = new StreamReader(file))
                {
                    scriptContent = reader.ReadToEnd();
                    file.Close();
                }

            scriptContent = ReplaceString(scriptContent, "write-host", "write-output", StringComparison.InvariantCultureIgnoreCase);

            try
            {
                using (var runspace = RunspaceFactory.CreateRunspace())
                {
                    runspace.Open();

                    var runSpaceInvoker = new RunspaceInvoke(runspace);
                    runSpaceInvoker.Invoke("Set-ExecutionPolicy Unrestricted -Scope Process");
                    using (var pipeline = runspace.CreatePipeline())
                    {
                        var script = PowerShell.Create();
                        script.Runspace = runspace;
                        script.AddScript(scriptContent);
                        //var command = new Command(hookTypeRef.FileName, true);
                        //pipeline.Commands.Add(command);
                        script.AddParameter("Environment", _instanceConfiguration.Environment);
                        script.AddParameter("InstallationRoot", _installationRoot.Path);

                        var results = script.Invoke();
                        foreach (var result in results)
                        {
                            _output.WriteLine(result);
                        }

                        if (pipeline.PipelineStateInfo.State != PipelineState.Completed)
                        {
                            _output.WriteLine("{0}", pipeline.PipelineStateInfo.Reason);
                        }

                        if (pipeline.Error.Count > 0)
                        {
                            //iterate over Error PipeLine until end
                            while (!pipeline.Error.EndOfPipeline)
                            {
                                //read one PSObject off the pipeline
                                var value = pipeline.Error.Read() as PSObject;
                                if (value != null)
                                {
                                    //get the ErrorRecord
                                    var r = value.BaseObject as ErrorRecord;
                                    if (r != null)
                                    {
                                        _output.WriteLine(r.InvocationInfo.MyCommand.Name + " : " +
                                                          r.Exception.Message);
                                        _output.WriteLine(r.InvocationInfo.PositionMessage);
                                        _output.WriteLine("+ CategoryInfo: {0}", r.CategoryInfo);
                                        _output.WriteLine("+ FullyQualifiedErrorId: {0}", r.FullyQualifiedErrorId);
                                    }
                                }
                            }
                        }
                    }
                    runspace.Close();
                }
            }
            catch (Exception ex)
            {
                _output.WriteLine(ex.Message);
                _output.WriteLine(ex.StackTrace);
            }
        }
Ejemplo n.º 5
0
 public bool SupportsHook(HookTypeRef hookTypeRef)
 {
     return(hookTypeRef.Type == HookType.File &&
            _fs.Path.GetExtension(hookTypeRef.FileName) == ".ps1");
 }
Ejemplo n.º 6
0
 public bool SupportsHook(HookTypeRef hookTypeRef)
 {
     return(hookTypeRef.Type == HookType.File &&
            ExecutableMap.ContainsKey(_fs.Path.GetExtension(hookTypeRef.FileName).Substring(1)));
 }
Ejemplo n.º 7
0
 public bool SupportsHook(HookTypeRef hookTypeRef)
 {
     return(hookTypeRef.Type == HookType.Class);
 }