예제 #1
0
        /// <summary>
        /// Gets the information for the system specified
        /// </summary>
        /// <param name="SystemName">System to get the information from.</param>
        /// <returns>Returns a List of machine objects.  This allows the ability to account for
        /// multiple entries with the same name.
        /// </returns>
        public List <Machine> SystemInfo(string SystemName)
        {
            //Gets basic information from system
            string                 mySearch   = string.Format("core.executeQuery?target=EPOLeafNode&select=(select+EPOLeafNode.AgentGUID+EPOLeafNode.AutoID+EPOLeafNode.NodeName+EPOLeafNode.LastUpdate+EPOLeafNode.Tags+EPOLeafNode.AgentVersion+EPOBranchNode.NodeTextPath2+EPOComputerProperties.DomainName+EPOComputerProperties.OSType+EPOComputerProperties.OSVersion+EPOComputerProperties.OSServicePackVer+EPOComputerProperties.UserProperty1+EPOComputerProperties.UserProperty2+EPOComputerProperties.UserProperty3+EPOComputerProperties.UserProperty4+EPOComputerProperties.Description)&where=(where(contains+EPOLeafNode.NodeName+%22{0}%22))", SystemName);
            List <Machine>         systemList = new List <Machine>();
            apiReturn              myReturn   = this.ProcessApiCallGet(mySearch);
            XDocument              xDoc       = XDocument.Parse(myReturn.Data);
            IEnumerable <XElement> Systems    = xDoc.Descendants("row");

            foreach (XElement systemz in Systems)
            {
                Machine newSystem = new Machine(systemz.Element("EPOLeafNode.AgentGUID").Value, systemz.Element("EPOLeafNode.AutoID").Value,
                                                systemz.Element("EPOLeafNode.NodeName").Value, systemz.Element("EPOLeafNode.LastUpdate").Value,
                                                systemz.Element("EPOLeafNode.Tags").Value, systemz.Element("EPOLeafNode.AgentVersion").Value,
                                                systemz.Element("EPOBranchNode.NodeTextPath2").Value, systemz.Element("EPOComputerProperties.DomainName").Value,
                                                systemz.Element("EPOComputerProperties.OSType").Value, systemz.Element("EPOComputerProperties.OSVersion").Value,
                                                systemz.Element("EPOComputerProperties.OSServicePackVer").Value, systemz.Element("EPOComputerProperties.UserProperty1").Value,
                                                systemz.Element("EPOComputerProperties.UserProperty2").Value, systemz.Element("EPOComputerProperties.UserProperty3").Value,
                                                systemz.Element("EPOComputerProperties.UserProperty4").Value, systemz.Element("EPOComputerProperties.Description").Value
                                                );

                systemList.Add(newSystem);
            }
            return(systemList);
        }
예제 #2
0
        /// <summary>
        /// Gets a list of tags located in the ePo server
        /// </summary>
        /// <returns>List of of Tag objects </returns>
        public List <Tag> GetTags()
        {
            //Gets the list of tags located in the ePO Server and returns it
            //as a dictionary.
            List <Tag> tagList = new List <Tag>();

            try
            {
                //Gets a list of tags located in the ePO Server.
                string mySearch = string.Format("system.findTag?");

                apiReturn myReturn = this.ProcessApiCallGet(mySearch);

                if (myReturn.Status != "#ERROR#")
                {
                    XDocument xDoc = XDocument.Parse(myReturn.Data);
                    IEnumerable <XElement> Tags = xDoc.Descendants("TagEPO");
                    foreach (XElement Tag in Tags)
                    {
                        Tag newTag = new Tag(Tag.Element("tagId").Value, Tag.Element("tagName").Value, Tag.Element("tagNotes").Value);

                        tagList.Add(newTag);
                    }
                }
            }
            catch (Exception)
            {
                //If an error is received it clears out the dictionary
                //so that a empty dictionary is returned.
                tagList.Clear();
            }
            return(tagList);
        }
예제 #3
0
        /// <summary>
        /// Used to set the custom fields and the description fields of
        /// a system in ePo.
        /// </summary>
        /// <param name="systemNames">List of systems to set the properties on</param>
        /// <param name="description">Value to set the description field</param>
        /// <param name="cust1">Value to set the CustomField1</param>
        /// <param name="cust2">Value to set the CustomField2</param>
        /// <param name="cust3">Value to set the CustomField3</param>
        /// <param name="cust4">Value to set the CustomField4</param>
        /// <returns>Returns a dictionary object with the key being the system name
        /// and the value being the inner message of success or failure.
        /// </returns>
        public Dictionary <string, string> setSystemProps(List <string> systemNames, string description = "", string cust1 = "", string cust2 = "", string cust3 = "", string cust4 = "")
        {
            string props = "";

            props += description != "" ? "&description=" + description : "";
            props += cust1 != "" ? "&customField1=" + cust1 : "";
            props += cust2 != "" ? "&customField2=" + cust2 : "";
            props += cust3 != "" ? "&customField3=" + cust3 : "";
            props += cust4 != "" ? "&customField4=" + cust4 : "";

            Dictionary <string, string> sysDict = new Dictionary <string, string>();

            List <IEnumerable <string> > L = this.Group(systemNames);

            foreach (var x in L)
            {
                string sysString = string.Join(",", x.ToArray());

                string    mySearch             = string.Format("system.setUserProperties?names={0}{1}", sysString, props);
                apiReturn myReturn             = this.ProcessApiCallGet(mySearch);
                XDocument xDoc                 = XDocument.Parse(myReturn.Data);
                IEnumerable <XElement> results = xDoc.Descendants("CmdReturnStatus");

                foreach (XElement r in results)
                {
                    sysDict.Add(r.Element("name").Value, r.Element("message").Value);
                }
            }

            return(sysDict);
        }
