<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blog.avanadeadvisor.com/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>System Center Operations Manager 2007 Blog</title><link>http://blog.avanadeadvisor.com/blogs/roberthenry/default.aspx</link><description>Check back here for tips and tricks around Ops Mgr 2007.</description><dc:language>en-US</dc:language><generator>CommunityServer 2.0 (Build: 60217.2664)</generator><item><title>Hey! How come (insert class here) doesn't have (insert property here)?!?</title><link>http://blog.avanadeadvisor.com/blogs/roberthenry/archive/2008/05/22/11176.aspx</link><pubDate>Thu, 22 May 2008 15:15:00 GMT</pubDate><guid isPermaLink="false">5e51d585-b788-4f7c-85ba-1877739ce145:11176</guid><dc:creator>roberthenry</dc:creator><slash:comments>0</slash:comments><comments>http://blog.avanadeadvisor.com/blogs/roberthenry/comments/11176.aspx</comments><wfw:commentRss>http://blog.avanadeadvisor.com/blogs/roberthenry/commentrss.aspx?PostID=11176</wfw:commentRss><description>&lt;P class=MsoNormal&gt;&lt;FONT face=Calibri&gt;I came across a question on the Ops Mgr newsgroups today that I thought was interesting. Someone was trying to change a logical drive free space threshold based on certain criteria. Easy, but the criteria he wanted to do it on was the Volume Label. Much to my surprise, there is no Volume Label property in the Logical Disk class or subclasses in the Windows 2003 Server management pack.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Calibri&gt;This situation can come up often and for a number of different types of monitoring objects and types of information. Fortunately, it’s relatively easy to expand upon the properties already being collected by object discoveries by creating your own class. Ops Mgr refers to these as “Attributes” in keeping with how MOM 2005 regarded this sort of additional information. In reality, they are actually new classes being created in Ops Mgr that use whatever class you want to extend as their parent class. Using the example above, let’s examine exactly how this is accomplished.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Calibri&gt;First, let’s create a class in a new MP that is based on the class we want to extend:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;ClassType&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;ID&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN&gt;"&lt;SPAN&gt;MyExtendedLogicalDiskClass&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;Accessibility&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;Public&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;Abstract&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;false&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;Base&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;MicrosoftWindowsServer20036062780!Microsoft.Windows.Server.2003.LogicalDisk&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;Hosted&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;true&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;Singleton&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;false&lt;/SPAN&gt;"&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Calibri&gt;Next we’ll add a property to this class. Since this class uses Server 2003 Logical Disk as its base class, it will inherit all of the properties of its parent class as well as its host relationship with Windows Computer. This property will exist in addition to all of that.&lt;/FONT&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Property&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;ID&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN&gt;"&lt;SPAN&gt;MyVolumeNameProperty&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;Type&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;string&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;Key&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;false&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;CaseSensitive&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;false&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;Length&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;256&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;MinLength&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;0&lt;/SPAN&gt;"&lt;SPAN&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Calibri&gt;Then we close our class definition.&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;ClassType&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;ClassType&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;ID&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN&gt;"&lt;SPAN&gt;TestGroup1.Group&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;Accessibility&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;Public&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;Abstract&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;false&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;Base&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;MicrosoftSystemCenterInstanceGroupLibrary6062780!Microsoft.SystemCenter.InstanceGroup&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;Hosted&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;false&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;Singleton&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;true&lt;/SPAN&gt;"&lt;SPAN&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Calibri&gt;Next, let’s create a group class that we’ll use to differentiate logical drives based on their volume label. We’ll make it an instance group so we can manipulate it in the operator console. The reason we are doing this offline is because post SP1 you seem to no longer be able to see extended classes in the operator console when building dynamic expressions. When you view the members of your group you’ll still see the extended properties you’ve created, but you won’t be able to build criteria on those properties unless you do it offline.&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Calibri&gt;Now, we need to write a discovery that will populate our new extended base class. It needs to create one instance for every instance of its parent class plus add our new property to each of those instances. In this particular example, the volume name of a drive is exposed easily through WMI so we’ll use a WMI based discovery. The WMI portion is easy enough (hey, stop rolling your eyes!) but the syntax required to plug that WMI into a discovery can be a little tricky. First we create a discovery and target it at our parent class using our newly created class and discovery as the discovered types:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Discovery&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;ID&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN&gt;"&lt;SPAN&gt;CustomClassDiscovery&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;Enabled&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;true&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;Target&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;MicrosoftWindowsServer20036062780!Microsoft.Windows.Server.2003.LogicalDisk&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;ConfirmDelivery&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;false&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;Remotable&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;true&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;Priority&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;Normal&lt;/SPAN&gt;"&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Category&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;PerformanceCollection&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;Category&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;DiscoveryTypes&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;DiscoveryClass&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;TypeID&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN&gt;"&lt;SPAN&gt;MyExtendedLogicalDiskClass&lt;/SPAN&gt;"&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Property&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;TypeID&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN&gt;"&lt;SPAN&gt;MyExtendedLogicalDiskClass&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;PropertyID&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;MyVolumeNameProperty&lt;/SPAN&gt;"&lt;SPAN&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;DiscoveryClass&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;DiscoveryTypes&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Calibri&gt;Next we define the datasource for the discovery.:&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;DataSource&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;ID&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN&gt;"&lt;SPAN&gt;MyDiscoveryDataSource&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;TypeID&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;MicrosoftWindowsLibrary!Microsoft.Windows.Discovery.WMISinglePropertyProvider2&lt;/SPAN&gt;"&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Calibri&gt;First we use a standard WMI provider. Next we define the namespace:&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;NameSpace&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;\\$Target/Host/Property[Type="MicrosoftWindowsLibrary!Microsoft.Windows.Computer"]/NetworkName$\Root\CIMv2&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;NameSpace&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Calibri&gt;Here’s where it gets a little tricky. A standard WMI namespace would usually look like &lt;/FONT&gt;&lt;A&gt;&lt;FONT face=Calibri color=#0000ff&gt;\\mycomputername\Root\CIMv2&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt;. In this particular instance we are targeting the Logical Disk class, which is hosted by Windows Computer. The namespace needs to be written in a context sensitive fashion so that the correct name of the computer will be plugged in at runtime. Since all logical disks are hosted by Windows Computers, we can expose the name of the computer that hosts the disk object we are targeting using the $target/Host expression. If the targeted object is the C: drive on BobsComputer then the namespace will resolve to &lt;/FONT&gt;&lt;A&gt;&lt;FONT face=Calibri color=#0000ff&gt;\\BobsComputer\Root\CIMv2&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; when that drive is being queried.&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Query&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;select select * from Win32_LogicalDisk where DeviceID = '$Target/Property[Type="MicrosoftWindowsLibrary!Microsoft.Windows.LogicalDevice"]/DeviceID$'&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;Query&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Frequency&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;30&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;Frequency&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;ClassID&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;$MPElement[Name="MyExtendedLogicalDiskClass"]$&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;ClassID&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;PropertyName&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;VolumeName&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;PropertyName&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Calibri&gt;Next we have a WMI query, the frequency interval (set to 30 seconds for my test lab because I hate waiting), the class ID and the PropertyName. Note the where criteria in the WMI query. Since this is firing against every logical drive on every computer, we need to scope the returned value down to each instance of a logical disk in addition to each computer. This value has to match the WMI Property Name returned by the query.&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;InstanceSettings&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Settings&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Setting&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Name&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;$MPElement[Name="MyExtendedLogicalDiskClass"]/MyVolumeNameProperty$&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;Name&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Value&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;$Data/Property[@Name='VolumeName']$&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;Value&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;Setting&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Calibri&gt;The instance settings section is where we define the properties being returned. First, have our custom property that’s being returned from the WMI query.&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Setting&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Name&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;$MPElement[Name="MicrosoftWindowsLibrary!Microsoft.Windows.LogicalDevice"]/DeviceID$&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;Name&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Value&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;$Target/Property[Type="MicrosoftWindowsLibrary!Microsoft.Windows.LogicalDevice"]/DeviceID$&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;Value&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;Setting&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Calibri&gt;Next, we are defining the DeviceID property. Since our class inherits from Logical Disk, we inherit its Key Property too and as such we need to populate that key property with our discovery. In this instance we are taking the existing key property from our parent class and passing it into our custom class.&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Setting&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Name&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;$MPElement[Name="MicrosoftWindowsLibrary!Microsoft.Windows.Computer"]/PrincipalName$&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;Name&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Value&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;$Target/Host/Property[Type="MicrosoftWindowsLibrary!Microsoft.Windows.Computer"]/PrincipalName$&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;Value&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;Setting&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Calibri&gt;Even though we’ve already defined our key property for the class, we also have to populate the key property for our hosting class. Windows Computer hosts Logical Disk, meaning that there cannot be a Logical Disk monitoring object in Ops Mgr that isn’t hosted by a Windows Computer. Here we perform the same action, taking the key property already defined in the parent class and passing it right into our custom class.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;Settings&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;InstanceSettings&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;DataSource&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Calibri&gt;And that’s the end of our Datasource. Next, let’s write a standard discovery for our computer group that populates the group based on our new property:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Discovery&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;ID&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN&gt;"&lt;SPAN&gt;TestGroup1.Group.DiscoveryRule&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;Enabled&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;true&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;Target&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;TestGroup1.Group&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;ConfirmDelivery&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;false&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;Remotable&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;true&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;Priority&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;Normal&lt;/SPAN&gt;"&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Category&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;Discovery&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;Category&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;DiscoveryTypes&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;DiscoveryRelationship&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;TypeID&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN&gt;"&lt;SPAN&gt;MicrosoftSystemCenterInstanceGroupLibrary6062780!Microsoft.SystemCenter.InstanceGroupContainsEntities&lt;/SPAN&gt;"&lt;SPAN&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;DiscoveryTypes&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;DataSource&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;ID&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN&gt;"&lt;SPAN&gt;GroupPopulationDataSource&lt;/SPAN&gt;"&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;TypeID&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;"&lt;SPAN&gt;SystemCenter!Microsoft.SystemCenter.GroupPopulator&lt;/SPAN&gt;"&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;RuleId&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;$MPElement$&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;RuleId&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;GroupInstanceId&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;$MPElement[Name="TestGroup1.Group"]$&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;GroupInstanceId&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;MembershipRules&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;MembershipRule&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;MonitoringClass&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;$MPElement[Name="MyExtendedLogicalDiskClass"]$&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;MonitoringClass&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;RelationshipClass&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;$MPElement[Name="MicrosoftSystemCenterInstanceGroupLibrary6062780!Microsoft.SystemCenter.InstanceGroupContainsEntities"]$&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;RelationshipClass&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Expression&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;RegExExpression&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;ValueExpression&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Property&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;$MPElement[Name="MyExtendedLogicalDiskClass"]/MyVolumeNameProperty$&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;Property&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;ValueExpression&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Operator&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;ContainsSubstring&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;Operator&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Pattern&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;MyVolumeLabel&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;Pattern&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;RegExExpression&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;Expression&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;MembershipRule&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;MembershipRules&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;DataSource&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN&gt;Discovery&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Calibri&gt;Nothing special there, but now we have a dynamic group discovery that populates off of a value that we have created ourselves. This method will work fine for any kind of property you want to add, although the exact nature of the key properties will vary based on whatever class you use as a parent.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Calibri&gt;When I go to view my new group, I now see all the properties I’m used to seeing plus my new VolumeName property. One nice thing about this is that it doesn’t break console functionality. The extended class dynamic expression can be safely edited in the Group Properties page, you just can’t add your custom property to an expression that doesn’t already have it because the UI only exposes the properties of the original class, not your custom class.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Calibri&gt;-Rob&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blog.avanadeadvisor.com/aggbug.aspx?PostID=11176" width="1" height="1"&gt;</description></item><item><title>Ops Mgr 2007 Authoring Console crashes...</title><link>http://blog.avanadeadvisor.com/blogs/roberthenry/archive/2008/05/13/11141.aspx</link><pubDate>Tue, 13 May 2008 18:14:00 GMT</pubDate><guid isPermaLink="false">5e51d585-b788-4f7c-85ba-1877739ce145:11141</guid><dc:creator>roberthenry</dc:creator><slash:comments>0</slash:comments><comments>http://blog.avanadeadvisor.com/blogs/roberthenry/comments/11141.aspx</comments><wfw:commentRss>http://blog.avanadeadvisor.com/blogs/roberthenry/commentrss.aspx?PostID=11141</wfw:commentRss><description>&lt;P&gt;For those of you using the new Operations Manager Authoring console make sure you set up your references ahead of time. Whenever you open a management pack that refers to another management pack (i.e. pretty much -all- management packs) the authoring console requires that it be able to find all of the MPs listed in the References element of the MP. Now, if you are running the Authoring Console on a management server it will automatically look in (c:\program files)\System Center Operations Manager 2007. If you are running the console on another machine you have two options. One option is to try to open the pack without the references. When you do so, the latest versions of the console (i.e. RTM and the builds just before it) will give you a message like the following:&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;References management pack not found:&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;[Name=Some.sealed.pack,KeyToken=blahblahblah,Version=42]. Click 'OK' to manually locate it.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;While this seems like a handy feature, stay away from it at all costs. We have observed that pretty consistently when you use this feature the console will crash when you attempt to view Properties of certain objects after loading your MP (I've seen it crash when viewing the properties of monitors, rules and classes). Instead, click "Tools" on the menu bar prior to opening the management pack and click "Options". Click the "References" tab and set up all your sealed MP folders in here ahead of time. This method does not allow the entry of UNC paths, but mapping UNCs to drive letters and selecting them in this view works fine.&lt;/P&gt;
&lt;P&gt;If you use this method you'll cut down on random Authoring Console crashes considerably.&lt;/P&gt;
&lt;P&gt;-Rob&lt;/P&gt;&lt;img src="http://blog.avanadeadvisor.com/aggbug.aspx?PostID=11141" width="1" height="1"&gt;</description></item><item><title>RTM Version of the MP Authoring Console (finally!) released</title><link>http://blog.avanadeadvisor.com/blogs/roberthenry/archive/2008/05/04/11074.aspx</link><pubDate>Sun, 04 May 2008 14:22:00 GMT</pubDate><guid isPermaLink="false">5e51d585-b788-4f7c-85ba-1877739ce145:11074</guid><dc:creator>roberthenry</dc:creator><slash:comments>0</slash:comments><comments>http://blog.avanadeadvisor.com/blogs/roberthenry/comments/11074.aspx</comments><wfw:commentRss>http://blog.avanadeadvisor.com/blogs/roberthenry/commentrss.aspx?PostID=11074</wfw:commentRss><description>&lt;P&gt;Anyone who's done serious work developing MPs for Ops Mgr 2007 is familiar with the assorted beta iterations of the MP Authoring Console that's been available on Connect for close to a year now. Well, the RTM version has finally arrived and is publically available. You can download it here:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=6C8911C3-C495-4A03-96DF-9731C37AA6D7&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=6C8911C3-C495-4A03-96DF-9731C37AA6D7&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Also check out this link for the first comprehensive MP Authoring Guide that came out a couple months ago:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://download.microsoft.com/download/7/4/d/74deff5e-449f-4a6b-91dd-ffbc117869a2/OM2007_AuthGuide.doc"&gt;http://download.microsoft.com/download/7/4/d/74deff5e-449f-4a6b-91dd-ffbc117869a2/OM2007_AuthGuide.doc&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Keep checking back for more posts with tips and tricks in MP Authoring.&lt;/P&gt;
&lt;P&gt;-Rob&lt;/P&gt;&lt;img src="http://blog.avanadeadvisor.com/aggbug.aspx?PostID=11074" width="1" height="1"&gt;</description></item><item><title>Cross Platform Compatiblity pack announced at MMS.</title><link>http://blog.avanadeadvisor.com/blogs/roberthenry/archive/2008/05/04/11073.aspx</link><pubDate>Sun, 04 May 2008 14:14:00 GMT</pubDate><guid isPermaLink="false">5e51d585-b788-4f7c-85ba-1877739ce145:11073</guid><dc:creator>roberthenry</dc:creator><slash:comments>0</slash:comments><comments>http://blog.avanadeadvisor.com/blogs/roberthenry/comments/11073.aspx</comments><wfw:commentRss>http://blog.avanadeadvisor.com/blogs/roberthenry/commentrss.aspx?PostID=11073</wfw:commentRss><description>&lt;P&gt;Well, it's been a fun week at MMS. A lot of exiciting things are going on right now but the most unexpected was the announcement of the work being done on the Cross Platform Monitoring pack that has just gone into public beta. Check out more information on it at Maarten Goet's blog:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.techlog.org/archive/2008/04/29/opsmgr_cross_platform_extensio"&gt;http://www.techlog.org/archive/2008/04/29/opsmgr_cross_platform_extensio&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;-Rob&lt;/P&gt;&lt;img src="http://blog.avanadeadvisor.com/aggbug.aspx?PostID=11073" width="1" height="1"&gt;</description></item><item><title>Service Level Dashboard Solution Accelerator now available on Technet</title><link>http://blog.avanadeadvisor.com/blogs/roberthenry/archive/2008/04/27/11009.aspx</link><pubDate>Sun, 27 Apr 2008 12:03:00 GMT</pubDate><guid isPermaLink="false">5e51d585-b788-4f7c-85ba-1877739ce145:11009</guid><dc:creator>roberthenry</dc:creator><slash:comments>1</slash:comments><comments>http://blog.avanadeadvisor.com/blogs/roberthenry/comments/11009.aspx</comments><wfw:commentRss>http://blog.avanadeadvisor.com/blogs/roberthenry/commentrss.aspx?PostID=11009</wfw:commentRss><description>&lt;P&gt;The beta of the new Service Level Dashboard is available for download on TechNet.&lt;/P&gt;
&lt;DIV&gt;This solution accelator expands upon the functionality of Ops Mgr 2007 by giving the administrator the ability to add an SLA calculation to any monitor. Time spent in each health state is compared to a user configurable percentage to determine is a given monitor is inside or outside of its SLA. Check it out here:&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;&lt;FONT face=Tahoma color=#000000 size=2&gt;&lt;A href="http://technet.microsoft.com/en-us/library/cc463350.aspx" target=_blank&gt;http://technet.microsoft.com/en-us/library/cc463350.aspx&lt;/A&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=Tahoma size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;-Rob&lt;/DIV&gt;&lt;/DIV&gt;&lt;img src="http://blog.avanadeadvisor.com/aggbug.aspx?PostID=11009" width="1" height="1"&gt;</description></item><item><title>Welcome to the blog!</title><link>http://blog.avanadeadvisor.com/blogs/roberthenry/archive/2008/04/21/10954.aspx</link><pubDate>Mon, 21 Apr 2008 19:42:00 GMT</pubDate><guid isPermaLink="false">5e51d585-b788-4f7c-85ba-1877739ce145:10954</guid><dc:creator>roberthenry</dc:creator><slash:comments>0</slash:comments><comments>http://blog.avanadeadvisor.com/blogs/roberthenry/comments/10954.aspx</comments><wfw:commentRss>http://blog.avanadeadvisor.com/blogs/roberthenry/commentrss.aspx?PostID=10954</wfw:commentRss><description>&lt;P class=MsoNormal&gt;&lt;FONT face=Calibri&gt;Hello everyone and thank you for checking out my blog. In the coming week I'll be posting tips and tricks regarding all things relating to Operations Manager 2007. Check back often for new information.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Calibri&gt;-Rob&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blog.avanadeadvisor.com/aggbug.aspx?PostID=10954" width="1" height="1"&gt;</description></item></channel></rss>