private DtoScriptModuleExport GetCondition(int conditionScriptId) { var condition = new ServiceScriptModule().GetModule(conditionScriptId); if (condition == null) { return(null); } var scriptModuleExport = new DtoScriptModuleExport(); scriptModuleExport.ScriptContents = condition.ScriptContents; scriptModuleExport.Description = condition.Description; scriptModuleExport.DisplayName = condition.Name; scriptModuleExport.Arguments = condition.Arguments; scriptModuleExport.Timeout = condition.Timeout; scriptModuleExport.ScriptType = condition.ScriptType; scriptModuleExport.RedirectOutput = condition.RedirectStdOut; scriptModuleExport.RedirectError = condition.RedirectStdError; scriptModuleExport.AddToInventory = condition.AddInventoryCollection; scriptModuleExport.WorkingDirectory = condition.WorkingDirectory; scriptModuleExport.IsCondition = condition.IsCondition; scriptModuleExport.SuccessCodes = condition.SuccessCodes; scriptModuleExport.Guid = condition.Guid; return(scriptModuleExport); }
public ScriptModuleController() { _scriptModuleServices = new ServiceScriptModule(); _auditLogService = new ServiceAuditLog(); _userId = Convert.ToInt32(((ClaimsIdentity)User.Identity).Claims.Where(c => c.Type == "user_id") .Select(c => c.Value).SingleOrDefault()); }
private void WuModule(EntityPolicyModules policyModule) { var clientWuModule = new DtoClientWuModule(); var wuModule = new ServiceWuModule().GetModule(policyModule.ModuleId); clientWuModule.Guid = wuModule.Guid; clientWuModule.DisplayName = wuModule.Name; clientWuModule.Arguments = wuModule.AdditionalArguments; clientWuModule.Order = policyModule.Order; clientWuModule.Timeout = wuModule.Timeout; clientWuModule.RedirectOutput = wuModule.RedirectStdOut; clientWuModule.RedirectError = wuModule.RedirectStdError; foreach (var successCode in wuModule.SuccessCodes.Split(',')) { clientWuModule.SuccessCodes.Add(successCode); } if (policyModule.ConditionId != -1) { var conditionScript = new ServiceScriptModule().GetModule(policyModule.ConditionId); if (conditionScript != null) { clientWuModule.ConditionFailedAction = policyModule.ConditionFailedAction; clientWuModule.ConditionNextOrder = policyModule.ConditionNextModule; clientWuModule.Condition = new DtoClientModuleCondition(); clientWuModule.Condition.Arguments = conditionScript.Arguments; clientWuModule.Condition.DisplayName = conditionScript.Name; clientWuModule.Condition.Guid = conditionScript.Guid; clientWuModule.Condition.RedirectError = conditionScript.RedirectStdError; clientWuModule.Condition.RedirectOutput = conditionScript.RedirectStdOut; if (conditionScript.ImpersonationId != -1) { var scriptImpersonationGuid = new ServiceImpersonationAccount().GetGuid(conditionScript.ImpersonationId); if (!string.IsNullOrEmpty(scriptImpersonationGuid)) { clientWuModule.Condition.RunAs = scriptImpersonationGuid; } } clientWuModule.Condition.ScriptType = conditionScript.ScriptType; foreach (var successCode in conditionScript.SuccessCodes.Split(',')) { clientWuModule.Condition.SuccessCodes.Add(successCode); } clientWuModule.Condition.Timeout = conditionScript.Timeout; clientWuModule.Condition.WorkingDirectory = conditionScript.WorkingDirectory; } } var moduleFiles = new ServiceModule().GetModuleFiles(wuModule.Guid); foreach (var file in moduleFiles.OrderBy(x => x.FileName)) { var clientFile = new DtoClientFileHash(); clientFile.FileName = file.FileName; clientFile.FileHash = file.Md5Hash; clientWuModule.Files.Add(clientFile); } _clientPolicy.WuModules.Add(clientWuModule); }
private void CopyScriptModule(EntityPolicyModules policyModule) { var scriptModuleExport = new DtoScriptModuleExport(); var scriptModule = new ServiceScriptModule().GetModule(policyModule.ModuleId); scriptModuleExport.ScriptContents = scriptModule.ScriptContents; scriptModuleExport.Description = scriptModule.Description; scriptModuleExport.DisplayName = scriptModule.Name; scriptModuleExport.Arguments = scriptModule.Arguments; scriptModuleExport.Order = policyModule.Order; scriptModuleExport.Timeout = scriptModule.Timeout; scriptModuleExport.ScriptType = scriptModule.ScriptType; scriptModuleExport.RedirectOutput = scriptModule.RedirectStdOut; scriptModuleExport.RedirectError = scriptModule.RedirectStdError; scriptModuleExport.AddToInventory = scriptModule.AddInventoryCollection; scriptModuleExport.WorkingDirectory = scriptModule.WorkingDirectory; scriptModuleExport.IsCondition = scriptModule.IsCondition; scriptModuleExport.SuccessCodes = scriptModule.SuccessCodes; scriptModuleExport.Guid = scriptModule.Guid; scriptModuleExport.ConditionFailedAction = policyModule.ConditionFailedAction; scriptModuleExport.ConditionNextOrder = policyModule.ConditionNextModule; if (policyModule.ConditionId != -1) { scriptModuleExport.Condition = GetCondition(policyModule.ConditionId); } _policyExport.ScriptModules.Add(scriptModuleExport); }
private void Policy() { _clientPolicy.Name = _policy.Name; _clientPolicy.Guid = _policy.Guid; _clientPolicy.Frequency = _policy.Frequency; _clientPolicy.Trigger = _policy.Trigger; _clientPolicy.SubFrequency = _policy.SubFrequency; _clientPolicy.StartDate = _policy.StartDate; _clientPolicy.CompletedAction = _policy.CompletedAction; _clientPolicy.RemoveInstallCache = _policy.RemoveInstallCache; _clientPolicy.ExecutionType = _policy.ExecutionType; _clientPolicy.ErrorAction = _policy.ErrorAction; _clientPolicy.IsInventory = _policy.RunInventory; _clientPolicy.RemoteAccess = _policy.RemoteAccess; _clientPolicy.IsLoginTracker = _policy.RunLoginTracker; _clientPolicy.JoinDomain = _policy.JoinDomain; _clientPolicy.ImagePrepCleanup = _policy.ImagePrepCleanup; _clientPolicy.FrequencyMissedAction = _policy.MissedAction; _clientPolicy.LogLevel = _policy.LogLevel; _clientPolicy.SkipServerResult = _policy.SkipServerResult; _clientPolicy.IsApplicationMonitor = _policy.RunApplicationMonitor; _clientPolicy.StartWindowScheduleId = _policy.WindowStartScheduleId; _clientPolicy.EndWindowScheduleId = _policy.WindowEndScheduleId; _clientPolicy.WuType = _policy.WuType; _clientPolicy.PolicyComCondition = _policy.PolicyComCondition; _clientPolicy.Id = _policy.Id; _clientPolicy.ConditionFailedAction = _policy.ConditionFailedAction; if (_policy.ConditionId != -1) { var conditionScript = new ServiceScriptModule().GetModule(_policy.ConditionId); if (conditionScript != null) { _clientPolicy.Condition.Arguments = conditionScript.Arguments; _clientPolicy.Condition.DisplayName = conditionScript.Name; _clientPolicy.Condition.Guid = conditionScript.Guid; _clientPolicy.Condition.RedirectError = conditionScript.RedirectStdError; _clientPolicy.Condition.RedirectOutput = conditionScript.RedirectStdOut; if (conditionScript.ImpersonationId != -1) { var scriptImpersonationGuid = new ServiceImpersonationAccount().GetGuid(conditionScript.ImpersonationId); if (!string.IsNullOrEmpty(scriptImpersonationGuid)) { _clientPolicy.Condition.RunAs = scriptImpersonationGuid; } } _clientPolicy.Condition.ScriptType = conditionScript.ScriptType; foreach (var successCode in conditionScript.SuccessCodes.Split(',')) { _clientPolicy.Condition.SuccessCodes.Add(successCode); } _clientPolicy.Condition.Timeout = conditionScript.Timeout; _clientPolicy.Condition.WorkingDirectory = conditionScript.WorkingDirectory; } } if (_policy.JoinDomain) { _clientPolicy.DomainOU = _policy.DomainOU; } }
private int CreateCondition(DtoScriptModuleExport condition) { if (condition == null) { return(0); } var scriptModule = new ServiceScriptModule().GetModuleByGuid(condition.Guid); if (scriptModule == null) { var script = new EntityScriptModule(); script.AddInventoryCollection = condition.AddToInventory; script.Name = condition.DisplayName; script.Description = "Added Via Policy Template " + _export.Name + " On " + DateTime.Now + "\r\n" + script.Description; script.Guid = condition.Guid; script.Arguments = condition.Arguments; script.IsCondition = condition.IsCondition; script.RedirectStdError = condition.RedirectError; script.RedirectStdOut = condition.RedirectOutput; script.ScriptContents = condition.ScriptContents; script.ScriptType = condition.ScriptType; script.SuccessCodes = condition.SuccessCodes; script.Timeout = condition.Timeout; script.WorkingDirectory = condition.WorkingDirectory; script.ImpersonationId = -1; if (_uow.ScriptModuleRepository.Exists(h => h.Name.Equals(script.Name))) { for (var c = 1; c <= 100; c++) { if (c == 100) { return(0); } var newName = script.Name + "_" + c; if (!_uow.ScriptModuleRepository.Exists(h => h.Name == newName)) { script.Name = newName; break; } } } var addResult = new ServiceScriptModule().AddModule(script); if (!addResult.Success) { return(0); } return(script.Id); } else { return(scriptModule.Id); } }
public DtoApiStringResponse GetScript(string moduleGuid) { var script = new ServiceScriptModule().GetModuleByGuid(moduleGuid); return(new DtoApiStringResponse() { Value = script.ScriptContents }); }
private void PrinterModule(EntityPolicyModules policyModule) { var clientPrinterModule = new DtoClientPrinterModule(); var printerModule = new ServicePrinterModule().GetModule(policyModule.ModuleId); clientPrinterModule.Guid = printerModule.Guid; clientPrinterModule.DisplayName = printerModule.Name; clientPrinterModule.PrinterPath = printerModule.NetworkPath; clientPrinterModule.Order = policyModule.Order; clientPrinterModule.IsDefault = printerModule.IsDefault; clientPrinterModule.RestartSpooler = printerModule.RestartSpooler; clientPrinterModule.PrinterAction = printerModule.Action; clientPrinterModule.WaitForEnumeration = printerModule.WaitForEnumeration; if (policyModule.ConditionId != -1) { var conditionScript = new ServiceScriptModule().GetModule(policyModule.ConditionId); if (conditionScript != null) { clientPrinterModule.ConditionFailedAction = policyModule.ConditionFailedAction; clientPrinterModule.ConditionNextOrder = policyModule.ConditionNextModule; clientPrinterModule.Condition = new DtoClientModuleCondition(); clientPrinterModule.Condition.Arguments = conditionScript.Arguments; clientPrinterModule.Condition.DisplayName = conditionScript.Name; clientPrinterModule.Condition.Guid = conditionScript.Guid; clientPrinterModule.Condition.RedirectError = conditionScript.RedirectStdError; clientPrinterModule.Condition.RedirectOutput = conditionScript.RedirectStdOut; if (conditionScript.ImpersonationId != -1) { var scriptImpersonationGuid = new ServiceImpersonationAccount().GetGuid(conditionScript.ImpersonationId); if (!string.IsNullOrEmpty(scriptImpersonationGuid)) { clientPrinterModule.Condition.RunAs = scriptImpersonationGuid; } } clientPrinterModule.Condition.ScriptType = conditionScript.ScriptType; foreach (var successCode in conditionScript.SuccessCodes.Split(',')) { clientPrinterModule.Condition.SuccessCodes.Add(successCode); } clientPrinterModule.Condition.Timeout = conditionScript.Timeout; clientPrinterModule.Condition.WorkingDirectory = conditionScript.WorkingDirectory; } } _clientPolicy.PrinterModules.Add(clientPrinterModule); }
private void MessageModule(EntityPolicyModules policyModule) { var clientMessageModule = new DtoClientMessageModule(); var messageModule = new ServiceMessageModule().GetModule(policyModule.ModuleId); clientMessageModule.Guid = messageModule.Guid; clientMessageModule.DisplayName = messageModule.Name; clientMessageModule.Order = policyModule.Order; clientMessageModule.Title = messageModule.Title; clientMessageModule.Message = messageModule.Message; clientMessageModule.Timeout = messageModule.Timeout; if (policyModule.ConditionId != -1) { var conditionScript = new ServiceScriptModule().GetModule(policyModule.ConditionId); if (conditionScript != null) { clientMessageModule.ConditionFailedAction = policyModule.ConditionFailedAction; clientMessageModule.ConditionNextOrder = policyModule.ConditionNextModule; clientMessageModule.Condition = new DtoClientModuleCondition(); clientMessageModule.Condition.Arguments = conditionScript.Arguments; clientMessageModule.Condition.DisplayName = conditionScript.Name; clientMessageModule.Condition.Guid = conditionScript.Guid; clientMessageModule.Condition.RedirectError = conditionScript.RedirectStdError; clientMessageModule.Condition.RedirectOutput = conditionScript.RedirectStdOut; if (conditionScript.ImpersonationId != -1) { var scriptImpersonationGuid = new ServiceImpersonationAccount().GetGuid(conditionScript.ImpersonationId); if (!string.IsNullOrEmpty(scriptImpersonationGuid)) { clientMessageModule.Condition.RunAs = scriptImpersonationGuid; } } clientMessageModule.Condition.ScriptType = conditionScript.ScriptType; foreach (var successCode in conditionScript.SuccessCodes.Split(',')) { clientMessageModule.Condition.SuccessCodes.Add(successCode); } clientMessageModule.Condition.Timeout = conditionScript.Timeout; clientMessageModule.Condition.WorkingDirectory = conditionScript.WorkingDirectory; } } _clientPolicy.MessageModules.Add(clientMessageModule); }
public DtoActionResult Restore(int moduleId, EnumModule.ModuleType moduleType) { var result = _moduleServices.RestoreModule(moduleId, moduleType); if (result == null) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound)); } if (result.Success) { var auditLog = new EntityAuditLog(); switch (moduleType) { case EnumModule.ModuleType.Command: var cModule = new ServiceCommandModule().GetModule(moduleId); auditLog.ObjectName = cModule.Name; auditLog.ObjectJson = JsonConvert.SerializeObject(cModule); break; case EnumModule.ModuleType.FileCopy: var fModule = new ServiceFileCopyModule().GetModule(moduleId); auditLog.ObjectName = fModule.Name; auditLog.ObjectJson = JsonConvert.SerializeObject(fModule); break; case EnumModule.ModuleType.Printer: var pModule = new ServicePrinterModule().GetModule(moduleId); auditLog.ObjectName = pModule.Name; auditLog.ObjectJson = JsonConvert.SerializeObject(pModule); break; case EnumModule.ModuleType.Script: var scModule = new ServiceScriptModule().GetModule(moduleId); auditLog.ObjectName = scModule.Name; auditLog.ObjectJson = JsonConvert.SerializeObject(scModule); break; case EnumModule.ModuleType.Software: var sModule = new ServiceSoftwareModule().GetModule(moduleId); auditLog.ObjectName = sModule.Name; auditLog.ObjectJson = JsonConvert.SerializeObject(sModule); break; case EnumModule.ModuleType.Wupdate: var uModule = new ServiceWuModule().GetModule(moduleId); auditLog.ObjectName = uModule.Name; auditLog.ObjectJson = JsonConvert.SerializeObject(uModule); break; case EnumModule.ModuleType.Message: var messageModule = new ServiceMessageModule().GetModule(moduleId); auditLog.ObjectName = messageModule.Name; auditLog.ObjectJson = JsonConvert.SerializeObject(messageModule); break; } auditLog.ObjectType = moduleType.ToString(); auditLog.ObjectId = result.Id; auditLog.UserId = _userId; auditLog.AuditType = EnumAuditEntry.AuditType.Restore; _auditLogService.AddAuditLog(auditLog); } return(result); }
private string VerifyScript(EntityPolicyModules policyModule) { var scriptModule = new ServiceScriptModule().GetModule(policyModule.ModuleId); if (scriptModule == null) { return("An Assigned Script Module No Longer Exists"); } if (string.IsNullOrEmpty(scriptModule.Name)) { return("A Script Module Has An Invalid Name"); } if (scriptModule.Archived) { return("Script Module: " + scriptModule.Name + " Is Archived"); } if (string.IsNullOrEmpty(scriptModule.ScriptContents)) { return("Script Module: " + scriptModule.Name + " Has An Invalid Script. It Cannot Be Empty."); } if (string.IsNullOrEmpty(scriptModule.Guid)) { return("Script Module: " + scriptModule.Name + " Has An Invalid GUID"); } if (scriptModule.ScriptType != EnumScriptModule.ScriptType.Batch && scriptModule.ScriptType != EnumScriptModule.ScriptType.Powershell && scriptModule.ScriptType != EnumScriptModule.ScriptType.VbScript) { return("Script Module: " + scriptModule.Name + " Has An Invalid Type"); } int value; if (!int.TryParse(scriptModule.Timeout.ToString(), out value)) { return("Script Module: " + scriptModule.Name + " Has An Invalid Timeout"); } List <string> successCodes = new List <string>(); foreach (var successCode in scriptModule.SuccessCodes.Split(',')) { successCodes.Add(successCode); } if (successCodes.Count == 0) { return("Script Module: " + scriptModule.Name + " Has An Invalid Success Code"); } if (successCodes.Any(code => !int.TryParse(code, out value))) { return("Script Module: " + scriptModule.Name + " Has An Invalid Success Code"); } if (!string.IsNullOrEmpty(scriptModule.WorkingDirectory)) { try { Path.GetFullPath(scriptModule.WorkingDirectory); } catch { return("Script Module: " + scriptModule.Name + " Has An Invalid Working Directory"); } } if (scriptModule.ImpersonationId != -1) { var impAccount = new ServiceImpersonationAccount().GetAccount(scriptModule.ImpersonationId); if (impAccount == null) { return("Script Module: " + scriptModule.Name + " Has An Invalid Impersonation Account"); } } if (!int.TryParse(policyModule.Order.ToString(), out value)) { return("Script Module: " + scriptModule.Name + " Has An Invalid Order"); } return(null); }
private string VerifyConditions(EntityPolicyModules policyModule, List <EntityPolicyModules> policyModules) { if (policyModule.ConditionId != -1) // -1 = disabled { var conditionScript = new ServiceScriptModule().GetModule(policyModule.ConditionId); if (conditionScript == null) { return($"Condition Script For {policyModule.Name} Does Not Exist"); } if (!conditionScript.IsCondition) { return($"The Condition Script For {policyModule.Name} Is Not Currently Set As A Condition"); } if (string.IsNullOrEmpty(conditionScript.Name)) { return($"A Condition Script For {policyModule.Name} Has An Invalid Name"); } if (conditionScript.Archived) { return($"A Condition Script For {policyModule.Name} Is Archived"); } if (string.IsNullOrEmpty(conditionScript.ScriptContents)) { return("Condition Script: " + conditionScript.Name + " Has An Invalid Script. It Cannot Be Empty."); } if (string.IsNullOrEmpty(conditionScript.Guid)) { return("Condition Script: " + conditionScript.Name + " Has An Invalid GUID"); } if (conditionScript.ScriptType != EnumScriptModule.ScriptType.Batch && conditionScript.ScriptType != EnumScriptModule.ScriptType.Powershell && conditionScript.ScriptType != EnumScriptModule.ScriptType.VbScript) { return("Condition Script: " + conditionScript.Name + " Has An Invalid Type"); } int value; if (!int.TryParse(conditionScript.Timeout.ToString(), out value)) { return("Condition Script: " + conditionScript.Name + " Has An Invalid Timeout"); } List <string> successCodes = new List <string>(); foreach (var successCode in conditionScript.SuccessCodes.Split(',')) { successCodes.Add(successCode); } if (successCodes.Count == 0) { return("Condition Script: " + conditionScript.Name + " Has An Invalid Success Code"); } if (successCodes.Any(code => !int.TryParse(code, out value))) { return("Condition Script: " + conditionScript.Name + " Has An Invalid Success Code"); } if (!string.IsNullOrEmpty(conditionScript.WorkingDirectory)) { try { Path.GetFullPath(conditionScript.WorkingDirectory); } catch { return("Condition Script: " + conditionScript.Name + " Has An Invalid Working Directory"); } } if (conditionScript.ImpersonationId != -1) { var impAccount = new ServiceImpersonationAccount().GetAccount(conditionScript.ImpersonationId); if (impAccount == null) { return("Condition Script: " + conditionScript.Name + " Has An Invalid Impersonation Account"); } } if (policyModule.ConditionFailedAction != EnumCondition.FailedAction.GotoModule && policyModule.ConditionFailedAction != EnumCondition.FailedAction.MarkFailed && policyModule.ConditionFailedAction != EnumCondition.FailedAction.MarkNotApplicable && policyModule.ConditionFailedAction != EnumCondition.FailedAction.MarkSkipped && policyModule.ConditionFailedAction != EnumCondition.FailedAction.MarkSuccess) { return($"The Condition Failed Action For {policyModule.Name} Is Not Valid"); } if (policyModule.ConditionFailedAction == EnumCondition.FailedAction.GotoModule) { if (!int.TryParse(policyModule.ConditionNextModule.ToString(), out value)) { return("Module: " + policyModule.Name + " Has An Invalid Next Order Number"); } if (policyModule.ConditionNextModule <= policyModule.Order) { return("Module: " + policyModule.Name + " The Goto Order Number Must Be Greater Than Itself"); } if (!policyModules.Any(x => x.Order == policyModule.ConditionNextModule)) { return("Module: " + policyModule.Name + " The Goto Order Number Is Not Assigned To Any Modules."); } } } return(null); }
private string VerifyPolicy() { if (string.IsNullOrEmpty(_policy.Name)) { return("The Policy's Name Is Not Valid."); } if (string.IsNullOrEmpty(_policy.Guid)) { return("The Policy's Guid Is Not Valid."); } if (_policy.Frequency != EnumPolicy.Frequency.OncePerComputer && _policy.Frequency != EnumPolicy.Frequency.OncePerDay && _policy.Frequency != EnumPolicy.Frequency.OncePerMonth && _policy.Frequency != EnumPolicy.Frequency.OncePerUserPerComputer && _policy.Frequency != EnumPolicy.Frequency.OncePerWeek && _policy.Frequency != EnumPolicy.Frequency.Ongoing && _policy.Frequency != EnumPolicy.Frequency.EveryXdays && _policy.Frequency != EnumPolicy.Frequency.EveryXhours) { return("The Policy's Frequency Is Not Valid."); } if (_policy.Trigger != EnumPolicy.Trigger.Checkin && _policy.Trigger != EnumPolicy.Trigger.Login && _policy.Trigger != EnumPolicy.Trigger.Startup && _policy.Trigger != EnumPolicy.Trigger.StartupOrCheckin) { return("The Policy's Trigger Is Not Valid."); } if (_policy.RunInventory != EnumPolicy.InventoryAction.After && _policy.RunInventory != EnumPolicy.InventoryAction.Before && _policy.RunInventory != EnumPolicy.InventoryAction.Both && _policy.RunInventory != EnumPolicy.InventoryAction.Disabled) { return("The Policy's Run Inventory Is Not Valid."); } int value; if (!int.TryParse(_policy.SubFrequency.ToString(), out value)) { return("The Policy's Sub Frequency Is Not Valid."); } if (_policy.CompletedAction != EnumPolicy.CompletedAction.DoNothing && _policy.CompletedAction != EnumPolicy.CompletedAction.Reboot && _policy.CompletedAction != EnumPolicy.CompletedAction.RebootIfNoLogins) { return("The Policy's Completed Action Is Not Valid."); } if (_policy.ExecutionType != EnumPolicy.ExecutionType.Cache && _policy.ExecutionType != EnumPolicy.ExecutionType.Install) { return("The Policy's Execution Type Is Not Valid."); } if (_policy.ErrorAction != EnumPolicy.ErrorAction.AbortCurrentPolicy && _policy.ErrorAction != EnumPolicy.ErrorAction.AbortRemainingPolicies && _policy.ErrorAction != EnumPolicy.ErrorAction.Continue) { return("The Policy's Error Action Is Not Valid"); } if (_policy.MissedAction != EnumPolicy.FrequencyMissedAction.NextOpportunity && _policy.MissedAction != EnumPolicy.FrequencyMissedAction.ScheduleDayOnly) { return("The Policy's Frequency Missed Action Is Not Valid."); } if (_policy.LogLevel != EnumPolicy.LogLevel.Full && _policy.LogLevel != EnumPolicy.LogLevel.HiddenArguments && _policy.LogLevel != EnumPolicy.LogLevel.None) { return("The Policy's Log Level Is Not Valid."); } if (_policy.WuType != EnumPolicy.WuType.Disabled && _policy.WuType != EnumPolicy.WuType.Microsoft && _policy.WuType != EnumPolicy.WuType.MicrosoftSkipUpgrades && _policy.WuType != EnumPolicy.WuType.Wsus && _policy.WuType != EnumPolicy.WuType.WsusSkipUpgrades) { return("The Policy's Windows Update Type Is Not Valid."); } if (_policy.AutoArchiveType != EnumPolicy.AutoArchiveType.AfterXdays && _policy.AutoArchiveType != EnumPolicy.AutoArchiveType.None && _policy.AutoArchiveType != EnumPolicy.AutoArchiveType.WhenComplete) { return("The Policy's Auto Archive Type Is Not Valid."); } if (_policy.AutoArchiveType == EnumPolicy.AutoArchiveType.AfterXdays) { int autoArchiveSub; if (!int.TryParse(_policy.AutoArchiveSub, out autoArchiveSub)) { return("The Policy's Auto Archive Sub Is Not Valid."); } } if (_policy.WindowStartScheduleId != -1) { var schedule = new ServiceSchedule().GetSchedule(_policy.WindowStartScheduleId); if (schedule == null) { return("The Policy's Start Schedule Id Is Not Valid."); } } if (_policy.WindowEndScheduleId != -1) { var schedule = new ServiceSchedule().GetSchedule(_policy.WindowEndScheduleId); if (schedule == null) { return("The Policy's End Schedule Id Is Not Valid."); } } if (_policy.PolicyComCondition != EnumPolicy.PolicyComCondition.Any && _policy.PolicyComCondition != EnumPolicy.PolicyComCondition.Selective) { return("The Policy's Com Server Condition Is Not Valid"); } if (_policy.PolicyComCondition == EnumPolicy.PolicyComCondition.Selective) { var policyComServers = _policyService.GetPolicyComServers(_policy.Id); if (policyComServers == null) { return("The Policy's Selected Com Servers Are Not Valid"); } if (policyComServers.Count == 0) { return("The Policy's Selected Com Servers Are Not Valid. At Least One Server Must Be Selected."); } foreach (var policyComServer in policyComServers) { var comServer = new ServiceClientComServer().GetServer(policyComServer.ComServerId); if (comServer == null) { return("The Policy's Selected Com Servers Are Not Valid. A Specified Com Server Does Not Exist"); } } } if (_policy.ConditionId != -1) // -1 = disabled { var conditionScript = new ServiceScriptModule().GetModule(_policy.ConditionId); if (conditionScript == null) { return($"Condition Script For {_policy.Name} Does Not Exist"); } if (!conditionScript.IsCondition) { return($"The Condition Script For {_policy.Name} Is Not Currently Set As A Condition"); } if (string.IsNullOrEmpty(conditionScript.Name)) { return($"A Condition Script For {_policy.Name} Has An Invalid Name"); } if (conditionScript.Archived) { return($"A Condition Script For {_policy.Name} Is Archived"); } if (string.IsNullOrEmpty(conditionScript.ScriptContents)) { return("Condition Script: " + conditionScript.Name + " Has An Invalid Script. It Cannot Be Empty."); } if (string.IsNullOrEmpty(conditionScript.Guid)) { return("Condition Script: " + conditionScript.Name + " Has An Invalid GUID"); } if (conditionScript.ScriptType != EnumScriptModule.ScriptType.Batch && conditionScript.ScriptType != EnumScriptModule.ScriptType.Powershell && conditionScript.ScriptType != EnumScriptModule.ScriptType.VbScript) { return("Condition Script: " + conditionScript.Name + " Has An Invalid Type"); } if (!int.TryParse(conditionScript.Timeout.ToString(), out value)) { return("Condition Script: " + conditionScript.Name + " Has An Invalid Timeout"); } List <string> successCodes = new List <string>(); foreach (var successCode in conditionScript.SuccessCodes.Split(',')) { successCodes.Add(successCode); } if (successCodes.Count == 0) { return("Condition Script: " + conditionScript.Name + " Has An Invalid Success Code"); } if (successCodes.Any(code => !int.TryParse(code, out value))) { return("Condition Script: " + conditionScript.Name + " Has An Invalid Success Code"); } if (!string.IsNullOrEmpty(conditionScript.WorkingDirectory)) { try { Path.GetFullPath(conditionScript.WorkingDirectory); } catch { return("Condition Script: " + conditionScript.Name + " Has An Invalid Working Directory"); } } if (conditionScript.ImpersonationId != -1) { var impAccount = new ServiceImpersonationAccount().GetAccount(conditionScript.ImpersonationId); if (impAccount == null) { return("Condition Script: " + conditionScript.Name + " Has An Invalid Impersonation Account"); } } if (_policy.ConditionFailedAction != EnumCondition.FailedAction.MarkFailed && _policy.ConditionFailedAction != EnumCondition.FailedAction.MarkNotApplicable && _policy.ConditionFailedAction != EnumCondition.FailedAction.MarkSkipped && _policy.ConditionFailedAction != EnumCondition.FailedAction.MarkSuccess) { return($"The Condition Failed Action For {_policy.Name} Is Not Valid"); } } return(null); }
public DtoRawSqlQuery Run(List <DtoCustomComputerQuery> queries) { var sqlQuery = new DtoRawSqlQuery(); if (queries.Count == 1 && queries[0].AndOr.Equals("Not")) { var query = queries[0]; if (query.Table.Equals("Application")) { sb.Append(@"select a.computer_name from computers as a where a.computer_id not in ( SELECT computers.computer_id FROM computers LEFT join computer_software on computers.computer_id = computer_software.computer_id LEFT join software_inventory on (computer_software.software_id = software_inventory.software_inventory_id) where software_inventory.name " + query.Operator + "'" + query.Value + "'" + ") and a.last_inventory_time_local > '2019-01-01'"); if (queries.First().IncludeArchived&& queries.First().IncludePreProvisioned) { sb.Append(" AND (a.provision_status = 8 OR a.provision_status = 11 OR a.provision_status = 6)"); } else if (queries.First().IncludeArchived) { sb.Append(" AND (a.provision_status = 8 OR a.provision_status = 11)"); } else if (queries.First().IncludePreProvisioned) { sb.Append(" AND (a.provision_status = 8 OR a.provision_status = 6)"); } else { sb.Append(" AND a.provision_status = 8"); } sb.Append(BuildGroupBy(queries.First().GroupBy)); } else if (query.Table.Equals("Windows Update")) { sb.Append(@"select a.computer_name from computers as a where a.computer_id not in ( SELECT computers.computer_id FROM computers LEFT join computer_updates on computers.computer_id = computer_updates.computer_id LEFT join wu_inventory on (computer_updates.wu_inventory_id = wu_inventory.wu_inventory_id) where wu_inventory.title " + query.Operator + " " + "'" + query.Value + "'" + ") and a.last_inventory_time_local > '2019-01-01'"); if (queries.First().IncludeArchived&& queries.First().IncludePreProvisioned) { sb.Append(" AND (a.provision_status = 8 OR a.provision_status = 11 OR a.provision_status = 6)"); } else if (queries.First().IncludeArchived) { sb.Append(" AND (a.provision_status = 8 OR a.provision_status = 11)"); } else if (queries.First().IncludePreProvisioned) { sb.Append(" AND (a.provision_status = 8 OR a.provision_status = 6)"); } else { sb.Append(" AND a.provision_status = 8"); } if (!string.IsNullOrEmpty(queries.First().GroupBy)) { sb.Append($" GROUP BY {queries.First().GroupBy}"); } } else if (query.Table.Equals("Certificates")) { sb.Append(@"select a.computer_id,a.computer_name from computers as a where a.computer_id not in ( SELECT computers.computer_id FROM computers left join computer_certificates on computers.computer_id = computer_certificates.computer_id left join certificate_inventory on (computer_certificates.certificate_id = certificate_inventory.certificate_inventory_id) where certificate_inventory.subject " + query.Operator + " " + "'" + query.Value + "'" + ") and a.last_inventory_time_local > '2019-01-01'"); if (queries.First().IncludeArchived&& queries.First().IncludePreProvisioned) { sb.Append(" AND (a.provision_status = 8 OR a.provision_status = 11 OR a.provision_status = 6)"); } else if (queries.First().IncludeArchived) { sb.Append(" AND (a.provision_status = 8 OR a.provision_status = 11)"); } else if (queries.First().IncludePreProvisioned) { sb.Append(" AND (a.provision_status = 8 OR a.provision_status = 6)"); } else { sb.Append(" AND a.provision_status = 8"); } if (!string.IsNullOrEmpty(queries.First().GroupBy)) { sb.Append($" GROUP BY {queries.First().GroupBy}"); } } sqlQuery = new DtoRawSqlQuery(); sqlQuery.Sql = sb.ToString(); return(sqlQuery); } string select = "SELECT a.computer_id, a.computer_name,"; foreach (var query in queries.Where(x => x.Table.Equals("Computer"))) { if (query.Field.Equals("computer_name")) { continue; } select += @" a." + query.Field + ","; } foreach (var query in queries.Where(x => x.Table.Equals("Bios"))) { select += @" b." + query.Field + ","; } foreach (var query in queries.Where(x => x.Table.Equals("System"))) { select += @" c." + query.Field + ","; } foreach (var query in queries.Where(x => x.Table.Equals("Hard Drive"))) { select += @" d." + query.Field + ","; } foreach (var query in queries.Where(x => x.Table.Equals("OS"))) { select += @" e." + query.Field + ","; } foreach (var query in queries.Where(x => x.Table.Equals("Printer"))) { select += @" f." + query.Field + ","; } foreach (var query in queries.Where(x => x.Table.Equals("Processor"))) { select += @" g." + query.Field + ","; } foreach (var query in queries.Where(x => x.Table.Equals("Application"))) { select += @" i." + query.Field + ","; } foreach (var query in queries.Where(x => x.Table.Equals("Windows Update") && x.Field.Equals("is_installed"))) { select += @" j." + query.Field + ","; } foreach (var query in queries.Where(x => x.Table.Equals("Windows Update") && x.Field.Equals("install_date"))) { select += @" j." + query.Field + ","; } foreach (var query in queries.Where(x => x.Table.Equals("Windows Update") && x.Field.Equals("title"))) { select += @" k." + query.Field + ","; } foreach (var query in queries.Where(x => x.Table.Equals("Firewall"))) { select += @" l." + query.Field + ","; } foreach (var query in queries.Where(x => x.Table.Equals("AntiVirus"))) { select += @" m." + query.Field + ","; } foreach (var query in queries.Where(x => x.Table.Equals("BitLocker"))) { select += @" n." + query.Field + ","; } foreach (var query in queries.Where(x => x.Table.Equals("Logical Volumes"))) { select += @" o." + query.Field + ","; } foreach (var query in queries.Where(x => x.Table.Equals("Network Adapters"))) { select += @" p." + query.Field + ","; } foreach (var query in queries.Where(x => x.Table.Equals("Certificates"))) { select += @" r." + query.Field + ","; } foreach (var query in queries) { if (query.Table.StartsWith("(")) { var cia = query.Table.Trim('(').Trim(')'); var ciaType = cia.Split('_').First(); if (ciaType.Equals("ci")) { int ciId; if (int.TryParse(cia.Split('_')[1], out ciId)) { var script = new ServiceScriptModule().GetModule(ciId); select += @" ci" + ciId + "." + query.Field + " as " + "\"" + script.Name + "\"" + ","; } } else if (ciaType.Equals("ca")) { int caId; if (int.TryParse(cia.Split('_')[1], out caId)) { var attribute = new ServiceCustomAttribute().GetCustomAttribute(caId); select += @" ca" + caId + "." + query.Field + " as " + "\"" + attribute.Name + "\"" + ","; } } } } var selectTrimmed = select.Trim(',') + " "; sb.Append(selectTrimmed); sb.Append(@" FROM computers as a "); if (queries.Any(x => x.Table == "Bios")) { sb.Append("LEFT JOIN bios_inventory b on a.computer_id = b.computer_id "); } if (queries.Any(x => x.Table == "System")) { sb.Append("LEFT JOIN computer_system_inventory c on a.computer_id = c.computer_id "); } if (queries.Any(x => x.Table == "Hard Drive")) { sb.Append("LEFT JOIN hdd_inventory d on a.computer_id = d.computer_id "); } if (queries.Any(x => x.Table == "OS")) { sb.Append("LEFT JOIN os_inventory e on a.computer_id = e.computer_id "); } if (queries.Any(x => x.Table == "Printer")) { sb.Append("LEFT JOIN printer_inventory f on a.computer_id = f.computer_id "); } if (queries.Any(x => x.Table == "Processor")) { sb.Append("LEFT JOIN processor_inventory g on a.computer_id = g.computer_id "); } if (queries.Any(x => x.Table == "Application")) { sb.Append("LEFT JOIN computer_software h on a.computer_id = h.computer_id "); sb.Append("LEFT JOIN software_inventory i on h.software_id = i.software_inventory_id "); } if (queries.Any(x => x.Table == "Windows Update")) { sb.Append("LEFT JOIN computer_updates j on a.computer_id = j.computer_id "); sb.Append("LEFT JOIN wu_inventory k on j.wu_inventory_id = k.wu_inventory_id "); } if (queries.Any(x => x.Table == "Firewall")) { sb.Append("LEFT JOIN firewall_inventory l on a.computer_id = l.computer_id "); } if (queries.Any(x => x.Table == "AntiVirus")) { sb.Append("LEFT JOIN antivirus_inventory m on a.computer_id = m.computer_id "); } if (queries.Any(x => x.Table == "BitLocker")) { sb.Append("LEFT JOIN bitlocker_inventory n on a.computer_id = n.computer_id "); } if (queries.Any(x => x.Table == "Logical Volumes")) { sb.Append("LEFT JOIN logical_volume_inventory o on a.computer_id = o.computer_id "); } if (queries.Any(x => x.Table == "Network Adapters")) { sb.Append("LEFT JOIN nic_inventory p on a.computer_id = p.computer_id "); } if (queries.Any(x => x.Table == "Certificates")) { sb.Append("LEFT JOIN computer_certificates q on a.computer_id = q.computer_id "); sb.Append("LEFT JOIN certificate_inventory r on q.certificate_id = r.certificate_inventory_id "); } var scriptModuleIds = new List <int>(); var customAttributeIds = new List <int>(); foreach (var query in queries) { if (query.Table.StartsWith("(")) { var cia = query.Table.Trim('(').Trim(')'); var ciaType = cia.Split('_').First(); if (ciaType.Equals("ci")) { int ciId; if (int.TryParse(cia.Split('_')[1], out ciId)) { scriptModuleIds.Add(ciId); } } else if (ciaType.Equals("ca")) { int caId; if (int.TryParse(cia.Split('_')[1], out caId)) { customAttributeIds.Add(caId); } } } } if (scriptModuleIds.Count > 0) { foreach (var moduleId in scriptModuleIds) { sb.Append("LEFT JOIN custom_inventory ci" + moduleId + " on a.computer_id = ci" + moduleId + ".computer_id AND ci" + moduleId + ".script_module_id in "); sb.Append("(" + moduleId + ") "); } } if (customAttributeIds.Count > 0) { foreach (var attributeId in customAttributeIds) { sb.Append("LEFT JOIN custom_computer_attributes ca" + attributeId + " on a.computer_id = ca" + attributeId + ".computer_id AND ca" + attributeId + ".custom_attribute_id in "); sb.Append("(" + attributeId + ") "); } } sb.Append("WHERE ("); int counter = 0; var parameters = new List <string>(); foreach (var query in queries) { var tableAs = ""; if (query.Table == "Computer") { tableAs = "a"; } else if (query.Table == "Bios") { tableAs = "b"; } else if (query.Table == "System") { tableAs = "c"; } else if (query.Table == "Hard Drive") { tableAs = "d"; } else if (query.Table == "OS") { tableAs = "e"; } else if (query.Table == "Printer") { tableAs = "f"; } else if (query.Table == "Processor") { tableAs = "g"; } else if (query.Table == "Application") { tableAs = "i"; } else if (query.Table == "Windows Update" && query.Field == "is_installed") { tableAs = "j"; } else if (query.Table == "Windows Update" && query.Field == "install_date") { tableAs = "j"; } else if (query.Table == "Windows Update") { tableAs = "k"; } else if (query.Table == "Firewall") { tableAs = "l"; } else if (query.Table == "AntiVirus") { tableAs = "m"; } else if (query.Table == "BitLocker") { tableAs = "n"; } else if (query.Table == "Logical Volumes") { tableAs = "o"; } else if (query.Table == "Network Adapters") { tableAs = "p"; } else if (query.Table == "Certificates") { tableAs = "r"; } else { if (query.Table.StartsWith("(")) { var cia = query.Table.Trim('(').Trim(')'); var ciaType = cia.Split('_').First(); if (ciaType.Equals("ci")) { int ciId; if (int.TryParse(cia.Split('_')[1], out ciId)) { tableAs = "ci" + ciId; } } else if (ciaType.Equals("ca")) { int caId; if (int.TryParse(cia.Split('_')[1], out caId)) { tableAs = "ca" + caId; } } } } counter++; sb.Append(query.AndOr + " " + query.LeftParenthesis + " " + tableAs + "." + query.Field + " "); sb.Append(query.Operator + " @p" + counter + " " + query.RightParenthesis); parameters.Add(query.Value); } if (queries.First().IncludeArchived&& queries.First().IncludePreProvisioned) { sb.Append(") AND (a.provision_status = 8 OR a.provision_status = 11 OR a.provision_status = 6)"); } else if (queries.First().IncludeArchived) { sb.Append(") AND (a.provision_status = 8 OR a.provision_status = 11)"); } else if (queries.First().IncludePreProvisioned) { sb.Append(") AND (a.provision_status = 8 OR a.provision_status = 6)"); } else { sb.Append(") AND a.provision_status = 8"); } var gb = BuildGroupBy(queries.First().GroupBy); if (!string.IsNullOrEmpty(gb)) { sb.Append(gb); } sqlQuery.Sql = sb.ToString(); sqlQuery.Parameters = parameters; return(sqlQuery); }
private DtoActionResult CreateScripts() { foreach (var scriptModule in _export.ScriptModules) { if (_export.Instructions.Contains("[generate-module-guid]")) { scriptModule.Guid = Guid.NewGuid().ToString(); } if (_uow.ScriptModuleRepository.Exists(h => h.Guid.Equals(scriptModule.Guid))) { return(new DtoActionResult() { ErrorMessage = "A Script Module With This Guid Already Exists. " + scriptModule.Guid }); } var script = new EntityScriptModule(); script.AddInventoryCollection = scriptModule.AddToInventory; script.Name = scriptModule.DisplayName; script.Description = "Added Via Policy Template " + _export.Name + " On " + DateTime.Now + "\r\n" + script.Description; script.Guid = scriptModule.Guid; script.Arguments = scriptModule.Arguments; script.IsCondition = scriptModule.IsCondition; script.RedirectStdError = scriptModule.RedirectError; script.RedirectStdOut = scriptModule.RedirectOutput; script.ScriptContents = scriptModule.ScriptContents; script.ScriptType = scriptModule.ScriptType; script.SuccessCodes = scriptModule.SuccessCodes; script.Timeout = scriptModule.Timeout; script.WorkingDirectory = scriptModule.WorkingDirectory; script.ImpersonationId = -1; if (_uow.ScriptModuleRepository.Exists(h => h.Name.Equals(script.Name))) { for (var c = 1; c <= 100; c++) { if (c == 100) { return new DtoActionResult() { ErrorMessage = "Could Not Determine A Script Name" } } ; var newName = script.Name + "_" + c; if (!_uow.ScriptModuleRepository.Exists(h => h.Name == newName)) { script.Name = newName; break; } } } var addResult = new ServiceScriptModule().AddModule(script); if (!addResult.Success) { return(addResult); } var policyModule = new EntityPolicyModules(); policyModule.Guid = script.Guid; policyModule.ModuleId = addResult.Id; policyModule.ModuleType = EnumModule.ModuleType.Script; policyModule.Name = script.Name; policyModule.Order = scriptModule.Order; policyModule.PolicyId = _policy.Id; policyModule.ConditionFailedAction = scriptModule.ConditionFailedAction; policyModule.ConditionNextModule = scriptModule.ConditionNextOrder; var conditionId = CreateCondition(scriptModule.Condition); if (conditionId != 0) { policyModule.ConditionId = conditionId; } else { policyModule.ConditionId = -1; } _uow.PolicyModulesRepository.Insert(policyModule); } return(new DtoActionResult() { Success = true }); }