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()); }
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); }
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); } }
public bool SupportsHook(HookTypeRef hookTypeRef) { return(hookTypeRef.Type == HookType.File && _fs.Path.GetExtension(hookTypeRef.FileName) == ".ps1"); }
public bool SupportsHook(HookTypeRef hookTypeRef) { return(hookTypeRef.Type == HookType.File && ExecutableMap.ContainsKey(_fs.Path.GetExtension(hookTypeRef.FileName).Substring(1))); }
public bool SupportsHook(HookTypeRef hookTypeRef) { return(hookTypeRef.Type == HookType.Class); }