private void UpdateConnectorInstance() { //Get the server name to connect to and connect String strServerName = Registry.GetValue("HKEY_CURRENT_USER\\Software\\Microsoft\\System Center\\2010\\Service Manager\\Console\\User Settings", "SDKServiceMachine", "localhost").ToString(); EnterpriseManagementGroup emg = new EnterpriseManagementGroup(strServerName); //Get the Connectors MP and AA Connector Class ManagementPack mpConnectors = emg.GetManagementPack("SCSM.AzureAutomation", "ac1fe0583b6c84af", new Version("1.0.0.0")); ManagementPackClass classAAConnector = mpConnectors.GetClass("SCSM.AzureAutomation.Connector"); //Get the Connector object using the object ID EnterpriseManagementObject emoAAConnector = emg.EntityObjects.GetObject <EnterpriseManagementObject>(this.EnterpriseManagementObjectID, ObjectQueryOptions.Default); //Set the property values to the new values emoAAConnector[classAAConnector, "DisplayName"].Value = this.DisplayName; emoAAConnector[classAAConnector, "AutomationAccount"].Value = this.AutomationAccount; emoAAConnector[classAAConnector, "SubscriptionID"].Value = this.SubscriptionID; emoAAConnector[classAAConnector, "ResourceGroup"].Value = this.ResourceGroup; emoAAConnector[classAAConnector, "RunAsAccountName"].Value = this.RunAsAccountName; emoAAConnector[classAAConnector, "RunAsAccountPassword"].Value = this.RunAsAccountPassword; emoAAConnector[classAAConnector, "RefreshIntervalHours"].Value = this.RefreshIntervalHours; //Update Connector instance emoAAConnector.Commit(); mpConnectors.AcceptChanges(); }
public SMHandler() { String strSMServerName = null; try { strSMServerName = Registry.GetValue("HKEY_CURRENT_USER\\Software\\Microsoft\\System Center\\2010\\Service Manager\\Console\\User Settings", "SDKServiceMachine", "localhost").ToString(); } catch { Console.WriteLine("Cannot read the name of the SM Server from Registry."); Environment.Exit(2); } try { mg = new EnterpriseManagementGroup(strSMServerName); } catch { Console.WriteLine("Cannot connect to SM Server {0}", strSMServerName); Environment.Exit(2); } ManagementPack systemWorkitemMP = GetManagementPackByName("System.WorkItem.Library", this.mg); wiClass = systemWorkitemMP.GetClass(WIType); }
private static void getServiceManagerBrandingProperties(string managementServerName, string netbiosComputerName, ref string attestationFrequency, ref string ChargebackGroup, ref string Description, ref string NotificationGroup, ref string ServerOwner1, ref string ServiceLevel, ref string VirtualCenter) { //Connect to Management Group EnterpriseManagementGroup mg = new EnterpriseManagementGroup(managementServerName); ManagementPack mp = mg.GetManagementPack("GMI.SM.BaseClasses.Extension", "c17ba471fb087385", new Version()); ManagementPackClass requestClass = mp.GetClass("ClassExtension_c270fe5b_740f_4a9c_828c_b35e8fe739a9"); EnterpriseManagementObjectCriteria criteria = new EnterpriseManagementObjectCriteria(String.Format("NetbiosComputerName='{0}'", netbiosComputerName), requestClass); IObjectReader <EnterpriseManagementObject> reader = mg.EntityObjects.GetObjectReader <EnterpriseManagementObject>(criteria, ObjectQueryOptions.Default); foreach (EnterpriseManagementObject item in reader) { foreach (ManagementPackProperty mpp in item.GetProperties()) { switch (mpp.Name) { case "AttestationFrequency": try { attestationFrequency = item[mpp].Value.ToString(); } catch { ChargebackGroup = String.Empty; } break; case "ChargebackGroup": try { ChargebackGroup = item[mpp].Value.ToString(); } catch { ChargebackGroup = String.Empty; } break; case "Description": try { Description = item[mpp].Value.ToString(); } catch { Description = String.Empty; } break; case "NotificationGroup": try { NotificationGroup = item[mpp].Value.ToString(); } catch { ChargebackGroup = String.Empty; } break; case "ServerOwner1": try { ServerOwner1 = item[mpp].Value.ToString(); } catch { ChargebackGroup = String.Empty; } break; case "ServiceLevel": try { ServiceLevel = item[mpp].Value.ToString(); } catch { ChargebackGroup = String.Empty; } break; case "VirtualCenter": try { VirtualCenter = item[mpp].Value.ToString(); } catch { ChargebackGroup = String.Empty; } break; } } } }
private void UpdateConnectorInstance() { //Get the server name to connect to and connect String strServerName = Registry.GetValue("HKEY_CURRENT_USER\\Software\\Microsoft\\System Center\\2010\\Service Manager\\Console\\User Settings", "SDKServiceMachine", "localhost").ToString(); EnterpriseManagementGroup emg = new EnterpriseManagementGroup(strServerName); //Get the Connectors MP and CSV Connector Class ManagementPack mpConnectors = emg.GetManagementPack("Microsoft.Demo.Connectors", null, new Version("1.0.0.0")); ManagementPackClass classCSVConnector = mpConnectors.GetClass("Microsoft.Demo.Connectors.CSVConnector"); //Get the Connector object using the object ID EnterpriseManagementObject emoCSVConnector = emg.EntityObjects.GetObject <EnterpriseManagementObject>(this.EnterpriseManagementObjectID, ObjectQueryOptions.Default); //Set the property values to the new values emoCSVConnector[classCSVConnector, "DisplayName"].Value = this.DisplayName; emoCSVConnector[classCSVConnector, "DataFilePath"].Value = this.DataFilePath; emoCSVConnector[classCSVConnector, "DataFilePath"].Value = this.DataFilePath; emoCSVConnector[classCSVConnector, "MappingFilePath"].Value = this.MappingFilePath; emoCSVConnector[classCSVConnector, "NumberMinutes"].Value = this.NumberMinutes; //Update Connector instance emoCSVConnector.Commit(); //Get the rule using the Connector ID and then update the data source and write action module configuration ManagementPackRule ruleConnector = mpConnectors.GetRule(this.ConnectorID); ruleConnector.DataSourceCollection[0].Configuration = "<Scheduler>" + "<SimpleReccuringSchedule>" + "<Interval Unit=\"Minutes\">" + this.NumberMinutes + "</Interval>" + "</SimpleReccuringSchedule>" + "<ExcludeDates />" + "</Scheduler>"; ruleConnector.WriteActionCollection[0].Configuration = "<Subscription>" + "<WindowsWorkflowConfiguration>" + "<AssemblyName>CSVConnectorWorkflow</AssemblyName>" + "<WorkflowTypeName>WorkflowAuthoring.CSVConnectorWorkflow</WorkflowTypeName>" + "<WorkflowParameters>" + "<WorkflowParameter Name=\"DataFilePath\" Type=\"string\">" + this.DataFilePath + "</WorkflowParameter>" + "<WorkflowParameter Name=\"FormatFilePath\" Type=\"string\">" + this.MappingFilePath + "</WorkflowParameter>" + "</WorkflowParameters>" + "<RetryExceptions />" + "<RetryDelaySeconds>60</RetryDelaySeconds>" + "<MaximumRunningTimeSeconds>300</MaximumRunningTimeSeconds>" + "</WindowsWorkflowConfiguration>" + "</Subscription>"; ruleConnector.Status = ManagementPackElementStatus.PendingUpdate; mpConnectors.AcceptChanges(); }
internal CSVConnectorWizardData(EnterpriseManagementObject emoCSVConnector) { //Get the server name to connect to String strServerName = Registry.GetValue("HKEY_CURRENT_USER\\Software\\Microsoft\\System Center\\2010\\Service Manager\\Console\\User Settings", "SDKServiceMachine", "localhost").ToString(); //Conneect to the server EnterpriseManagementGroup emg = new EnterpriseManagementGroup(strServerName); ManagementPack mpConnectors = emg.GetManagementPack("Microsoft.Demo.Connectors", null, new Version("1.0.0.0")); ManagementPackClass classCSVConnector = mpConnectors.GetClass("Microsoft.Demo.Connectors.CSVConnector"); this.EnterpriseManagementObjectID = emoCSVConnector.Id; this.DisplayName = emoCSVConnector.DisplayName; this.DataFilePath = emoCSVConnector[classCSVConnector, "DataFilePath"].ToString(); this.MappingFilePath = emoCSVConnector[classCSVConnector, "MappingFilePath"].ToString(); this.NumberMinutes = emoCSVConnector[classCSVConnector, "NumberMinutes"].ToString(); this.ConnectorID = emoCSVConnector[classCSVConnector, "Id"].ToString(); }
internal IncidentSLASettingsWizardData(EnterpriseManagementObject emoIncidentSLASettings, EnterpriseManagementGroup emg) { //Get the IncidentSLAManagement MP so you can get the Admin Setting class ManagementPack mpIncidentSLAManagement = emg.GetManagementPack("Microsoft.Demo.IncidentSLAManagement.Library", "9396306c2be7fcc4", new Version("1.0.0.0")); ManagementPackClass classIncidentSLAManagementSettings = mpIncidentSLAManagement.GetClass("Microsoft.Demo.IncidentSLAManagement.Settings.ClassType"); Int32 intResult; bool bIsNumber = Int32.TryParse(emoIncidentSLASettings[classIncidentSLAManagementSettings, "IncidentSLABreachWarningThreshold"].ToString(), out intResult); if (bIsNumber) { this.intWarningThreshold = intResult; } else { this.intWarningThreshold = 0; } this.EnterpriseManagementObjectID = emoIncidentSLASettings.Id; }
internal AzureAutomationWizardData(EnterpriseManagementObject emoAAConnector) { //Get the server name to connect to String strServerName = Registry.GetValue("HKEY_CURRENT_USER\\Software\\Microsoft\\System Center\\2010\\Service Manager\\Console\\User Settings", "SDKServiceMachine", "localhost").ToString(); //Connect to the server EnterpriseManagementGroup emg = new EnterpriseManagementGroup(strServerName); ManagementPack mpConnectors = emg.GetManagementPack("SCSM.AzureAutomation", "ac1fe0583b6c84af", new Version("1.0.0.0")); ManagementPackClass classAAConnector = mpConnectors.GetClass("SCSM.AzureAutomation.Connector"); this.EnterpriseManagementObjectID = emoAAConnector.Id; this.DisplayName = emoAAConnector.DisplayName; this.ConnectorID = emoAAConnector[classAAConnector, "Id"].ToString(); this.AutomationAccount = emoAAConnector[classAAConnector, "AutomationAccount"].ToString(); this.SubscriptionID = emoAAConnector[classAAConnector, "SubscriptionID"].ToString(); this.ResourceGroup = emoAAConnector[classAAConnector, "ResourceGroup"].ToString(); this.RunAsAccountName = emoAAConnector[classAAConnector, "RunAsAccountName"].ToString(); this.RunAsAccountPassword = emoAAConnector[classAAConnector, "RunAsAccountPassword"].ToString(); this.RefreshIntervalHours = emoAAConnector[classAAConnector, "RefreshIntervalHours"].ToString(); }
public override void AcceptChanges(WizardMode wizardMode) { //Get the server name to connect to and connect String strServerName = Registry.GetValue("HKEY_CURRENT_USER\\Software\\Microsoft\\System Center\\2010\\Service Manager\\Console\\User Settings", "SDKServiceMachine", "localhost").ToString(); EnterpriseManagementGroup emg = new EnterpriseManagementGroup(strServerName); //Get the AdminSettings MP so you can get the Admin Setting class ManagementPack mpIncidentSLAManagement = emg.GetManagementPack("Microsoft.Demo.IncidentSLAManagement.Library", "9396306c2be7fcc4", new Version("1.0.0.0")); ManagementPackClass classIncidentSLAManagementSettings = mpIncidentSLAManagement.GetClass("Microsoft.Demo.IncidentSLAManagement.Settings.ClassType"); //Get the object using the object ID EnterpriseManagementObject emoIncidentSLASettings = emg.EntityObjects.GetObject <EnterpriseManagementObject>(this.EnterpriseManagementObjectID, ObjectQueryOptions.Default); //Set the property value to the new value emoIncidentSLASettings[classIncidentSLAManagementSettings, "IncidentSLABreachWarningThreshold"].Value = this.WarningThreshold; //Update object emoIncidentSLASettings.Commit(); this.WizardResult = WizardResult.Success; }
/// <summary> /// Creates the mp. /// </summary> private static void CreateESightConfigLibraryMp() { try { // var apmMpPath = @"E:\Projects\scom-plugin\SCOM\release\MPFiles\Temp"; OnLog("CreateESightConfigLibraryMp-ScomInstallPath:" + ScomInstallPath); var apmMpPath = $"{ScomInstallPath}\\Server\\ApmConnector"; OnLog(apmMpPath); var keyPath = $"{RunPath}\\..\\MPFiles\\Temp"; string outPath = $"{RunPath}\\..\\MPFiles"; string companyName = "广州摩赛网络技术有限公司"; string copyRight = "Copyright (c) 广州摩赛网络技术有限公司. All rights reserved."; string keyName = "esight.snk"; #region read eSight.View.Library var mpStore = new ManagementPackFileStore(); mpStore.AddDirectory(outPath); var reader = ManagementPackBundleFactory.CreateBundleReader(); var bundle = reader.Read($"{outPath}\\eSight.View.Library.mpb", mpStore); var eSightViewMp = bundle.ManagementPacks.FirstOrDefault(); if (eSightViewMp == null) { throw new Exception($"can not find mp : eSight.View.Library.mpb"); } #endregion var mMpStore = new ManagementPackFileStore(); mMpStore.AddDirectory(apmMpPath); mMpStore.AddDirectory(outPath); var mMp = new ManagementPack(ESightConfigLibraryName, ESightConfigLibraryName, eSightViewMp.Version, mMpStore); #region AddReferences var mLibraryMp = new ManagementPack($"{apmMpPath}\\System.Library.mp", mMpStore); var mWindowsLibraryMp = new ManagementPack($"{apmMpPath}\\Microsoft.SystemCenter.Library.mp", mMpStore); mMp.References.Add("System", new ManagementPackReference(mLibraryMp)); mMp.References.Add("SC", new ManagementPackReference(mWindowsLibraryMp)); mMp.References.Add("EVL", new ManagementPackReference(eSightViewMp)); #endregion #region AddView var view = new ManagementPackView(mMp, "ESight.Config.ESightConfigView", ManagementPackAccessibility.Public) { Target = mLibraryMp.GetClass("System.WebSite"), TypeID = mWindowsLibraryMp.GetViewType("Microsoft.SystemCenter.UrlViewType"), Description = "eSight Config View", DisplayName = "eSight Config View", Category = "Operations", Configuration = $"<Criteria><Url>https://localhost:{port}/StaticWeb/eSight.html</Url></Criteria><Presentation></Presentation><Target></Target>" }; var folderItem = new ManagementPackFolderItem("ESight.Config.ESightConfigView.FolderItem", view, eSightViewMp.GetFolder("ESight.Folder")); folderItem.Status = ManagementPackElementStatus.PendingAdd; #endregion mMp.AcceptChanges(); #region seal var mpWriterSettings = new ManagementPackAssemblyWriterSettings(companyName, Path.Combine(keyPath, keyName), false) { OutputDirectory = outPath, Copyright = copyRight }; ManagementPackAssemblyWriter mpWriter = new ManagementPackAssemblyWriter(mpWriterSettings); mpWriter.WriteManagementPack(mMp); #endregion // Remove Temp files if (Directory.Exists(keyPath)) { Directory.Delete(keyPath, true); } var tempFile = Path.Combine(RunPath, "..\\", "MPResources.resources"); if (File.Exists(tempFile)) { File.Delete(tempFile); } } catch (Exception ex) { OnLog($"create {ESightConfigLibraryName} faild", ex); throw; } }
//--------------------------------------------------------------------- private void PopulateObjectReference( ListViewItem item, string objectName, string objectType ) { if (objectType == "Monitors - Aggregate" || objectType == "Monitors - Unit" || objectType == "Monitors - Dependency") { item.Tag = m_managementPack.GetMonitor(objectName); } else if (objectType == "Rules") { item.Tag = m_managementPack.GetRule(objectName); } else if (objectType == "Views") { item.Tag = m_managementPack.GetView(objectName); } else if (objectType == "Discoveries") { item.Tag = m_managementPack.GetDiscovery(objectName); } else if (objectType == "Reports") { item.Tag = m_managementPack.GetReport(objectName); } else if (objectType == "Classes") { item.Tag = m_managementPack.GetClass(objectName); } else if (objectType == "Relationships") { item.Tag = m_managementPack.GetRelationship(objectName); } else if (objectType == "Tasks") { item.Tag = m_managementPack.GetTask(objectName); } else if (objectType == "Console Tasks") { item.Tag = m_managementPack.GetConsoleTask(objectName); } else if (objectType == "Linked Reports") { item.Tag = m_managementPack.GetLinkedReport(objectName); } else if (objectType == "Dependencies") { item.Tag = m_managementPack.References[objectName]; } else if (objectType == "Recoveries") { item.Tag = m_managementPack.GetRecovery(objectName); } else if (objectType == "Diagnostics") { item.Tag = m_managementPack.GetDiagnostic(objectName); } else if (objectType == "Overrides") { item.Tag = m_managementPack.GetOverride(objectName); } else if (objectType == "Groups") { item.Tag = m_managementPack.GetClass(objectName); } else if (objectType == "Resources") { item.Tag = m_managementPack.GetResource <ManagementPackResource>(objectName); } else if (objectType == "Dashboards and Widgets") { item.Tag = m_managementPack.GetComponentType(objectName); } }
public override void ExecuteCommand(IList <NavigationModelNodeBase> nodes, NavigationModelNodeTask task, ICollection <string> parameters) { try { //Connect to MG IServiceContainer isContainer = (IServiceContainer)FrameworkServices.GetService(typeof(IServiceContainer)); IManagementGroupSession imgSession = (IManagementGroupSession)isContainer.GetService(typeof(IManagementGroupSession)); if (imgSession == null) { MessageBox.Show("Failed to connect to the current session", "Assign Incident Settings", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } EnterpriseManagementGroup emg = imgSession.ManagementGroup; //Get the analyst settings class and MP ManagementPack mpSetting = emg.ManagementPacks.GetManagementPack(new Guid("56d5c2d6-7e19-59ff-7a81-ac8a331fcb3f")); ManagementPackClass classSettings = mpSetting.GetClass("AssignSettingsClass"); //Get the emo for the settings EnterpriseManagementObject emoSettings = emg.EntityObjects.GetObject <EnterpriseManagementObject>(classSettings.Id, ObjectQueryOptions.Default); //Setup form AdminForm af = new AdminForm(); if (emoSettings[classSettings, "AssignDomain1"].Value != null) { af.textD1.Text = emoSettings[classSettings, "AssignDomain1"].Value.ToString(); } if (emoSettings[classSettings, "AssignDomain2"].Value != null) { af.textD2.Text = emoSettings[classSettings, "AssignDomain2"].Value.ToString(); } if (emoSettings[classSettings, "AssignDomain3"].Value != null) { af.textD3.Text = emoSettings[classSettings, "AssignDomain3"].Value.ToString(); } if (emoSettings[classSettings, "AssignGroup1"].Value != null) { af.textG1.Text = emoSettings[classSettings, "AssignGroup1"].Value.ToString(); } if (emoSettings[classSettings, "AssignGroup2"].Value != null) { af.textG2.Text = emoSettings[classSettings, "AssignGroup2"].Value.ToString(); } if (emoSettings[classSettings, "AssignGroup2"].Value != null) { af.textG3.Text = emoSettings[classSettings, "AssignGroup3"].Value.ToString(); } if (emoSettings[classSettings, "AssignShowAccount"].Value != null) { if (emoSettings[classSettings, "AssignShowAccount"].Value.ToString() == "1") { af.checkShow.Checked = true; } } if (emoSettings[classSettings, "AssignShowTier"].Value != null) { if (emoSettings[classSettings, "AssignShowTier"].Value.ToString() == "1") { af.checkShowTier.Checked = true; } } if (emoSettings[classSettings, "AssignedUserAlias"].Value != null) { af.textAssignedUserName.Text = emoSettings[classSettings, "AssignedUserAlias"].Value.ToString(); } else { af.textAssignedUserName.Text = "AssignedUser"; } if (emoSettings[classSettings, "ActionLogAlias"].Value != null) { af.textActionLogName.Text = emoSettings[classSettings, "ActionLogAlias"].Value.ToString(); } else { af.textActionLogName.Text = "ActionLogs"; } DialogResult dr = af.ShowDialog(); if (dr != DialogResult.Cancel) { //save settings emoSettings[classSettings, "AssignDomain1"].Value = af.textD1.Text; emoSettings[classSettings, "AssignDomain2"].Value = af.textD2.Text; emoSettings[classSettings, "AssignDomain3"].Value = af.textD3.Text; emoSettings[classSettings, "AssignGroup1"].Value = af.textG1.Text; emoSettings[classSettings, "AssignGroup2"].Value = af.textG2.Text; emoSettings[classSettings, "AssignGroup3"].Value = af.textG3.Text; if (af.checkShow.Checked) { emoSettings[classSettings, "AssignShowAccount"].Value = "1"; } else { emoSettings[classSettings, "AssignShowAccount"].Value = "0"; } if (af.checkShowTier.Checked) { emoSettings[classSettings, "AssignShowTier"].Value = "1"; } else { emoSettings[classSettings, "AssignShowTier"].Value = "0"; } emoSettings[classSettings, "AssignedUserAlias"].Value = af.textAssignedUserName.Text; emoSettings[classSettings, "ActionLogAlias"].Value = af.textActionLogName.Text; emoSettings.Commit(); } } catch (System.Exception e) { MessageBox.Show(e.Message); return; } }
public override void ExecuteCommand(IList <NavigationModelNodeBase> nodes, NavigationModelNodeTask task, ICollection <string> parameters) { //Used for idataitem (form mode, 1=new form, 2=edit form); int iMode = 0; //Set title for messageboxes string sAppTitle = "Assign Incident Directly To Analyst"; //Connect to MG IServiceContainer isContainer = (IServiceContainer)FrameworkServices.GetService(typeof(IServiceContainer)); IManagementGroupSession imgSession = (IManagementGroupSession)isContainer.GetService(typeof(IManagementGroupSession)); if (imgSession == null) { MessageBox.Show("Failed to connect to the current session", sAppTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } EnterpriseManagementGroup emg = imgSession.ManagementGroup; //Get the incident class (System.WorkItem.Incident) ManagementPackClass classIncident = emg.EntityTypes.GetClass(new Guid("A604B942-4C7B-2FB2-28DC-61DC6F465C68")); //Microsoft.Windows.Library ManagementPack mpWindows = emg.ManagementPacks.GetManagementPack(new Guid("545131F0-58DE-1914-3A82-4FCAC9100A33")); //Get the Microsoft.AD.User class ManagementPackClass mpcADUser = emg.EntityTypes.GetClass("Microsoft.AD.User", mpWindows); //Return the currently selected incident reference NavigationModelNodeBase selincident = nodes[0]; //Form mode (not new)? if (selincident.Location.AbsoluteUri.IndexOf("FormDisplay", 0) > 0) { iMode = 2; } //Get objects EnterpriseManagementObject emoSelIncident = null; IDataItem i = ConsoleContextHelper.Instance.GetFormDataContext(nodes[0]); //Get the analyst settings class and MP ManagementPack mpSetting = emg.ManagementPacks.GetManagementPack(new Guid("56d5c2d6-7e19-59ff-7a81-ac8a331fcb3f")); ManagementPackClass classSettings = mpSetting.GetClass("AssignSettingsClass"); //Get the emo for the settings EnterpriseManagementObject emoSettings = emg.EntityObjects.GetObject <EnterpriseManagementObject>(classSettings.Id, ObjectQueryOptions.Default); //TP names string sAssignedTo = "AssignedUser"; string sActionLog = "ActionLogs"; if (emoSettings[classSettings, "AssignedUserAlias"].Value != null) { sAssignedTo = emoSettings[classSettings, "AssignedUserAlias"].Value.ToString(); } if (emoSettings[classSettings, "ActionLogAlias"].Value != null) { sActionLog = emoSettings[classSettings, "ActionLogAlias"].Value.ToString(); } //Check if new if (!(bool)i["$IsNew$"]) { //Now get the guid of the selected workitem. Depending on the view type, the return will be different, so take it after the last "." //There are lots of ways of doing this, this is not the best way but it was the first I learnt and it works string strGuid = selincident.GetId().Substring(selincident.GetId().LastIndexOf('.') + 1); //Get the emo of the workitem via it's guid emoSelIncident = emg.EntityObjects.GetObject <EnterpriseManagementObject>(new Guid(strGuid), ObjectQueryOptions.Default); } //Creating new incident else { iMode = 1; } //Was task was run from an workitem opened for editing, as opposed to a list or view? if (selincident.Location.AbsoluteUri.IndexOf("FormDisplay", 0) != -1) { iMode = 2; } //Get the status guid Guid gStatus = Guid.NewGuid(); try { //"New" status will throw an exception to must catch here if (i["Status"] != null) { gStatus = (Guid)(i["Status"] as IDataItem)["Id"]; } } catch { } //Get the incident class (System.WorkItem.Incident) ManagementPackClass mpcIncident = emg.EntityTypes.GetClass(new Guid("a604b942-4c7b-2fb2-28dc-61dc6f465c68")); //Check if the incident is closed if (gStatus == new Guid("bd0ae7c4-3315-2eb3-7933-82dfc482dbaf")) { MessageBox.Show("This incident cannot be reassigned as it has been closed.", sAppTitle, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //Note - we are alllowing resolved incidents to be re-assigned, to prevent this, uncomment the following block: /*else if (gStatus == new Guid("2b8830b6-59f0-f574-9c2a-f4b4682f1681")) * { * MessageBox.Show("This incident cannot be reassigned as it has been resolved.", sAppTitle, MessageBoxButtons.OK, MessageBoxIcon.Information); * return; * } */ //Current assignee and Id string sId = ""; string sUser = ""; string sTierGuid = ""; if (iMode == 0) { //View mode sUser = this.GetProperty(ref emg, emoSelIncident, ref mpcADUser, "DisplayName"); sId = emoSelIncident[mpcIncident, "Id"].Value.ToString(); if (emoSelIncident[mpcIncident, "TierQueue"].Value != null) { sTierGuid = ((ManagementPackEnumeration)emoSelIncident[mpcIncident, "TierQueue"].Value).Id.ToString(); } } else { //New or edit form mode try { //Get display name of current assignee if (i[sAssignedTo] == null) { sUser = "******"; } else { sUser = (string)(i[sAssignedTo] as IDataItem)["DisplayName"]; } } catch { //Set no assignee sUser = "******"; } sId = (string)i["Id"]; try { //Check current tier queue enum value if (i["TierQueue"] != null) { sTierGuid = ((Guid)(i["TierQueue"] as IDataItem)["Id"]).ToString(); } } catch { } } //Create a new instance of the form and set it up AssignForm af = new AssignForm(); af.sTierGuid = sTierGuid; af.Text = "Assign incident " + sId + " directly to Analyst - currently assigned to " + sUser; af.textDefault.Text = sUser; af.emg = emg; //Show the analyst/tier selection form DialogResult dr = af.ShowDialog(); if (dr != DialogResult.Cancel) { //Get the samaccountname from the right hand part of the combobox.text after the ! string sADUserName = af.comboAnalysts.Text.Substring(af.comboAnalysts.Text.LastIndexOf("(") + 1); //Remove last ) sADUserName = sADUserName.Substring(0, sADUserName.Length - 1); //Format to get the display name only from the left part - this is used for the actionlog entry string sADUserDisplayName = af.comboAnalysts.Text.Substring(0, af.comboAnalysts.Text.LastIndexOf("(")).Trim(); try { //Set the query for the user - note - usernames are assumed unique across configured domains //If this is not the case, you need to customise these criteria to include a domain string sADUserCriteria = String.Format(@" <Criteria xmlns=""http://Microsoft.EnterpriseManagement.Core.Criteria/""> <Reference Id=""Microsoft.Windows.Library"" PublicKeyToken=""{0}"" Version=""{1}"" Alias=""MSWinLib"" /> <Expression> <SimpleExpression> <ValueExpressionLeft> <Property>$Target/Property[Type='MSWinLib!Microsoft.AD.User']/UserName$</Property> </ValueExpressionLeft> <Operator>Equal</Operator> <ValueExpressionRight> <Value>" + sADUserName + @"</Value> </ValueExpressionRight> </SimpleExpression> </Expression> </Criteria> ", mpWindows.KeyToken, mpWindows.Version.ToString()); //Object query options ObjectQueryOptions objQueryOpts = new ObjectQueryOptions(); objQueryOpts.ObjectRetrievalMode = ObjectRetrievalOptions.Buffered; objQueryOpts.DefaultPropertyRetrievalBehavior = ObjectPropertyRetrievalBehavior.All; //We are searching via samAccountName so there will be only 1 item objQueryOpts.MaxResultCount = 1; //Get the AD User CI object EnterpriseManagementObjectCriteria emocADUser = new EnterpriseManagementObjectCriteria(sADUserCriteria, mpcADUser, emg); IObjectReader <EnterpriseManagementObject> orADUser = emg.EntityObjects.GetObjectReader <EnterpriseManagementObject>(emocADUser, objQueryOpts); EnterpriseManagementObject emoAssignToUser = orADUser.ElementAt(0); if (iMode == 0) { //View mode - create a new assigned to user relationship ManagementPackRelationship relAssignedToUser = emg.EntityTypes.GetRelationshipClass(new Guid("15e577a3-6bf9-6713-4eac-ba5a5b7c4722")); CreatableEnterpriseManagementRelationshipObject cemroAssignedToUser = new CreatableEnterpriseManagementRelationshipObject(emg, relAssignedToUser); //Set the source and target... cemroAssignedToUser.SetSource(emoSelIncident); cemroAssignedToUser.SetTarget(emoAssignToUser); //Save cemroAssignedToUser.Commit(); //Add a new comment this.AddActionLogEntry(emg, emoSelIncident, "Incident was assigned to " + sADUserDisplayName, af.textComment.Text); //Check tier if (af.bShowTier) { if (af.comboTier.Text == "") { emoSelIncident[classIncident, "TierQueue"].Value = null; } else { ManagementPackEnumeration mpeTier = emg.EntityTypes.GetEnumeration(new Guid(af.comboTierGuids.Items[af.comboTier.SelectedIndex].ToString())); emoSelIncident[classIncident, "TierQueue"].Value = mpeTier; } emoSelIncident.Commit(); } //Refresh the current incident view this.RequestViewRefresh(); } else { //Note - IDataItem property names depend on the type projection being used and may differ from these //Form mode, create a proxy to the emo user object to set on the form EnterpriseManagementObjectDataType dataType = new EnterpriseManagementObjectDataType(mpcADUser); IDataItem iUser = dataType.CreateProxyInstance(emoAssignToUser); i[sAssignedTo] = iUser; //Check tier if (af.bShowTier) { if (af.comboTier.Text == "") { //Remove tier i["TierQueue"] = null; } else { //Set tier, get enum first ManagementPackEnumeration mpeTier = emg.EntityTypes.GetEnumeration(new Guid(af.comboTierGuids.Items[af.comboTier.SelectedIndex].ToString())); i["TierQueue"] = mpeTier; } } //Uncommenting this will cause the IDataItem to be saved and thus update the actual object in the database, normally you don't want to do this //as you want the user to click OK or cancel on the form instead //EnterpriseManagementObjectProjectionDataType.UpdateDataItem(i); //IDataItem Action log // //Get the System.WorkItem.Library mp ManagementPack mpWorkItemLibrary = emg.ManagementPacks.GetManagementPack(new Guid("405D5590-B45F-1C97-024F-24338290453E")); //Get the actionlog class ManagementPackClass mpcActionLog = emg.EntityTypes.GetClass("System.WorkItem.TroubleTicket.ActionLog", mpWorkItemLibrary); //Create a new action log entry as an idataitem CreatableEnterpriseManagementObject cemoActionLog = new CreatableEnterpriseManagementObject(emg, mpcActionLog); EnterpriseManagementObjectDataType dataTypeLog = new EnterpriseManagementObjectDataType(mpcActionLog); IDataItem iLog = dataTypeLog.CreateProxyInstance(cemoActionLog); //Setup the new action log entry iLog["Id"] = Guid.NewGuid().ToString(); iLog["Description"] = af.textComment.Text; iLog["Title"] = "Reassignment Comment"; iLog["EnteredBy"] = UserPrincipal.Current.DisplayName; iLog["EnteredDate"] = DateTime.Now.ToUniversalTime(); //Set action type (this also adds the icon and is required) ManagementPackEnumeration enumActionLog = mpWorkItemLibrary.GetEnumerations().GetItem("System.WorkItem.ActionLogEnum.TaskExecuted"); iLog["ActionType"] = enumActionLog; //This adds the new idataitem log entry to the entries displayed on the form, it does not over-write the existing entries i[sActionLog] = iLog; } } catch (System.Exception e) { //Oops MessageBox.Show(e.Message + "\n\n" + e.StackTrace, sAppTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } } }
public override void ExecuteCommand(IList <NavigationModelNodeBase> nodes, NavigationModelNodeTask task, ICollection <string> parameters) { if (parameters.Contains("Create")) { WizardStory wizard = new WizardStory(); //set the icon and title bar ResourceManager rm = new ResourceManager("SCSM.AzureAutomation.WPF.Connector.Resources", typeof(Resources).Assembly); Bitmap bitmap = (Bitmap)rm.GetObject("AzureAutomation2x24"); IntPtr ptr = bitmap.GetHbitmap(); BitmapSource bitmapsource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(ptr, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); wizard.StoryImage = bitmapsource; wizard.WizardWindowTitle = "Create Azure Automation Connector"; WizardData data = new AzureAutomationWizardData(); wizard.WizardData = data; //add th pages wizard.AddLast(new WizardStep("Welcome", typeof(AzureAutomationWelcomePage), wizard.WizardData)); wizard.AddLast(new WizardStep("Configuration", typeof(AzureAutomationConfigurationPage), wizard.WizardData)); wizard.AddLast(new WizardStep("Summary", typeof(AzureAutomationSummaryPage), wizard.WizardData)); wizard.AddLast(new WizardStep("Results", typeof(AzureAutomationResultPage), wizard.WizardData)); //Create a wizard window and show it WizardWindow wizardwindow = new WizardWindow(wizard); // this is needed so that WinForms will pass messages on to the hosted WPF control System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(wizardwindow); wizardwindow.ShowDialog(); //Update the view when done with the wizard so that the new connector shows if (data.WizardResult == WizardResult.Success) { RequestViewRefresh(); } } else if (parameters.Contains("Edit")) { //Get the server name to connect to and connect to the server String strServerName = Registry.GetValue("HKEY_CURRENT_USER\\Software\\Microsoft\\System Center\\2010\\Service Manager\\Console\\User Settings", "SDKServiceMachine", "localhost").ToString(); EnterpriseManagementGroup emg = new EnterpriseManagementGroup(strServerName); //Get the object using the selected node ID String strID = String.Empty; foreach (NavigationModelNodeBase node in nodes) { strID = node["$Id$"].ToString(); } EnterpriseManagementObject emoAAConnector = emg.EntityObjects.GetObject <EnterpriseManagementObject>(new Guid(strID), ObjectQueryOptions.Default); //Create a new "wizard" (also used for property dialogs as in this case), set the title bar, create the data, and add the pages WizardStory wizard = new WizardStory(); wizard.WizardWindowTitle = "Edit Azure Automation Connector"; WizardData data = new AzureAutomationWizardData(emoAAConnector); wizard.WizardData = data; wizard.AddLast(new WizardStep("Configuration", typeof(AzureAutomationConfigurationPage), wizard.WizardData)); //Show the property page PropertySheetDialog wizardWindow = new PropertySheetDialog(wizard); //Update the view when done so the new values are shown bool?dialogResult = wizardWindow.ShowDialog(); if (dialogResult.HasValue && dialogResult.Value) { RequestViewRefresh(); } } else if (parameters.Contains("Delete") || parameters.Contains("Disable") || parameters.Contains("Enable")) { //Get the server name to connect to and create a connection String strServerName = Registry.GetValue("HKEY_CURRENT_USER\\Software\\Microsoft\\System Center\\2010\\Service Manager\\Console\\User Settings", "SDKServiceMachine", "localhost").ToString(); EnterpriseManagementGroup emg = new EnterpriseManagementGroup(strServerName); //Get the object using the selected node ID String strID = String.Empty; foreach (NavigationModelNodeBase node in nodes) { strID = node["$Id$"].ToString(); } EnterpriseManagementObject emoAAConnector = emg.EntityObjects.GetObject <EnterpriseManagementObject>(new Guid(strID), ObjectQueryOptions.Default); if (parameters.Contains("Delete")) { //Remove the object from the database IncrementalDiscoveryData idd = new IncrementalDiscoveryData(); idd.Remove(emoAAConnector); idd.Commit(emg); } //Get the rule using the connector ID ManagementPack mpConnectors = emg.GetManagementPack("SCSM.AzureAutomation", "ac1fe0583b6c84af", new Version("1.0.0.0")); ManagementPack mpAAConnectorWorkflows = emg.GetManagementPack("SCSM.AzureAutomation.Workflows", null, new Version("1.0.0.0")); ManagementPackClass classAAConnector = mpConnectors.GetClass("SCSM.AzureAutomation.Connector"); String strConnectorID = emoAAConnector[classAAConnector, "Id"].ToString(); ManagementPackRule ruleConnector = mpAAConnectorWorkflows.GetRule(strConnectorID); //Update the Enabled property or delete as appropriate if (parameters.Contains("Delete")) { ruleConnector.Status = ManagementPackElementStatus.PendingDelete; } else if (parameters.Contains("Disable")) { emoAAConnector[classAAConnector, "Enabled"].Value = false; ruleConnector.Enabled = ManagementPackMonitoringLevel.@false; ruleConnector.Status = ManagementPackElementStatus.PendingUpdate; } else if (parameters.Contains("Enable")) { emoAAConnector[classAAConnector, "Enabled"].Value = true; ruleConnector.Enabled = ManagementPackMonitoringLevel.@true; ruleConnector.Status = ManagementPackElementStatus.PendingUpdate; } //Commit the changes to the connector object and rule emoAAConnector.Commit(); mpAAConnectorWorkflows.AcceptChanges(); //Update the view when done so the item is either removed or the updated Enabled value shows RequestViewRefresh(); } }
private void CreateConnectorInstance() { try { //Get the server name to connect to String strServerName = Registry.GetValue("HKEY_CURRENT_USER\\Software\\Microsoft\\System Center\\2010\\Service Manager\\Console\\User Settings", "SDKServiceMachine", "localhost").ToString(); //Conneect to the server EnterpriseManagementGroup emg = new EnterpriseManagementGroup(strServerName); //Get the System MP so we can get the system key token and version so we can get other MPs using that info ManagementPack mpSystem = emg.ManagementPacks.GetManagementPack(SystemManagementPack.System); string strSystemKeyToken = mpSystem.KeyToken; ManagementPack mpSubscriptions = emg.GetManagementPack("Microsoft.SystemCenter.Subscriptions", strSystemKeyToken, new Version("1.0.0.0")); //Also get the System Center and Connector MPs - we'll need things from those MPs later ManagementPack mpSystemCenter = emg.ManagementPacks.GetManagementPack(SystemManagementPack.SystemCenter); ManagementPack mpConnectors = emg.GetManagementPack("SCSM.AzureAutomation", "ac1fe0583b6c84af", new Version("1.0.0.0")); ManagementPack mpAAConnectorWorkflows = emg.GetManagementPack("SCSM.AzureAutomation.Workflows", null, new Version("1.0.0.0")); //Get the AzureAutomationConnector class in the Connectors MP ManagementPackClass classAAConnector = mpConnectors.GetClass("SCSM.AzureAutomation.Connector"); //Create a new CreatableEnterpriseManagementObject. We'll set the properties on this and then post it to the database. EnterpriseManagementObject cemoAAConnector = new CreatableEnterpriseManagementObject(emg, classAAConnector); //Sytem.Entity properties cemoAAConnector[classAAConnector, "DisplayName"].Value = this.DisplayName; //Required //Microsoft.SystemCenter.Connector properties //This is just a tricky way to create a unique ID which conforms to the syntax rules for MP element ID attribute values. String strConnectorID = String.Format(CultureInfo.InvariantCulture, "{0}.{1}", "AAConnector", Guid.NewGuid().ToString("N")); cemoAAConnector[classAAConnector, "Id"].Value = strConnectorID; //Required; Key //System.LinkingFramework.DataSource properties cemoAAConnector[classAAConnector, "DataProviderDisplayName"].Value = "Azure Automation Connector"; //Optional, shown in Connectors view cemoAAConnector[classAAConnector, "Enabled"].Value = true; //Optional, shown in Connectors view cemoAAConnector[classAAConnector, "Name"].Value = this.DisplayName; //SCSM.AzureAutomation.Connector properties cemoAAConnector[classAAConnector, "AutomationAccount"].Value = this.AutomationAccount; cemoAAConnector[classAAConnector, "SubscriptionID"].Value = this.SubscriptionID; cemoAAConnector[classAAConnector, "ResourceGroup"].Value = this.ResourceGroup; cemoAAConnector[classAAConnector, "RunAsAccountName"].Value = this.RunAsAccountName; cemoAAConnector[classAAConnector, "RunAsAccountPassword"].Value = this.RunAsAccountPassword; cemoAAConnector[classAAConnector, "RefreshIntervalHours"].Value = this.RefreshIntervalHours; //Create Connector instance cemoAAConnector.Commit(); //Now we need to create the CSV Connector rule... //Get the Scheduler data source module type from the System MP and the Windows Workflow Task Write Action Module Type from the Subscription MP ManagementPackDataSourceModuleType dsmtScheduler = (ManagementPackDataSourceModuleType)mpSystem.GetModuleType("System.Scheduler"); ManagementPackWriteActionModuleType wamtWindowsWorkflowTaskWriteAction = (ManagementPackWriteActionModuleType)mpSubscriptions.GetModuleType("Microsoft.EnterpriseManagement.SystemCenter.Subscription.WindowsWorkflowTaskWriteAction"); //Create a new rule for the CSV Connector in the Connectors MP. Set the name of this rule to be the same as the connector instance ID so there is a pairing between them ManagementPackRule ruleAAConnector = new ManagementPackRule(mpAAConnectorWorkflows, strConnectorID); //Set the target and other properties of the rule ruleAAConnector.Target = mpSystemCenter.GetClass("Microsoft.SystemCenter.SubscriptionWorkflowTarget"); //Create a new Data Source Module in the new CSV Connector rule ManagementPackDataSourceModule dsmSchedule = new ManagementPackDataSourceModule(ruleAAConnector, "DS1"); //Set the configuration of the data source rule. Pass in the frequency (number of minutes) dsmSchedule.Configuration = "<Scheduler>" + "<SimpleReccuringSchedule>" + "<Interval Unit=\"Hours\">" + strRefreshIntervalHours + "</Interval>" + "</SimpleReccuringSchedule>" + "<ExcludeDates />" + "</Scheduler>"; //Set the Schedule Data Source Module Type to the Simple Schedule Module Type from the System MP dsmSchedule.TypeID = dsmtScheduler; //Add the Scheduler Data Source to the Rule ruleAAConnector.DataSourceCollection.Add(dsmSchedule); //Now repeat essentially the same process for the Write Action module... //Create a new Write Action Module in the CSV Connector rule ManagementPackWriteActionModule wamAAConnector = new ManagementPackWriteActionModule(ruleAAConnector, "WA1"); //Set the Configuration XML wamAAConnector.Configuration = "<Subscription>" + "<WindowsWorkflowConfiguration>" + //Specify the Windows Workflow Foundation workflow Assembly name here "<AssemblyName>SCSM.AzureAutomation.Workflows.AT</AssemblyName>" + //Specify the type name of the workflow to call in the assembly here: "<WorkflowTypeName>WorkflowAuthoring.RefreshConnector</WorkflowTypeName>" + "<WorkflowParameters>" + //Pass in the parameters here. In this case the two parameters are the data file path and the mapping file path "<WorkflowParameter Name=\"RefreshConnectorScript_ConnectorId\" Type=\"string\">" + strConnectorID + "</WorkflowParameter>" + "</WorkflowParameters>" + "<RetryExceptions />" + "<RetryDelaySeconds>60</RetryDelaySeconds>" + "<MaximumRunningTimeSeconds>300</MaximumRunningTimeSeconds>" + "</WindowsWorkflowConfiguration>" + "</Subscription>"; //Set the module type of the module to be the Windows Workflow Task Write Action Module Type from the Subscriptions MP. wamAAConnector.TypeID = wamtWindowsWorkflowTaskWriteAction; //Add the Write Action Module to the rule ruleAAConnector.WriteActionCollection.Add(wamAAConnector); //Mark the rule as pending update ruleAAConnector.Status = ManagementPackElementStatus.PendingAdd;; //Accept the rule changes which updates the database mpAAConnectorWorkflows.AcceptChanges(); } catch (Exception e) { MessageBox.Show(e.Message + e.InnerException.Message); } }
//Read analysts from the AD groups private bool PopulateAnalysts( ComboBox cbox, string sDefaultUser ) { try { //Get the analyst settings class and MP ManagementPack mpSetting = emg.ManagementPacks.GetManagementPack(new Guid("56d5c2d6-7e19-59ff-7a81-ac8a331fcb3f")); ManagementPackClass classSettings = mpSetting.GetClass("AssignSettingsClass"); //Get the emo for the settings EnterpriseManagementObject emoSettings = emg.EntityObjects.GetObject <EnterpriseManagementObject>(classSettings.Id, ObjectQueryOptions.Default); if (emoSettings[classSettings, "AssignDomain1"].Value != null && emoSettings[classSettings, "AssignGroup1"].Value != null && emoSettings[classSettings, "AssignDomain1"].Value.ToString() != "" && emoSettings[classSettings, "AssignGroup1"].Value.ToString() != "") { AddUsers(emoSettings[classSettings, "AssignDomain1"].Value.ToString(), emoSettings[classSettings, "AssignGroup1"].Value.ToString(), classSettings, emoSettings, cbox); } if (emoSettings[classSettings, "AssignDomain2"].Value != null && emoSettings[classSettings, "AssignGroup2"].Value != null && emoSettings[classSettings, "AssignDomain2"].Value.ToString() != "" && emoSettings[classSettings, "AssignGroup2"].Value.ToString() != "") { AddUsers(emoSettings[classSettings, "AssignDomain2"].Value.ToString(), emoSettings[classSettings, "AssignGroup2"].Value.ToString(), classSettings, emoSettings, cbox); } if (emoSettings[classSettings, "AssignDomain3"].Value != null && emoSettings[classSettings, "AssignGroup3"].Value != null && emoSettings[classSettings, "AssignDomain3"].Value.ToString() != "" && emoSettings[classSettings, "AssignGroup3"].Value.ToString() != "") { AddUsers(emoSettings[classSettings, "AssignDomain3"].Value.ToString(), emoSettings[classSettings, "AssignGroup3"].Value.ToString(), classSettings, emoSettings, cbox); } //Set currently assigned to user foreach (string s in cbox.Items) { if (s.IndexOf(this.textDefault.Text) != -1) { cbox.Text = s; } } //Check tier settings and populate/show if required if (emoSettings[classSettings, "AssignShowTier"].Value != null && emoSettings[classSettings, "AssignShowTier"].Value.ToString() == "1") { this.comboTier.Visible = true; this.labelTier.Visible = true; this.bShowTier = true; BuildTierList(this.comboTier, this.comboTierGuids); //Set default tier if (this.sTierGuid != "") { this.comboTier.SelectedIndex = this.comboTierGuids.FindStringExact(this.sTierGuid); } } return(true); } catch { MessageBox.Show("Failed to read the assign settings, check configuration.", "Check Configuration", MessageBoxButtons.OK, MessageBoxIcon.Information); return(false); } }