public List <string> RunPowershell(FunctionParamChart functionChart, List <Parameter> powershellParams) { var shellResult = new List <string>(); if (powershellParams.Any(x => x.Value == null)) { return(shellResult); } using (Runspace runspace = RunspaceFactory.CreateRunspace(RunspaceConfiguration.Create())) { runspace.Open(); using (RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace)) { try { scriptInvoker.Invoke("Set-ExecutionPolicy -Scope CurrentUser Unrestricted"); using (PowerShell shell = PowerShell.Create()) { shell.AddScript(functionChart.PowershellFileInfo.FullName); string aggParam = string.Empty; foreach (var param in powershellParams) { aggParam += " -" + param.Name + " " + param.Value; } using (var shellProcess = new Process()) { shellProcess.StartInfo = new ProcessStartInfo { FileName = "Powershell.exe", Arguments = functionChart.PowershellFileInfo.FullName + " " + aggParam, UseShellExecute = false, RedirectStandardOutput = true, RedirectStandardError = true, CreateNoWindow = true }; shellProcess.Start(); while (!shellProcess.StandardOutput.EndOfStream) { shellResult.Add(shellProcess.StandardOutput.ReadLine() + Environment.NewLine); } } } } catch (Exception e) { shellResult.Add(e.Message); } finally { scriptInvoker.Invoke("Set-ExecutionPolicy -Scope CurrentUser Restricted"); runspace.Close(); } } } return(shellResult); }
public IChart BuildFromParams(string paramString, FileInfo file) { var functionChart = new FunctionParamChart(); var startIndex = paramString.IndexOf("<#") + 2; var endIndex = paramString.IndexOf("#>") - 3; var specialParams = Regex.Split(paramString.Substring(startIndex, endIndex), "\r\n|\r|\n"); var listOfParams = new List <Parameter>(); for (int i = 0; i < specialParams.Length; i++) { string param = specialParams[i]; if (!string.IsNullOrWhiteSpace(param)) { if (param.Contains(PARAMETER)) { var localParam = new Parameter { Name = param.Replace(PARAMETER, "").TrimStart(' ') }; i++; for ( ; !string.IsNullOrWhiteSpace(specialParams[i]); i++) { localParam.Description += specialParams[i]; } listOfParams.Add(localParam); } } } functionChart.Parameters = listOfParams; var readParams = Dialogs.ExtractPowerShellParameters(functionChart); functionChart = new FunctionParamChart(); foreach (var param in readParams) { functionChart.Parameters.Add(new Parameter { Name = param.Name, Description = param.Description, Value = param.Value }); } functionChart.PowershellFileInfo = file; return(functionChart); }