/// <summary> /// UpgradeServersConfig method implementation (Client) /// </summary> private void UpgradeServersConfig(NamedPipeRegistryRecord reg) { NamedPipeRegistryRecord rec = FarmUtilities.InitServerNodeConfiguration(reg); MFAConfig cfg = CFGUtilities.ReadConfiguration(null); ADFSServerHost svr = null; if (cfg.Hosts.ADFSFarm.Servers.Exists(s => s.FQDN.ToLower().Equals(rec.FQDN.ToLower()))) { svr = cfg.Hosts.ADFSFarm.Servers.Find(s => s.FQDN.ToLower().Equals(rec.FQDN.ToLower())); cfg.Hosts.ADFSFarm.Servers.Remove(svr); } svr = new ADFSServerHost(); svr.FQDN = rec.FQDN; svr.CurrentVersion = rec.CurrentVersion; svr.CurrentBuild = rec.CurrentBuild; svr.CurrentMajorVersionNumber = rec.CurrentMajorVersionNumber; svr.CurrentMinorVersionNumber = rec.CurrentMinorVersionNumber; svr.InstallationType = rec.InstallationType; svr.ProductName = rec.ProductName; svr.NodeType = rec.NodeType; svr.BehaviorLevel = rec.BehaviorLevel; svr.HeartbeatTmeStamp = rec.HeartbeatTimestamp; cfg.Hosts.ADFSFarm.Servers.Add(svr); CFGUtilities.WriteConfiguration(null, cfg); using (MailSlotClient mailslot = new MailSlotClient()) { mailslot.Text = Environment.MachineName; mailslot.SendNotification(NotificationsKind.ConfigurationReload); } }
/// <summary> /// InitServerNodeConfiguration2012 method implementation /// </summary> private static NamedPipeRegistryRecord InitServerNodeConfiguration2012(NamedPipeRegistryRecord reg) { reg.MachineName = GetMachineName(reg.FQDN); reg.BehaviorLevel = 1; reg.HeartbeatTimestamp = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, 0, DateTimeKind.Local); return(reg); }
/// <summary> /// InitFarmNodeConfiguration method implementation /// </summary> public static NamedPipeRegistryRecord InitServerNodeConfiguration(NamedPipeRegistryRecord reg) { NamedPipeRegistryRecord result = default(NamedPipeRegistryRecord); try { if (reg.IsWindows2019) { result = InitServerNodeConfiguration2019(reg); } else if (reg.IsWindows2016) { result = InitServerNodeConfiguration2016(reg); } else if (reg.IsWindows2012R2) { result = InitServerNodeConfiguration2012(reg); } } catch (Exception ex) { throw ex; } return(result); }
/// <summary> /// DoOnRequestServerConfiguration method implementation (Client) /// </summary> private void DoOnRequestServerConfiguration(string servername) { if (CFGUtilities.IsPrimaryComputer()) { List <string> lst = new List <string>() { servername }; PipeClient pipe = new PipeClient(XORUtilities.XORKey, lst); string req = Environment.MachineName; NamedPipeRegistryRecord reg = pipe.DoRequestServerConfiguration(req); UpgradeServersConfig(reg); } return; }
/// <summary> /// DoOnReceiveServerConfiguration method implementation (Server) /// </summary> private NamedPipeRegistryRecord DoOnReceiveServerConfiguration(string requestor) { RegistryVersion reg = new RegistryVersion(); NamedPipeRegistryRecord rec = default(NamedPipeRegistryRecord); rec.FQDN = Dns.GetHostEntry("LocalHost").HostName; rec.CurrentVersion = reg.CurrentVersion; rec.CurrentBuild = reg.CurrentBuild; rec.CurrentMajorVersionNumber = reg.CurrentMajorVersionNumber; rec.CurrentMinorVersionNumber = reg.CurrentMinorVersionNumber; rec.InstallationType = reg.InstallationType; rec.ProductName = reg.ProductName; rec.IsWindows2012R2 = reg.IsWindows2012R2; rec.IsWindows2016 = reg.IsWindows2016; rec.IsWindows2019 = reg.IsWindows2019; rec.NodeType = FarmUtilities.InitServerNodeType(); return(rec); }
/// <summary> /// InitServerNodeConfiguration2019 method implementation /// </summary> private static NamedPipeRegistryRecord InitServerNodeConfiguration2019(NamedPipeRegistryRecord reg) { Runspace SPRunSpace = null; PowerShell SPPowerShell = null; try { RunspaceConfiguration SPRunConfig = RunspaceConfiguration.Create(); SPRunSpace = RunspaceFactory.CreateRunspace(SPRunConfig); SPPowerShell = PowerShell.Create(); SPPowerShell.Runspace = SPRunSpace; SPRunSpace.Open(); Pipeline pipeline = SPRunSpace.CreatePipeline(); Command exportcmd = new Command("(Get-AdfsFarmInformation).FarmNodes", true); pipeline.Commands.Add(exportcmd); Collection <PSObject> PSOutput = pipeline.Invoke(); foreach (var item in PSOutput) { if (reg.FQDN.ToLower().Equals(item.Members["FQDN"].Value.ToString().ToLower())) { reg.FQDN = item.Members["FQDN"].Value.ToString(); reg.MachineName = GetMachineName(reg.FQDN); reg.BehaviorLevel = Convert.ToInt32(item.Members["BehaviorLevel"].Value); reg.HeartbeatTimestamp = Convert.ToDateTime(item.Members["HeartbeatTimeStamp"].Value); break; } } } finally { if (SPRunSpace != null) { SPRunSpace.Close(); } } return(reg); }