protected override void ProcessRecord() { var logger = new PSLogger(Host); var zipFolder = Path.GetDirectoryName(MyInvocation.MyCommand.Module.Path); var installer = new UnattendInstaller(logger, zipFolder); foreach (var name in Name) { var options = new InstanceUpgradeOptions { AuditRetentionPeriod = AuditRetentionPeriod, ErrorRetentionPeriod = ErrorRetentionPeriod, OverrideEnableErrorForwarding = ForwardErrorMessages }; var instance = ServiceControlInstance.FindByName(name); if (instance == null) { WriteWarning($"No action taken. An instance called {name} was not found"); break; } options.OverrideEnableErrorForwarding = ForwardErrorMessages; // Migrate Value if (!options.AuditRetentionPeriod.HasValue) { if (instance.AppSettingExists(SettingsList.HoursToKeepMessagesBeforeExpiring.Name)) { var i = instance.ReadAppSetting(SettingsList.HoursToKeepMessagesBeforeExpiring.Name, -1); if (i != -1) { options.AuditRetentionPeriod = TimeSpan.FromHours(i); } } } if (!options.OverrideEnableErrorForwarding.HasValue & !instance.AppSettingExists(SettingsList.ForwardErrorMessages.Name)) { ThrowTerminatingError(new ErrorRecord(new Exception($"Upgrade of {instance.Name} aborted. ForwardErrorMessages parameter must be set to true or false because the configuration file has no setting for ForwardErrorMessages. This setting is mandatory as of version 1.12"), "UpgradeFailure", ErrorCategory.InvalidArgument, null)); } if (!options.ErrorRetentionPeriod.HasValue & !instance.AppSettingExists(SettingsList.ErrorRetentionPeriod.Name)) { ThrowTerminatingError(new ErrorRecord(new Exception($"Upgrade of {instance.Name} aborted. ErrorRetentionPeriod parameter must be set to timespan because the configuration file has no setting for ErrorRetentionPeriod. This setting is mandatory as of version 1.13"), "UpgradeFailure", ErrorCategory.InvalidArgument, null)); } if (!options.AuditRetentionPeriod.HasValue & !instance.AppSettingExists(SettingsList.AuditRetentionPeriod.Name)) { ThrowTerminatingError(new ErrorRecord(new Exception($"Upgrade of {instance.Name} aborted. AuditRetentionPeriod parameter must be set to timespan because the configuration file has no setting for AuditRetentionPeriod. This setting is mandatory as of version 1.13"), "UpgradeFailure", ErrorCategory.InvalidArgument, null)); } if (!installer.Upgrade(instance, options)) { ThrowTerminatingError(new ErrorRecord(new Exception($"Upgrade of {instance.Name} failed"), "UpgradeFailure", ErrorCategory.InvalidResult, null)); } } }
public void UpgradeInstance() { var installer = new UnattendInstaller(new TestLogger(), deploymentCache); foreach (var instance in ServiceControlInstance.Instances()) //.Where(p => p.Name.StartsWith("Test.ServiceControl", StringComparison.OrdinalIgnoreCase))) { installer.Upgrade(instance, new InstanceUpgradeOptions { AuditRetentionPeriod = TimeSpan.FromDays(30), ErrorRetentionPeriod = TimeSpan.FromDays(15), OverrideEnableErrorForwarding = true }); } }
static void UpgradeInstances(Session session, ServiceControlZipInfo zipInfo, MSILogger logger, UnattendInstaller unattendedInstaller) { var options = new InstanceUpgradeOptions(); var upgradeInstancesPropertyValue = session["UPGRADEINSTANCES"]; if (string.IsNullOrWhiteSpace(upgradeInstancesPropertyValue)) { return; } upgradeInstancesPropertyValue = upgradeInstancesPropertyValue.Trim(); var forwardErrorMessagesPropertyValue = session["FORWARDERRORMESSAGES"]; try { options.OverrideEnableErrorForwarding = bool.Parse(forwardErrorMessagesPropertyValue); } catch { options.OverrideEnableErrorForwarding = null; } var auditRetentionPeriodPropertyValue = session["AUDITRETENTIONPERIOD"]; try { options.AuditRetentionPeriod = TimeSpan.Parse(auditRetentionPeriodPropertyValue); } catch { options.AuditRetentionPeriod = null; } var errorRetentionPeriodPropertyValue = session["ERRORRETENTIONPERIOD"]; try { options.ErrorRetentionPeriod = TimeSpan.Parse(errorRetentionPeriodPropertyValue); } catch { options.ErrorRetentionPeriod = null; } //determine what to upgrade var instancesToUpgrade = new List <ServiceControlInstance>(); if (upgradeInstancesPropertyValue.Equals("*", StringComparison.OrdinalIgnoreCase) || upgradeInstancesPropertyValue.Equals("ALL", StringComparison.OrdinalIgnoreCase)) { instancesToUpgrade.AddRange(ServiceControlInstance.Instances()); } else { var candidates = upgradeInstancesPropertyValue.Replace(" ", String.Empty).Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); instancesToUpgrade.AddRange(ServiceControlInstance.Instances().Where(instance => candidates.Contains(instance.Name, StringComparer.OrdinalIgnoreCase))); } // do upgrades foreach (var instance in instancesToUpgrade) { if (zipInfo.Version > instance.Version) { if (!instance.AppSettingExists(SettingsList.ForwardErrorMessages.Name) & !options.OverrideEnableErrorForwarding.Value) { logger.Warn($"Unattend upgrade {instance.Name} to {zipInfo.Version} not attempted. FORWARDERRORMESSAGES MSI parameter was required because appsettings needed a value for '{SettingsList.ForwardErrorMessages.Name}'"); continue; } if (!options.AuditRetentionPeriod.HasValue) { if (!instance.AppSettingExists(SettingsList.AuditRetentionPeriod.Name)) { //Try migration first if (instance.AppSettingExists(SettingsList.HoursToKeepMessagesBeforeExpiring.Name)) { var i = instance.ReadAppSetting(SettingsList.HoursToKeepMessagesBeforeExpiring.Name, -1); if (i > 0) { options.AuditRetentionPeriod = TimeSpan.FromHours(i); } } else { logger.Warn($"Unattend upgrade {instance.Name} to {zipInfo.Version} not attempted. AUDITRETENTIONPERIOD MSI parameter was required because appsettings needed a value for '{SettingsList.AuditRetentionPeriod.Name}'"); continue; } } } if (!instance.AppSettingExists(SettingsList.ErrorRetentionPeriod.Name) & !options.ErrorRetentionPeriod.HasValue) { logger.Warn($"Unattend upgrade {instance.Name} to {zipInfo.Version} not attempted. ERRORRETENTIONPERIOD MSI parameter was required because appsettings needed a value for '{SettingsList.ErrorRetentionPeriod.Name}'"); continue; } if (!unattendedInstaller.Upgrade(instance, options)) { logger.Warn($"Failed to upgrade {instance.Name} to {zipInfo.Version}"); } } } }