예제 #4
0
        /// <summary>
        /// This allows you to create your own query and
        /// will run it against the ePO server.
        /// </summary>
        /// <param name="CustomQuery">Query string to be run</param>
        /// <param name="oFormat">The format for the return.  Uses an Output object</param>
        /// <returns>Returns the results of the query as a string.  Defaults to verbose.</returns>
        public string RunQueryGet(string CustomQuery, Output oFormat = Output.verbose)
        {
            //Runs query that is specified
            apiReturn aR = this.ProcessApiCallGet(CustomQuery, oFormat);

            return(aR.Data);
        }
예제 #5
0
        /// <summary>
        /// Clears the tag from a system
        /// </summary>
        /// <param name="system">Name or ID of system</param>
        /// <param name="tag">Tag to be cleared to the system.</param>
        /// <returns>Number of systems the tag was cleared from</returns>
        public int ClearTag(string system, string tag)
        {
            //Clears the specified tag from the system
            string    mySearch = string.Format("system.clearTag?names={0}&tagName={1}", system, tag);
            apiReturn myReturn = this.ProcessApiCallGet(mySearch);

            if (myReturn.Status != "#ERROR#")
            {
                XDocument xDoc = XDocument.Parse(myReturn.Data);
                IEnumerable <XElement> results = xDoc.Descendants("result");
                return(Int32.Parse(results.First().Value));
            }
            else
            {
                return(-99);
            }
        }
예제 #6
0
        /// <summary>
        /// Clears the tag from a system
        /// </summary>
        /// <param name="systems">List of system by name or ID</param>
        /// <param name="tag">Tag to be cleared to the systems</param>
        /// <returns>Number of systems the tag was cleared from</returns>
        public int ClearTag(List <string> systems, string tag)
        {
            //Clears the specified tag from a list of system
            List <IEnumerable <string> > L = this.Group(systems);
            int countOfAdditions           = 0;

            foreach (var x in L)
            {
                string    sysString = string.Join(",", x.ToArray());
                string    mySearch  = string.Format("system.clearTag?&tagName={0}&names={1}", tag, sysString);
                apiReturn myReturn  = this.ProcessApiCallGet(mySearch);
                if (myReturn.Status != "#ERROR#")
                {
                    XDocument xDoc = XDocument.Parse(myReturn.Data);
                    IEnumerable <XElement> results = xDoc.Descendants("result");
                    countOfAdditions += Int32.Parse(results.First().Value);
                }
            }
            return(countOfAdditions);
        }
예제 #7
0
        /// <summary>
        /// Issue Wakeup Call to a list of system.
        /// </summary>
        /// <param name="systems">List of System names or IDs</param>
        /// <param name="tag">Tag to be applied to the system</param>
        /// <returns>Number of systems tagged</returns>
        public string Wakeup(List <string> systems,
                             string fullProps      = "true", string superAgent           = "true",
                             string RandomMinutes  = "0", string forceFullPolicyUpdate   = "true",
                             string useAllHandlers = "true", string retryIntervalSeconds = "60",
                             string attempts       = "0", string abortAfterMinutes       = "20")
        {
            //Wakes up a list of systems
            List <IEnumerable <string> > L = this.Group(systems);
            string myValue = "";

            foreach (var x in L)
            {
                string sysString = string.Join(",", x.ToArray());
                string mySearch  = string.Format("system.wakeupAgent?names={0}&fullProps={1}&superAgent={2}&randomMinutes={3}&forceFullPolicyUpdate={4}&useAllHandlers={5}&retryIntervalSeconds={6}&attempts={7}&abortAfterMinutes={8}",
                                                 sysString, fullProps, superAgent, RandomMinutes, forceFullPolicyUpdate, useAllHandlers, retryIntervalSeconds, attempts, abortAfterMinutes);
                apiReturn myReturn = this.ProcessApiCallGet(mySearch, Output.verbose);
                myValue += myReturn.Data + "\n";
            }

            return(myValue);
        }
