Exemplo n.º 1
0
        /// <summary>
        /// Returns a System.Management.PropertyData[] of properties that will be returned by the system for the specified query string.
        /// </summary>
        /// <param name="query">A valid WQL Select query.</param>
        /// <param name="managementClass">A ManagementBaseObject (class or instance) targeted by this query.</param>
        /// <returns>A System.Management.PropertyData[] of properties that will be returned by the system for the specified query string.</returns>
        /// <remarks>
        /// This function is used to return property data for a query that does not return all of the properties in the associated class.
        /// Specifically, it is used to build grid column configuration for results returned by a query.
        /// </remarks>
        public static PropertyData[] GetWqlQueryProperties(this String query, ManagementBaseObject managementClass)
        {
            // Query has been validated
            Boolean queryValidated = false;

            // Specified managementClass is a __AggregatedEvent class
            Boolean classIsAggregatedEvent = managementClass.ClassPath.ClassName.Equals(AGGEVENT_CLASS, StringComparison.InvariantCultureIgnoreCase);

            // Parse the query with .Net's built in parser
            var selectQuery = new SelectQuery(query);

            // Validate an event query
            WqlEventQuery eventQuery;

            if (managementClass.IsEvent() || classIsAggregatedEvent)
            {
                // Parse the event query with .Net's built in parser
                eventQuery = new WqlEventQuery(query);

                // Make sure the return type for an event query with grouped intervals is __AggregateEvent
                if (eventQuery.GroupWithinInterval.Ticks > 0)
                {
                    if (!queryValidated && !managementClass.ClassPath.ClassName.Equals(AGGEVENT_CLASS, StringComparison.InvariantCultureIgnoreCase))
                    {
                        throw new ArgumentException(String.Format("Grouped event queries should return type '{0}'. Object passed was a '{1}'.", AGGEVENT_CLASS, managementClass.ClassPath.ClassName));
                    }

                    queryValidated = true;
                }
            }

            // Validate class name
            if (!queryValidated && !selectQuery.ClassName.Equals(managementClass.ClassPath.ClassName, StringComparison.InvariantCultureIgnoreCase))
            {
                throw new ArgumentException(String.Format("The class specified in the query '{0}' does not match the class of the specified object '{1}'.", selectQuery.ClassName, managementClass.ClassPath.ClassName));
            }

            // Extract the list of PropertyData
            var properties = new List <PropertyData>();

            if (selectQuery.SelectedProperties.Count == 0)
            {
                // Grab all properties for a SELECT *... query
                foreach (PropertyData p in managementClass.Properties)
                {
                    properties.Add(p);
                }
            }
            else
            {
                // Grab specified properties for a SELECT field1, field2,... query
                foreach (var propertyName in selectQuery.SelectedProperties)
                {
                    properties.Add(managementClass.Properties[propertyName]);
                }
            }

            return(properties.ToArray());
        }
Exemplo n.º 2
0
        /// <summary>
        /// Gets a WQL query string to perform as basic query of the specified WMI object.
        /// </summary>
        /// <param name="managementClass">The WMI object for which a basic query will be returned.</param>
        /// <returns>A WQL query string to perform as basic query of the specified WMI object.</returns>
        public static String GetDefaultQuery(this ManagementBaseObject obj)
        {
            if (obj.IsEvent())
            {
                return(String.Format("SELECT * FROM {0} WITHIN 5", obj.ClassPath.ClassName));
            }

            else
            {
                return(String.Format("SELECT * FROM {0}", obj.ClassPath.ClassName));
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Returns a System.Management.PropertyData[] of properties that will be returned by the system for the specified query string.
        /// </summary>
        /// <param name="query">A valid WQL Select query.</param>
        /// <param name="managementClass">A ManagementBaseObject (class or instance) targeted by this query.</param>
        /// <returns>A System.Management.PropertyData[] of properties that will be returned by the system for the specified query string.</returns>
        /// <remarks>
        /// This function is used to return property data for a query that does not return all of the properties in the associated class.
        /// Specifically, it is used to build grid column configuration for results returned by a query.
        /// </remarks>
        public static PropertyData[] GetWqlQueryProperties(this String query, ManagementBaseObject managementClass)
        {
            // Query has been validated
            Boolean queryValidated = false;

            // Specified managementClass is a __AggregatedEvent class
            Boolean classIsAggregatedEvent = managementClass.ClassPath.ClassName.Equals(AGGEVENT_CLASS, StringComparison.InvariantCultureIgnoreCase);

            // Parse the query with .Net's built in parser
            var selectQuery = new SelectQuery(query);

            // Validate an event query
            WqlEventQuery eventQuery;
            if(managementClass.IsEvent() || classIsAggregatedEvent)
            {
                // Parse the event query with .Net's built in parser
                eventQuery = new WqlEventQuery(query);

                // Make sure the return type for an event query with grouped intervals is __AggregateEvent
                if (eventQuery.GroupWithinInterval.Ticks > 0)
                {
                    if (!queryValidated && !managementClass.ClassPath.ClassName.Equals(AGGEVENT_CLASS, StringComparison.InvariantCultureIgnoreCase))
                        throw new ArgumentException(String.Format("Grouped event queries should return type '{0}'. Object passed was a '{1}'.", AGGEVENT_CLASS, managementClass.ClassPath.ClassName));

                    queryValidated = true;
                }
            }

            // Validate class name
            if (!queryValidated && !selectQuery.ClassName.Equals(managementClass.ClassPath.ClassName, StringComparison.InvariantCultureIgnoreCase))
                throw new ArgumentException(String.Format("The class specified in the query '{0}' does not match the class of the specified object '{1}'.", selectQuery.ClassName, managementClass.ClassPath.ClassName));

            // Extract the list of PropertyData
            var properties = new List<PropertyData>();
            if (selectQuery.SelectedProperties.Count == 0)
            {
                // Grab all properties for a SELECT *... query
                foreach (PropertyData p in managementClass.Properties)
                {
                    properties.Add(p);
                }
            }
            else
            {
                // Grab specified properties for a SELECT field1, field2,... query
                foreach (var propertyName in selectQuery.SelectedProperties)
                {
                    properties.Add(managementClass.Properties[propertyName]);
                }
            }

            return properties.ToArray();
        }