private void InstallMsu(DtoClientFileHash file) { var directory = Path.Combine(DtoGobalSettings.BaseCachePath, _module.Guid) + Path.DirectorySeparatorChar; var pArgs = new DtoProcessArgs(); pArgs.RunWith = "wusa.exe"; pArgs.Command = "\"" + directory + file.FileName + "\""; pArgs.Arguments = "/quiet /norestart " + _module.Arguments; pArgs.Timeout = _module.Timeout; pArgs.WorkingDirectory = directory; pArgs.RedirectError = _module.RedirectError; pArgs.RedirectOutput = _module.RedirectOutput; var result = new ServiceProcess(pArgs).RunProcess(); Logger.Info(JsonConvert.SerializeObject(result)); Logger.Info("Windows Update Module: " + _module.DisplayName + "Finished"); _moduleResult.ExitCode = result.ExitCode.ToString(); if (!_module.SuccessCodes.Contains(result.ExitCode.ToString())) { _moduleResult.Success = false; _moduleResult.ErrorMessage = result.StandardError; } }
public ServiceProcess(DtoProcessArgs processArgs) { _processArgs = processArgs; _output = new StringBuilder(); _error = new StringBuilder(); }
public DtoModuleResult Run() { var printerFound = false; Logger.Info("Running Printer Module: " + _module.DisplayName); var pArgs = new DtoProcessArgs(); if (_module.PrinterAction == EnumPrinterModule.ActionType.InstallPowershell) { pArgs.RunWith = "Powershell.exe"; } else { pArgs.RunWith = "rundll32.exe"; } var printerArgs = GetPrinterArgs(isSecondPass: false); if (printerArgs == null) { _moduleResult.Success = false; _moduleResult.ExitCode = "-1"; _moduleResult.ErrorMessage = "Could Not Determine Printer Action Type"; return(_moduleResult); } if (_module.PrinterAction == EnumPrinterModule.ActionType.InstallPowershell) { pArgs.Command = "Add-Printer " + printerArgs; } else { pArgs.Command = "printui.dll,PrintUIEntry " + printerArgs; } pArgs.Timeout = 1; var result = new ServiceProcess(pArgs).RunProcess(); _moduleResult.ExitCode = result.ExitCode.ToString(); if (result.ExitCode != 0 || !string.IsNullOrEmpty(result.StandardError)) { _moduleResult.Success = false; _moduleResult.ErrorMessage = result.StandardError; Logger.Info("Printer Module: " + _module.DisplayName + "Finished"); return(_moduleResult); } if (_module.WaitForEnumeration) { Logger.Debug("Enumerating Printers"); int count = 0; while (true) { var tempFound = PrinterFound(); if (tempFound && (_module.PrinterAction == EnumPrinterModule.ActionType.Install || _module.PrinterAction == EnumPrinterModule.ActionType.InstallPowershell)) { Logger.Debug("Found Printer."); printerFound = true; break; } else if (tempFound && _module.PrinterAction == EnumPrinterModule.ActionType.Delete) { Logger.Debug("Printer Still Exists."); printerFound = true; } else if (!tempFound && (_module.PrinterAction == EnumPrinterModule.ActionType.Install || _module.PrinterAction == EnumPrinterModule.ActionType.InstallPowershell)) { Logger.Debug("Could Not Find Printer."); printerFound = false; } else if (!tempFound && _module.PrinterAction == EnumPrinterModule.ActionType.Delete) { Logger.Debug("Could Not Find Printer."); printerFound = false; break; } if (count == 24 && (_module.PrinterAction == EnumPrinterModule.ActionType.Install || _module.PrinterAction == EnumPrinterModule.ActionType.InstallPowershell)) { Logger.Debug("Could Not Verify Printer Was Installed. Giving Up."); break; } else if (count == 24 && _module.PrinterAction == EnumPrinterModule.ActionType.Delete) { Logger.Debug("Could Not Verify Printer Was Deleted. Giving Up."); break; } Logger.Debug("Waiting..."); Task.Delay(5 * 1000).Wait(); count++; } } else { //if enumeration skipped, must assume printer found printerFound = true; } if (printerFound && _module.IsDefault && _module.PrinterAction != EnumPrinterModule.ActionType.None) { Logger.Info("Setting Printer As Default."); pArgs = new DtoProcessArgs(); pArgs.RunWith = "rundll32.exe"; printerArgs = GetPrinterArgs(isSecondPass: true); if (printerArgs == null) { _moduleResult.Success = false; _moduleResult.ExitCode = "-1"; _moduleResult.ErrorMessage = "Could Not Determine Printer Action Type"; return(_moduleResult); } pArgs.Command = "printui.dll,PrintUIEntry " + printerArgs; pArgs.Timeout = 1; result = new ServiceProcess(pArgs).RunProcess(); _moduleResult.ExitCode = result.ExitCode.ToString(); if (result.ExitCode != 0 || !string.IsNullOrEmpty(result.StandardError)) { _moduleResult.Success = false; _moduleResult.ErrorMessage = result.StandardError; Logger.Info("Printer Module: " + _module.DisplayName + "Finished"); return(_moduleResult); } } if ((_module.PrinterAction == EnumPrinterModule.ActionType.Install || _module.PrinterAction == EnumPrinterModule.ActionType.InstallPowershell) && !printerFound) { _moduleResult.Success = false; _moduleResult.ExitCode = "-1"; _moduleResult.ErrorMessage = "Unknown Error"; Logger.Error("Printer Installation Failed."); } else if (_module.PrinterAction == EnumPrinterModule.ActionType.Delete && printerFound) { _moduleResult.Success = false; _moduleResult.ExitCode = "-1"; _moduleResult.ErrorMessage = "Unknown Error"; Logger.Error("Printer Removal Failed."); } if (_module.RestartSpooler) { Logger.Info("Restarting Print Spooler"); var restartResult = _trigger == EnumPolicy.Trigger.Login ? new APICall().LocalApi.RestartPrintSpooler() : new ServiceSystemService().RestartPrintSpooler(); if (restartResult) { Logger.Info("Print Spooler Restarted Successfully"); } else { Logger.Error("Print Spooler Failed To Restart."); } } return(_moduleResult); }
public DtoModuleResult Run() { Logger.Info("Running Script Module: " + _module.DisplayName); string runWith = ""; string runWithArgs = ""; string ext; if (_module.ScriptType == EnumScriptModule.ScriptType.Powershell) { runWith = "Powershell.exe"; runWithArgs = " -ExecutionPolicy Bypass -NoProfile -File "; ext = ".ps1"; } else if (_module.ScriptType == EnumScriptModule.ScriptType.VbScript) { runWith = "cscript.exe"; ext = ".vbs"; } else if (_module.ScriptType == EnumScriptModule.ScriptType.Batch) { runWith = "cmd.exe"; runWithArgs = " /c "; ext = ".bat"; } else { var msg = "Could Not Determine Script Type. Exiting."; Logger.Error(msg); _moduleResult.Success = false; _moduleResult.ExitCode = "1"; _moduleResult.ErrorMessage = msg; return(_moduleResult); } if (!string.IsNullOrEmpty(_module.RunAs)) { var iTask = new ServiceImpersonationTask(); iTask.Command = runWith; iTask.Arguments = runWithArgs + "\"" + Path.Combine(DtoGobalSettings.BaseCachePath, _module.Guid, _module.Guid + ext) + "\"" + " " + _module.Arguments; iTask.ExecutionTimeout = _module.Timeout; iTask.ModuleGuid = _module.Guid; if (!string.IsNullOrEmpty(_module.WorkingDirectory)) { iTask.WorkingDirectory = _module.WorkingDirectory; } else { iTask.WorkingDirectory = Path.Combine(DtoGobalSettings.BaseCachePath, _module.Guid); } iTask.ImpersonationGuid = _module.RunAs; var result = iTask.RunTask(); Logger.Info(JsonConvert.SerializeObject(result)); Logger.Info("Script Module: " + _module.DisplayName + " Finished"); _moduleResult.ExitCode = result.ToString(); if (!_module.SuccessCodes.Contains(result.ToString())) { _moduleResult.Success = false; if (result == 259) { _moduleResult.ErrorMessage = "Task Timed Out."; } else { _moduleResult.ErrorMessage = "Impersonation Task Failed. See Log For Details."; } } } else { var pArgs = new DtoProcessArgs(); pArgs.RunWith = runWith; pArgs.RunWithArgs = runWithArgs; pArgs.Command = "\"" + Path.Combine(DtoGobalSettings.BaseCachePath, _module.Guid, _module.Guid + ext) + "\""; pArgs.Arguments = _module.Arguments; pArgs.Timeout = _module.Timeout; pArgs.RedirectError = _module.RedirectError; pArgs.RedirectOutput = _module.RedirectOutput; if (!string.IsNullOrEmpty(_module.WorkingDirectory)) { pArgs.WorkingDirectory = _module.WorkingDirectory; } else { pArgs.WorkingDirectory = Path.Combine(DtoGobalSettings.BaseCachePath, _module.Guid); } if (_module.AddToInventory) { pArgs.RedirectOutput = true; } var result = new ServiceProcess(pArgs).RunProcess(); Logger.Info(JsonConvert.SerializeObject(result)); if (_module.AddToInventory) { var resultLine = GetLastStdOutLine(result.StandardOut); if (!string.IsNullOrEmpty(resultLine)) { _moduleResult.ScriptOutput = new DtoScriptModuleOutput(); _moduleResult.ScriptOutput.ModuleGuid = _module.Guid; _moduleResult.ScriptOutput.Value = resultLine; } } Logger.Info("Script Module: " + _module.DisplayName + " Finished"); _moduleResult.ExitCode = result.ExitCode.ToString(); if (!_module.SuccessCodes.Contains(result.ExitCode.ToString())) { _moduleResult.Success = false; _moduleResult.ErrorMessage = result.StandardError; } } return(_moduleResult); }
public DtoModuleResult Run() { Logger.Info("Running Command Module: " + _module.DisplayName); if (!string.IsNullOrEmpty(_module.RunAs)) { var iTask = new ServiceImpersonationTask(); iTask.Command = "cmd.exe"; if (_module.Command.StartsWith("[unquote]")) { _module.Command = _module.Command.Replace("[unquote]", ""); iTask.Arguments = "/c " + _module.Command + " " + _module.Arguments; } else { iTask.Arguments = "/c " + "\"" + _module.Command + "\"" + " " + _module.Arguments; } iTask.ExecutionTimeout = _module.Timeout; iTask.ModuleGuid = _module.Guid; if (!string.IsNullOrEmpty(_module.WorkingDirectory)) { iTask.WorkingDirectory = _module.WorkingDirectory; } else { iTask.WorkingDirectory = Path.Combine(DtoGobalSettings.BaseCachePath, _module.Guid); } iTask.ImpersonationGuid = _module.RunAs; var result = iTask.RunTask(); Logger.Info(JsonConvert.SerializeObject(result)); Logger.Info("Command Module: " + _module.DisplayName + " Finished"); _moduleResult.ExitCode = result.ToString(); if (!_module.SuccessCodes.Contains(result.ToString())) { _moduleResult.Success = false; if (result == 259) { _moduleResult.ErrorMessage = "Task Timed Out."; } else { _moduleResult.ErrorMessage = "Impersonation Task Failed. See Log For Details."; } } } else { var pArgs = new DtoProcessArgs(); pArgs.RunWith = "cmd.exe"; pArgs.RunWithArgs = "/c "; if (_module.Command.StartsWith("[unquote]")) { _module.Command = _module.Command.Replace("[unquote]", ""); pArgs.Command = _module.Command; } else { pArgs.Command = "\"" + _module.Command + "\""; } pArgs.Arguments = _module.Arguments; pArgs.Timeout = _module.Timeout; pArgs.RedirectError = _module.RedirectError; pArgs.RedirectOutput = _module.RedirectOutput; if (!string.IsNullOrEmpty(_module.WorkingDirectory)) { pArgs.WorkingDirectory = _module.WorkingDirectory; } else { pArgs.WorkingDirectory = Path.Combine(DtoGobalSettings.BaseCachePath, _module.Guid); } var result = new ServiceProcess(pArgs).RunProcess(); Logger.Info(JsonConvert.SerializeObject(result)); Logger.Info("Command Module: " + _module.DisplayName + " Finished"); _moduleResult.ExitCode = result.ExitCode.ToString(); if (!_module.SuccessCodes.Contains(result.ExitCode.ToString())) { _moduleResult.Success = false; _moduleResult.ErrorMessage = result.StandardError; } } return(_moduleResult); }
private bool UpdateClient(string msiFile) { Logger.Info("Updating Toec To: " + msiFile); try { Directory.CreateDirectory(DtoGobalSettings.BaseCachePath + "ClientUpgrades\\"); } catch { //ignored } Logger.Debug($"Obtaining A Download Connection To {DtoGobalSettings.ComServer}"); var downloadConRequest = new DtoDownloadConRequest(); downloadConRequest.ComputerGuid = DtoGobalSettings.ClientIdentity.Guid; downloadConRequest.ComputerName = DtoGobalSettings.ClientIdentity.Name; downloadConRequest.ComServer = DtoGobalSettings.ComServer; var downloadConnection = new APICall().PolicyApi.CreateDownloadConnection(downloadConRequest); if (downloadConnection == null) { Logger.Error("Could Not Obtain Download Connection. Response was null."); return(false); } if (!downloadConnection.Success) { Logger.Error("Could Not Obtain Download Connection. " + downloadConnection.ErrorMessage); return(false); } if (downloadConnection.QueueIsFull) { Logger.Debug("Download Connections Are Full"); return(false); } Logger.Debug("Downloading Files"); var msiRequest = new DtoClientFileRequest(); msiRequest.FileName = msiFile; Logger.Debug($"Downloading {msiRequest.FileName}"); if (!new APICall().PolicyApi.GetClientUpgrade(msiRequest, DtoGobalSettings.ClientIdentity.Name)) { Logger.Debug("Releasing The Download Connection."); new APICall().PolicyApi.RemoveDownloadConnection(downloadConRequest); return(false); } Logger.Debug("Releasing The Download Connection."); new APICall().PolicyApi.RemoveDownloadConnection(downloadConRequest); if (new FileInfo(DtoGobalSettings.BaseCachePath + "ClientUpgrades\\" + msiFile).Length < 1) { Logger.Debug("MSI File was invalid."); return(false); } var pArgs = new DtoProcessArgs(); pArgs.RunWith = "msiexec.exe"; pArgs.RunWithArgs = " /i "; pArgs.Command = "\"" + DtoGobalSettings.BaseCachePath + "ClientUpgrades\\" + msiFile + "\"" + $" /q /norestart"; pArgs.Timeout = 5; pArgs.WorkingDirectory = DtoGobalSettings.BaseCachePath + "ClientUpgrades\\"; var result = new ServiceProcess(pArgs).RunProcess(); //Nothing from here on should execute. Updating msi should kill this process. Logger.Info(JsonConvert.SerializeObject(result)); return(true); }
public DtoModuleResult Run() { var directory = Path.Combine(DtoGobalSettings.BaseCachePath, _module.Guid) + Path.DirectorySeparatorChar; Logger.Info("Running Software Module: " + _module.DisplayName); string runWith = "msiexec.exe"; string runWithArgs = ""; switch (_module.InstallType) { case EnumSoftwareModule.MsiInstallType.Install: runWithArgs = " /i "; break; case EnumSoftwareModule.MsiInstallType.Uninstall: runWithArgs = " /x "; break; case EnumSoftwareModule.MsiInstallType.Patch: runWithArgs = " /p "; break; } if (!string.IsNullOrEmpty(_module.RunAs)) { var iTask = new ServiceImpersonationTask(); iTask.Command = runWith; iTask.Arguments = runWithArgs + "\"" + directory + _module.Command + "\"" + " " + _module.Arguments; iTask.ExecutionTimeout = _module.Timeout; iTask.ModuleGuid = _module.Guid; iTask.ImpersonationGuid = _module.RunAs; var result = iTask.RunTask(); Logger.Info(JsonConvert.SerializeObject(result)); Logger.Info("Software Module: " + _module.DisplayName + " Finished"); _moduleResult.ExitCode = result.ToString(); if (!_module.SuccessCodes.Contains(result.ToString())) { _moduleResult.Success = false; if (result == 259) { _moduleResult.ErrorMessage = "Task Timed Out."; } else { _moduleResult.ErrorMessage = "Impersonation Task Failed. See Log For Details."; } } } else { var pArgs = new DtoProcessArgs(); pArgs.RunWith = runWith; pArgs.RunWithArgs = runWithArgs; pArgs.Command = "\"" + directory + _module.Command + "\""; pArgs.Arguments = _module.Arguments; pArgs.Timeout = _module.Timeout; pArgs.WorkingDirectory = directory; pArgs.RedirectError = _module.RedirectError; pArgs.RedirectOutput = _module.RedirectOutput; var result = new ServiceProcess(pArgs).RunProcess(); Logger.Info(JsonConvert.SerializeObject(result)); Logger.Info("Software Module: " + _module.DisplayName + "Finished"); _moduleResult.ExitCode = result.ExitCode.ToString(); if (!_module.SuccessCodes.Contains(result.ExitCode.ToString())) { _moduleResult.Success = false; _moduleResult.ErrorMessage = result.StandardError; } } return(_moduleResult); }