예제 #8
0
        /// <summary>
        /// Creates a basic tag in ePO
        /// </summary>
        /// <param name="TagName">Name of the tag to be created</param>
        /// <param name="TagNote">A brief note about what the tag is for.</param>
        /// <returns>Number of tags created</returns>
        public int CreateTag(string TagName, string TagNote = "Script Addition")
        {
            string myUrl        = "system.importTag";
            string divideString = DateTime.Now.Ticks.ToString("x");
            string ContentType  = string.Format("multipart/form-data; boundary=----------{0}", divideString);
            string PostData     = string.Format("------------{0}", divideString);

            PostData += "\r\n" + @"Content-Disposition: form-data; name=""uploadFile""; filename=""tricked.xml""";
            PostData += "\r\n" + @"Content-Type: multipart/form-data" + "\r\n\r\n";

            PostData += string.Format(@"<?xml version=""1.0"" encoding=""UTF-8""?>
                <epo:EPOTagSchema xmlns:epo=""mcafee-epo-policyassignmentrule"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
                <EPOTag name=""{0}"" id=""99"" notes=""{1}"" uniquekey=""null"" family=""EPO"" criteria="""" whereclause="""" executeonasci=""false"">
                </EPOTag>
                </epo:EPOTagSchema>", TagName, TagNote) + "\r\n";

            PostData += "------------" + divideString + "--";

            apiReturn myReturn = ProcessApiCallPOST(myUrl, ContentType, PostData);

            if (myReturn.Status != "#ERROR#")
            {
                if (myReturn.Data.ToUpper().Contains("TRUE"))
                {
                    return(1);
                }
                else
                {
                    return(0);
                }
            }
            else
            {
                return(-99);
            }
        }
예제 #9
0
        /// <summary>
        /// Used to set the custom fields and the description fields of
        /// a system in ePo.
        /// </summary>
        /// <param name="systemName">Name or Id of system to set the properties of </param>
        /// <param name="description">Value to set the description field</param>
        /// <param name="cust1">Value to set the CustomField1</param>
        /// <param name="cust2">Value to set the CustomField2</param>
        /// <param name="cust3">Value to set the CustomField3</param>
        /// <param name="cust4">Value to set the CustomField4</param>
        /// <returns>Returns string out from the setUserProperties method.</returns>
        public string setSystemProps(string systemName, string description = "", string cust1 = "", string cust2 = "", string cust3 = "", string cust4 = "")
        {
            string props = "";

            props += description != "" ? "&description=" + description : "";
            props += cust1 != "" ? "&customField1=" + cust1 : "";
            props += cust2 != "" ? "&customField2=" + cust2 : "";
            props += cust3 != "" ? "&customField3=" + cust3 : "";
            props += cust4 != "" ? "&customField4=" + cust4 : "";

            string    mySearch = string.Format("system.setUserProperties?names={0}{1}", systemName, props);
            apiReturn myReturn = this.ProcessApiCallGet(mySearch);

            if (myReturn.Status != "#ERROR#")
            {
                XDocument xDoc = XDocument.Parse(myReturn.Data);
                IEnumerable <XElement> results = xDoc.Descendants("message");
                return(results.First().Value);
            }
            else
            {
                return(myReturn.Data);
            }
        }
예제 #10
0
        private apiReturn ProcessApiCallPOST(string myURL, string ContentType, string PostData)
        {
            apiReturn myReturn = new apiReturn();

            try
            {
                ServicePointManager.ServerCertificateValidationCallback += AcceptAllCertifications;
                string myConnection = string.Format("https://{0}/remote/", this._HTTPSTRING);

                //Builds the request to pass to the ePO Server
                Uri            myLink = new Uri(myConnection + myURL);
                HttpWebRequest hwr    = (HttpWebRequest)WebRequest.Create(myLink);
                hwr.PreAuthenticate = true;
                hwr.Credentials     = this._Creds;


                hwr.Method      = "Post";
                hwr.ContentType = ContentType;

                byte[] byteArray = Encoding.UTF8.GetBytes(PostData);
                hwr.ContentLength = byteArray.Length;

                Stream hr = hwr.GetRequestStream();
                hr.Write(byteArray, 0, byteArray.Length);
                hr.Close();
                //Gets the responce from the API
                HttpWebResponse hwResponse = (HttpWebResponse)hwr.GetResponse();
                Stream          myStream   = hwResponse.GetResponseStream();

                //Reads the first line which it the status.
                //If it passes the API query it returns OK:
                StreamReader sr = new StreamReader(myStream);

                //Reads the Key information into a variable
                myReturn.Status = sr.ReadLine();
                myReturn.Data   = sr.ReadToEnd();

                sr.Close();
                myStream.Close();
                hwResponse.Close();
            }

            catch (WebException ex)
            {
                //Displays a message if a web based error is returned
                //also populates the myReturn object
                if (ex.Status == WebExceptionStatus.NameResolutionFailure)
                {
                    //MessageBox.Show("Server could not be located please verify correct name and port","Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
                    myReturn.Status = "#ERROR#";
                    myReturn.Data   = "Server could not be located please verify correct server name and port";
                }
                else
                {
                    //MessageBox.Show(ex.Message,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
                    myReturn.Status = "#ERROR#";
                    myReturn.Data   = "Web based error!\n" + ex.Message;
                }
            }
            catch (Exception ex)
            {
                //Displays a message if a non-web based error is returned
                //also populates the myReturn object
                //MessageBox.Show(ex.Message,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
                myReturn.Status = "#ERROR#";
                myReturn.Data   = "Non-Web based!\n" + ex.Message;
            }

            return(myReturn);
        }