private async Task <ScriptResult> ExecutePowerShell(GrimoireScriptBlock scriptBlock, IList <Input> inputs) { ScriptResult result = null; string script = await business.ReadScript(scriptBlock); if (inputs != null && inputs.Any()) { foreach (var input in inputs) { script = script.Replace(input.Key, input.Value); } } using (PowerShell ps = PowerShell.Create()) { PSDataCollection <PSObject> outputCollection = new PSDataCollection <PSObject>(); ps.AddScript("Set-ExecutionPolicy -Scope Process Unrestricted"); ps.AddScript(script); IAsyncResult execResult = await Task.Run(() => ps.BeginInvoke <PSObject, PSObject>(null, outputCollection)); WaitExecution(scriptBlock.TimeOut, execResult); result = GetResult(scriptBlock, ps); } return(result); }
public string getScriptFullPath(GrimoireScriptBlock scriptBlock) { return(Path.GetFullPath( Path.Combine(configurationService.ScriptsDirectory, scriptBlock.Name, scriptBlock.Script))); }
private ResultType GetResultStatus(GrimoireScriptBlock scriptBlock, PowerShell ps, string rawResult) { ResultType result = ResultType.None; if (String.IsNullOrEmpty(scriptBlock.SuccessPatern) && ps.Streams.Error.Any() && scriptBlock.AlertLevel != AlertLevel.Silent) { result = scriptBlock.AlertLevel == AlertLevel.Error ? ResultType.Error : ResultType.Warning; } else if (String.IsNullOrEmpty(scriptBlock.SuccessPatern) && ps.Streams.Warning.Any() && scriptBlock.AlertLevel != AlertLevel.Silent) { result = ResultType.Warning; } else { if (Regex.IsMatch(rawResult, scriptBlock.SuccessPatern)) { result = ResultType.Success; } else if (scriptBlock.AlertLevel != AlertLevel.Silent) { result = scriptBlock.AlertLevel == AlertLevel.Error ? ResultType.Error : ResultType.Warning; } } return(result); }
public void VaultExecutionTest() { GrimoireScriptBlock script = TestHelper.GetSingleTestScript(); script.ExtractResult = new PatternRange() { Start = "", End = "" }; business.SaveScriptBlock(script).Wait(); GrimoireScriptBlock result = TestHelper.GetCreatedScript(config, "Test_Script.json"); result.Should().NotBeNull(); savedVault.Itens = new List <VaultItem>(); savedVault.Itens.Add(new VaultItem(true, "Key 1", "value 1")); savedVault.Itens.Add(new VaultItem(true, "Key 2", "value 2")); savedVault.Itens.Add(new VaultItem(true, "Key 3", "value 3")); business.LoadVault(); business.LoadScriptRunners().Wait(); ScriptResult scriptResult = business.ScriptRunners.First().Run().Result; scriptResult.Should().NotBeNull(); scriptResult.ResultType.Should().Be(ResultType.Success); scriptResult.FilteredResult.Should() .Contain("Single line multiple keys: value 1 - value 2") .And .Contain("Single key: value 3"); savedVault.Itens = new List <VaultItem>(); }
public ScriptEditView(int X) : base("New Script") { ScriptBlock = new GrimoireScriptBlock() { Name = "", Description = "", ExecutionMode = ExecutionMode.Manual, Interval = 0, AlertLevel = AlertLevel.Error, ScriptType = ScriptType.PowerShell, SuccessPatern = "", TimeOut = 10, Script = "", Group = "", ExtractResult = new PatternRange() { Start = "", End = "" } }; this.ColorScheme = Styles.DetailsScheme; this.X = X; Y = 0; Height = Dim.Fill(); Width = Dim.Fill(); Draw(); }
private async Task InitializeScriptBlock() { try { if (!string.IsNullOrEmpty(ScriptName)) { ScriptBlock = await Business.GetScriptBlock(ScriptName); IsEdit = true; } else { ScriptBlock = new GrimoireScriptBlock() { Name = "", Description = "", AlertLevel = AlertLevel.Error, ExtractResult = new PatternRange() { Start = "", End = "" }, Group = "", Interval = 30, Order = 0, OriginalScriptFile = null, AdditionalFiles = new List <AdditionalFile>(), Script = "", ScriptBlocks = null, ScriptType = ScriptType.PowerShell, SuccessPatern = "", TimeOut = 10, ExecutionMode = ExecutionMode.Manual }; IsEdit = false; } if (ScriptBlock != null) { ScriptTypeHolder = ScriptBlock.ScriptType.ToString(); AlertLevelHolder = ScriptBlock.AlertLevel.ToString(); switch (ScriptBlock.ExecutionMode) { case ExecutionMode.RunOnStart: ExecutionModeHolder = "Run on start"; break; case ExecutionMode.Interval: ExecutionModeHolder = "Interval"; break; default: ExecutionModeHolder = "Manual"; break; } } } catch (Exception ex) { await Task.Run(() => Error?.Invoke("Error loading the script.", ex)); } }
private ScriptResult GetResult(GrimoireScriptBlock scriptBlock, PowerShell ps) { ScriptResult result = MountResults(ps); result.ResultType = GetResultStatus(scriptBlock, ps, result.RawResult); result.FilteredResult = ExtractFilteredResult(scriptBlock, result.RawResult); return(result); }
public void SaveScriptBlockTest() { GrimoireScriptBlock script = TestHelper.GetSingleTestScript(); business.SaveScriptBlock(script).Wait(); GrimoireScriptBlock result = TestHelper.GetCreatedScript(config, "Test_Script.json"); result.Should().NotBeNull(); }
private void EndEdit(GrimoireScriptBlock scriptBlock) { LoadScripts(); IGrimoireRunner editedScript = business.ScriptRunners .FirstOrDefault(item => item.ScriptBlock.Name.Equals(scriptBlock.Name, StringComparison.InvariantCultureIgnoreCase)); SelectScript(editedScript); }
public GrimoireRunner(GrimoireScriptBlock scriptBlock, IGrimoireBusiness business) { Selected = false; Paused = false; this.business = business; ScriptBlock = scriptBlock; Task.Run(() => TimerRun()); CheckRunOnStart(); }
private string ExtractFilteredResult(GrimoireScriptBlock scriptBlock, string rawResult) { string result = rawResult; if (scriptBlock.ExtractResult != null && !String.IsNullOrEmpty(scriptBlock.ExtractResult.Start) && !String.IsNullOrEmpty(scriptBlock.ExtractResult.End)) { result = FindResultMatch(scriptBlock, rawResult); } return(result); }
public void SaveScriptTest() { GrimoireScriptBlock script = TestHelper.GetSingleTestScript(); service.SaveScriptBlocks(script); GrimoireScriptBlock result = TestHelper.GetCreatedScript(config, "Test_Script.json"); result.Should().NotBeNull(); TestHelper.CheckCreatedScript(config, result.Name, result.Script).Should().BeTrue(); }
public ScriptEditView(IGrimoireRunner scriptBlockRunner, int X) : base($"Edit - {scriptBlockRunner.ScriptBlock.Description}") { ScriptBlock = scriptBlockRunner.ScriptBlock; this.ColorScheme = Styles.DetailsScheme; this.X = X; Y = 0; Height = Dim.Fill(); Width = Dim.Fill(); Draw(); }
private async Task <ScriptResult> ExecuteScript(GrimoireScriptBlock scriptBlock, IList <Input> inputs) { try { return(await RunScriptBlock(scriptBlock, inputs)); } catch (Exception ex) { return(await CreateErrorResult(scriptBlock, ex)); } }
public void SaveScriptBlocks(GrimoireScriptBlock scriptBlock) { scriptBlock.Name = CleanResourceName(scriptBlock.Name); string resourcePath = Path.Combine(configurationService.ScriptsDirectory, $"{scriptBlock.Name}.json"); string resourceFolderPath = Path.Combine(configurationService.ScriptsDirectory, scriptBlock.Name); string scriptPath = Path.Combine(resourceFolderPath, scriptBlock.Script); EnsurePath(resourceFolderPath); SaveResource(scriptBlock, resourcePath); SaveScriptFile(scriptBlock, scriptPath); SaveAdditionalFiles(scriptBlock, resourceFolderPath); }
private string FindResultMatch(GrimoireScriptBlock scriptBlock, string rawResult) { string result; Match match = Regex.Match(rawResult, scriptBlock.ExtractResult.Start); int startIndex = match.Index + match.Length; match = Regex.Match(rawResult, scriptBlock.ExtractResult.End); int endIndex = match.Index; result = rawResult.Substring(startIndex, endIndex - startIndex); return(result); }
private void SaveScriptFile(GrimoireScriptBlock scriptBlock, string scriptPath) { if (scriptBlock.OriginalScriptFile != null) { using (FileStream file = File.Create(scriptPath)) { scriptBlock.OriginalScriptFile.Seek(0, SeekOrigin.Begin); scriptBlock.OriginalScriptFile.CopyTo(file); file.Close(); } } }
public void RemoveScriptTest() { GrimoireScriptBlock script = TestHelper.GetSingleTestScript(); service.SaveScriptBlocks(script); GrimoireScriptBlock inserted = TestHelper.GetCreatedScript(config, "Test_Script.json"); inserted.Should().NotBeNull(); service.RemoveScriptBlock(inserted.Name); GrimoireScriptBlock result = TestHelper.GetCreatedScript(config, "Test_Script.json"); result.Should().BeNull(); }
private async Task <ScriptResult> CreateErrorResult(GrimoireScriptBlock scriptBlock, Exception ex) { ScriptResult result = new ScriptResult() { ResultType = ResultType.Error, Errors = ex.Message }; scriptBlock.LastResult = result; await business.SaveScriptBlock(scriptBlock); return(scriptBlock.LastResult); }
public static GrimoireScriptBlock GetCreatedScript(IConfigurationService config, string scriptFileName) { GrimoireScriptBlock result = null; if (File.Exists(Path.Combine(config.ScriptsDirectory, scriptFileName))) { using (StreamReader reader = new StreamReader(Path.Combine(config.ScriptsDirectory, scriptFileName))) { string file = reader.ReadToEnd(); reader.Close(); result = JsonSerializer.Deserialize <GrimoireScriptBlock>(file); } } return(result); }
public void ScriptExecutionDefaultWarningTest() { GrimoireScriptBlock script = TestHelper.GetDefaultWarningTestScript(); business.SaveScriptBlock(script).Wait(); GrimoireScriptBlock result = TestHelper.GetCreatedScript(config, "Test_Script_Warning.json"); result.Should().NotBeNull(); business.LoadScriptRunners().Wait(); business.LoadVault().Wait(); ScriptResult scriptResult = business.ScriptRunners.First().Run().Result; scriptResult.Should().NotBeNull(); scriptResult.ResultType.Should().Be(ResultType.Warning); }
private void SaveAdditionalFiles(GrimoireScriptBlock scriptBlock, string resourceFolderPath) { if (scriptBlock.AdditionalFiles != null && scriptBlock.AdditionalFiles.Any()) { foreach (var additionalFile in scriptBlock.AdditionalFiles) { string additionalFilePath = Path.Combine(resourceFolderPath, additionalFile.Name); using (FileStream file = File.Create(additionalFilePath)) { additionalFile.File.Seek(0, SeekOrigin.Begin); additionalFile.File.CopyTo(file); file.Close(); } } } }
public void ScriptExecutionSoftErrorTest() { GrimoireScriptBlock script = TestHelper.GetSingleTestScript(); script.AlertLevel = AlertLevel.Error; script.SuccessPatern = "Soft Error"; business.SaveScriptBlock(script).Wait(); GrimoireScriptBlock result = TestHelper.GetCreatedScript(config, "Test_Script.json"); result.Should().NotBeNull(); business.LoadScriptRunners().Wait(); business.LoadVault().Wait(); ScriptResult scriptResult = business.ScriptRunners.First().Run().Result; scriptResult.Should().NotBeNull(); scriptResult.ResultType.Should().Be(ResultType.Error); }
public void VerifyKeysTest() { GrimoireScriptBlock script = TestHelper.GetSingleTestScript(); business.SaveScriptBlock(script).Wait(); GrimoireScriptBlock result = TestHelper.GetCreatedScript(config, "Test_Script.json"); result.Should().NotBeNull(); business.LoadVault(); business.VerifyKeys(script).Wait(); savedVault.Itens.Should().HaveCount(3); savedVault.Itens.Should() .Contain(item => item.Key.Equals("Key 1")) .And .Contain(item => item.Key.Equals("Key 2")) .And .Contain(item => item.Key.Equals("Key 3")); savedVault.Itens = new List <VaultItem>(); }
private async Task <ScriptResult> RunScriptBlock(GrimoireScriptBlock scriptBlock, IList <Input> inputs) { ScriptResult result = null; switch (scriptBlock.ScriptType) { case ScriptType.PowerShell: result = await ExecutePowerShell(scriptBlock, inputs); break; case ScriptType.Python: break; default: break; } scriptBlock.LastResult = result; await business.SaveScriptBlock(scriptBlock); return(result); }
public void ScriptExecutionSuccessTest() { GrimoireScriptBlock script = TestHelper.GetSingleTestScript(); business.SaveScriptBlock(script).Wait(); GrimoireScriptBlock result = TestHelper.GetCreatedScript(config, "Test_Script.json"); result.Should().NotBeNull(); business.LoadScriptRunners().Wait(); business.LoadVault().Wait(); ScriptResult scriptResult = business.ScriptRunners.First().Run().Result; scriptResult.Should().NotBeNull(); scriptResult.ResultType.Should().Be(ResultType.Success); scriptResult.FilteredResult.Should() .Contain("Result 1") .And .Contain("Result 2") .And .Contain("Result 3") .And .Contain("Result 4"); }
private async void Save(GrimoireScriptBlock scriptBlock) { await business.SaveScriptBlock(scriptBlock); await Task.Run(() => EndEdit(scriptBlock)); }