Saturday, February 18, 2012

An example of a starter managementpack

With so many people interested in writing managmentpacks,  I thought it wise to add to this blog an example of a barebones managementpack.

With that said, this is what a barebones managementpack looks like:

<ManagementPack ContentReadable="true" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <Manifest>
    <Identity>
      <ID>mp1</ID>
      <Version>1.0.0.0</Version>
    </Identity>
    <Name>mp1</Name>
    <References>
      <Reference Alias="SC">
        <ID>Microsoft.SystemCenter.Library</ID>
        <Version>6.1.7221.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="Windows">
        <ID>Microsoft.Windows.Library</ID>
        <Version>6.1.7221.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="Health">
        <ID>System.Health.Library</ID>
        <Version>6.1.7221.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="System">
        <ID>System.Library</ID>
        <Version>6.1.7221.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
    </References>
  </Manifest>
  <LanguagePacks>
    <LanguagePack ID="ENU" IsDefault="true">
      <DisplayStrings>
        <DisplayString ElementID="mp1">
          <Name>Management Pack 1</Name>
        </DisplayString>
      </DisplayStrings>
    </LanguagePack>
  </LanguagePacks>
</ManagementPack>

Saturday, February 11, 2012

Why classes are so important

Classes are important for a wide variety of reasons. They create blank open tables in SQL Server. You populate them in a variety of ways, the most popular is the use of a discovery. Hardly the only way, even a rule can fire off a DataSourceModule and the code within can populate the table.

But for that rule to work,  indeed, for anything to happen inside a managementpack, a certain kind of binding must occur. 

So, the combination of a class and a means by which that class's tables get populated creates this kind of binding and enables the rules and monitors to work on the machine where the agent resides and has added the mp to the agent's mangementpack cache.

Ever wondered why every agent has almost every managementpack imported into it on every machine?

That's because the mangementpack has to decide whether or not it should run on that type of machine. For example, the two classes that create the relationship between the 2003 computer and the group are the two below:

<ClassType ID="Microsoft.Windows.Server.2003.Computer" Abstract="false" Accessibility="Public" Base="Windows!Microsoft.Windows.Server.Computer" Hosted="false" Singleton="false" />       
<ClassType ID="Microsoft.Windows.Server.2003.ComputerGroup" Abstract="false" Accessibility="Public" Base="SC!Microsoft.SystemCenter.ComputerGroup" Hosted="false" Singleton="true" />

Notice that neither one has any properties. Again, this is because the two produce the binding between the computer group and the discovered computer.

     
<Discovery ID="Microsoft.Windows.Server.2003.Computer.Discovery" Enabled="onEssentialMonitoring" Target="Windows!Microsoft.Windows.Server.Computer">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="Microsoft.Windows.Server.2003.Computer" />
</DiscoveryTypes>
<DataSource ID="DiscoveryDataSource" TypeID="Windows!Microsoft.Windows.FilteredRegistryDiscoveryProvider">
<ComputerName>$Target/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerName>
<RegistryAttributeDefinitions>
<RegistryAttributeDefinition>
<AttributeName>WindowsCurrentVersion</AttributeName>
<Path>SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion</Path>
<PathType>1</PathType>
<AttributeType>1</AttributeType>
</RegistryAttributeDefinition>
</RegistryAttributeDefinitions>
<Frequency>3604</Frequency>
<ClassId>$MPElement[Name="Microsoft.Windows.Server.2003.Computer"]$</ClassId>
<InstanceSettings>
<Settings>
<Setting>
<Name>$MPElement[Name="Windows!Microsoft.Windows.Computer"]/PrincipalName$</Name>
<Value>$Target/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$</Value>
</Setting>
</Settings>
</InstanceSettings>
<Expression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>Values/WindowsCurrentVersion</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>5.2</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<Value>$Target/Property[Type="Windows!Microsoft.Windows.Server.Computer"]/IsVirtualNode$</Value>
</ValueExpression>
<Operator>NotEqual</Operator>
<ValueExpression>
<Value>True</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</Expression>
</DataSource>
</Discovery>

The above discoveres the computer. The discovery below populates that discover with the group:

<Discovery ID="Microsoft.Windows.Server.2003.AllServersComputerGroupDiscovery" Enabled="onEssentialMonitoring" Target="Microsoft.Windows.Server.2003.ComputerGroup">
<Category>Discovery</Category>
<DiscoveryTypes />
<DataSource ID="DiscoveryDataSource" TypeID="SC!Microsoft.SystemCenter.GroupPopulator">
<RuleId>$MPElement$</RuleId>
<GroupInstanceId>$Target/Id$</GroupInstanceId>
<MembershipRules>
<MembershipRule>
<MonitoringClass>$MPElement[Name="Microsoft.Windows.Server.2003.Computer"]$</MonitoringClass>
<RelationshipClass>$MPElement[Name="SC!Microsoft.SystemCenter.ComputerGroupContainsComputer"]$</RelationshipClass>
</MembershipRule>
</MembershipRules>
</DataSource>
</Discovery>

But this only binds the computer to the group.  What makes the rules work? Just about every other class in the mangementpack does.

The very first rule tells you what class and discover needs to be created and discovered to make it work:
<Rule ID="Microsoft.Windows.Server.2003.OperatingSystem.PerfCounterDataRequestTimeOut.Alert" Enabled="onEssentialMonitoring" Target="Microsoft.Windows.Server.2003.OperatingSystem">

So, this begs, couldn't we have simply started the managementpack from there and not had to worry about the group population?

The answer is both yes and no.  Yes, you can if your managementpack was simply looking for a specific application.  However, in the case of the Windows.Server.2003.mp, no. There is a one to many relationship here with the mp's classes and discoveries.  For example, other classes depend on this class and discovery combination to make the rest of the mp to work and the discovery itself relies on the discovery of  the class: Windows!Microsoft.Windows.Server.Computer.

Meaning, its discovery logic is exactly the same as the Microsoft.Windows.Server.2003.Computer.Discovery:

<Discovery ID="Microsoft.Windows.Server.2003.OperatingSystem.Discovery" Enabled="onEssentialMonitoring" Target="Windows!Microsoft.Windows.Server.Computer">

So, why have both?  Simple, one helps to populate the Group Discovery.  The other binds the rules, monitors and other related targets to Windows!Microsoft.Windows.Server.Computer through the OperatingSystem Discovery.

But it is not the only one:

<ClassType ID="Microsoft.Windows.Server.2003.NetworkAdapter" Abstract="false" Accessibility="Public" Base="WindowsServer!Microsoft.Windows.Server.NetworkAdapter" Hosted="true" Singleton="false" />
<ClassType ID="Microsoft.Windows.Server.2003.Processor" Abstract="false" Accessibility="Public" Base="WindowsServer!Microsoft.Windows.Server.Processor" Hosted="true" Singleton="false" />
<ClassType ID="Microsoft.Windows.Server.2003.PhysicalDisk" Abstract="false" Accessibility="Public" Base="WindowsServer!Microsoft.Windows.Server.PhysicalDisk" Hosted="true" Singleton="false" />
<ClassType ID="Microsoft.Windows.Server.2003.LogicalDisk" Abstract="false" Accessibility="Public" Base="WindowsServer!Microsoft.Windows.Server.LogicalDisk" Hosted="true" Singleton="false" />
<ClassType ID="Microsoft.Windows.Server.2003.DiskPartition" Abstract="false" Accessibility="Public" Base="WindowsServer!Microsoft.Windows.Server.DiskPartition" Hosted="true" Singleton="false" />

Each one gets discovered and the target is:  "Microsoft.Windows.Server.2003.OperatingSystem"

Why spend so much time explaining this?

Because you can create an identity class from the following:

  1. Computer
  2. Server.Computer
  3. Service
    1. Registry
    2. File
  4. Application
    1. Registry
    2. File
  5. Role
    1. Registry
    2. File






Friday, February 10, 2012

Proud of it, too.

ATTENTION PROGRAMMERS

If you code in any of the following languages:

CBuilder, Cold Fusion, C++.Net, C#, Delphi, Delphi.Net, Dolphin Small Talk, F#, Groovy, Java, Javascript, JScript, J#, Kixtart, mIRC, NSBasic, Object Script, Perlscript, PHP, Power Basic, PowerShell, Python, RCOM, Rexx, Ruby, TLC, UWS, VB, VB.Net, VBScript, And WSH.

Then you owe it to yourself to read on.

You've gone to CodeProject and they want you to sign up just to download code. You've gone to PlanetSourceCode and while they boast about having more code on line than anyone else, the code there is almost 15 years old and very little code deals with WMI or SCOM.

Even if they have what you're looking for, they limit your downloads.

Have you tried planetmps.com?

No hassles, no ads, no sign ups and no limits to what you can download.

Saturday, July 2, 2011

SCOM Discovery Managmentpack Example Using No Script

Below is just one example of 21,000 managementpacks written in xml on:

http://www.planetmps.com/


<ManagementPack xsi:noNamespaceSchemaLocation="C:\MPSchema\ManagementPackSchema.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Manifest>
    <Identity>
      <ID>PlanetMPs.Win32_BIOS.Discovery</ID>
      <Version>1.0.0.1</Version>
    </Identity>
    <Name>PlanetMPs Win32_BIOS Discovery</Name>
    <References>
      <Reference Alias="System">
        <ID>System.Library</ID>
        <Version>6.0.6246.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="SystemHealth">
        <ID>System.Health.Library</ID>
        <Version>6.0.6246.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="SystemPerf">
        <ID>System.Performance.Library</ID>
        <Version>6.0.6246.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="Windows">
        <ID>Microsoft.Windows.Library</ID>
        <Version>6.0.6246.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="SC">
        <ID>Microsoft.SystemCenter.Library</ID>
        <Version>6.0.6246.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
    </References>
  </Manifest>
  <TypeDefinitions>
    <EntityTypes>
      <ClassTypes>
        <ClassType ID="PlanetMPs.2009.Win32_BIOS" Abstract="false" Accessibility="Internal" Hosted="true" Base="Windows!Microsoft.Windows.LocalApplication">
          <Property ID="BiosCharacteristics" Type="string"/>
          <Property ID="BIOSVersion" Type="string"/>
          <Property ID="BuildNumber" Type="string"/>
          <Property ID="Caption" Type="string"/>
          <Property ID="CodeSet" Type="string"/>
          <Property ID="CurrentLanguage" Type="string"/>
          <Property ID="Description" Type="string"/>
          <Property ID="IdentificationCode" Type="string"/>
          <Property ID="InstallableLanguages" Type="string"/>
          <Property ID="InstallDate" Type="string"/>
          <Property ID="LanguageEdition" Type="string"/>
          <Property ID="ListOfLanguages" Type="string"/>
          <Property ID="Manufacturer" Type="string"/>
          <Property ID="Name" Type="string"/>
          <Property ID="OtherTargetOS" Type="string"/>
          <Property ID="PrimaryBIOS" Type="string"/>
          <Property ID="ReleaseDate" Type="string"/>
          <Property ID="SerialNumber" Type="string"/>
          <Property ID="SMBIOSBIOSVersion" Type="string"/>
          <Property ID="SMBIOSMajorVersion" Type="string"/>
          <Property ID="SMBIOSMinorVersion" Type="string"/>
          <Property ID="SMBIOSPresent" Type="string"/>
          <Property ID="SoftwareElementID" Type="string"/>
          <Property ID="SoftwareElementState" Type="string"/>
          <Property ID="Status" Type="string"/>
          <Property ID="TargetOperatingSystem" Type="string"/>
          <Property ID="Version" Type="string"/>
        </ClassType>
      </ClassTypes>
    </EntityTypes>
  </TypeDefinitions>
  <Monitoring>
    <Discoveries>
      <Discovery ID="PlanetMPs.2009.Win32_BIOS.Discovery" Target="Windows!Microsoft.Windows.Server.Computer" Remotable="false" Enabled="true">
        <Category>Discovery</Category>
        <DiscoveryTypes>
          <DiscoveryClass TypeID="PlanetMPs.2009.Win32_BIOS">
            <Property PropertyID="BiosCharacteristics"/>
            <Property PropertyID="BIOSVersion"/>
            <Property PropertyID="BuildNumber"/>
            <Property PropertyID="Caption"/>
            <Property PropertyID="CodeSet"/>
            <Property PropertyID="CurrentLanguage"/>
            <Property PropertyID="Description"/>
            <Property PropertyID="IdentificationCode"/>
            <Property PropertyID="InstallableLanguages"/>
            <Property PropertyID="InstallDate"/>
            <Property PropertyID="LanguageEdition"/>
            <Property PropertyID="ListOfLanguages"/>
            <Property PropertyID="Manufacturer"/>
            <Property PropertyID="Name"/>
            <Property PropertyID="OtherTargetOS"/>
            <Property PropertyID="PrimaryBIOS"/>
            <Property PropertyID="ReleaseDate"/>
            <Property PropertyID="SerialNumber"/>
            <Property PropertyID="SMBIOSBIOSVersion"/>
            <Property PropertyID="SMBIOSMajorVersion"/>
            <Property PropertyID="SMBIOSMinorVersion"/>
            <Property PropertyID="SMBIOSPresent"/>
            <Property PropertyID="SoftwareElementID"/>
            <Property PropertyID="SoftwareElementState"/>
            <Property PropertyID="Status"/>
            <Property PropertyID="TargetOperatingSystem"/>
            <Property PropertyID="Version"/>
            <Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
          </DiscoveryClass>
        </DiscoveryTypes>
        <DataSource ID="DiscoveryDataSource" RunAs="System!System.PrivilegedMonitoringAccount" TypeID="Windows!Microsoft.Windows.WmiProviderWithClassSnapshotDataMapper">
          <NameSpace>\\$Target/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$\root\CIMV2</NameSpace>
          <Query>SELECT * FROM Win32_BIOS</Query>
          <Frequency>60</Frequency>
          <ClassId>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]$</ClassId>
          <InstanceSettings>
            <Settings>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/BiosCharacteristics$</Name>
                 <Value>$Data/Property[@Name='BiosCharacteristics']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/BIOSVersion$</Name>
                 <Value>$Data/Property[@Name='BIOSVersion']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/BuildNumber$</Name>
                 <Value>$Data/Property[@Name='BuildNumber']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/Caption$</Name>
                 <Value>$Data/Property[@Name='Caption']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/CodeSet$</Name>
                 <Value>$Data/Property[@Name='CodeSet']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/CurrentLanguage$</Name>
                 <Value>$Data/Property[@Name='CurrentLanguage']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/Description$</Name>
                 <Value>$Data/Property[@Name='Description']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/IdentificationCode$</Name>
                 <Value>$Data/Property[@Name='IdentificationCode']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/InstallableLanguages$</Name>
                 <Value>$Data/Property[@Name='InstallableLanguages']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/InstallDate$</Name>
                 <Value>$Data/Property[@Name='InstallDate']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/LanguageEdition$</Name>
                 <Value>$Data/Property[@Name='LanguageEdition']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/ListOfLanguages$</Name>
                 <Value>$Data/Property[@Name='ListOfLanguages']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/Manufacturer$</Name>
                 <Value>$Data/Property[@Name='Manufacturer']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/Name$</Name>
                 <Value>$Data/Property[@Name='Name']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/OtherTargetOS$</Name>
                 <Value>$Data/Property[@Name='OtherTargetOS']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/PrimaryBIOS$</Name>
                 <Value>$Data/Property[@Name='PrimaryBIOS']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/ReleaseDate$</Name>
                 <Value>$Data/Property[@Name='ReleaseDate']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/SerialNumber$</Name>
                 <Value>$Data/Property[@Name='SerialNumber']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/SMBIOSBIOSVersion$</Name>
                 <Value>$Data/Property[@Name='SMBIOSBIOSVersion']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/SMBIOSMajorVersion$</Name>
                 <Value>$Data/Property[@Name='SMBIOSMajorVersion']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/SMBIOSMinorVersion$</Name>
                 <Value>$Data/Property[@Name='SMBIOSMinorVersion']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/SMBIOSPresent$</Name>
                 <Value>$Data/Property[@Name='SMBIOSPresent']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/SoftwareElementID$</Name>
                 <Value>$Data/Property[@Name='SoftwareElementID']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/SoftwareElementState$</Name>
                 <Value>$Data/Property[@Name='SoftwareElementState']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/Status$</Name>
                 <Value>$Data/Property[@Name='Status']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/TargetOperatingSystem$</Name>
                 <Value>$Data/Property[@Name='TargetOperatingSystem']$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="PlanetMPs.2009.Win32_BIOS"]/Version$</Name>
                 <Value>$Data/Property[@Name='Version']$</Value>
              </Setting>
            </Settings>
          </InstanceSettings>
          <TimeoutSeconds>20</TimeoutSeconds>
        </DataSource>
      </Discovery>
    </Discoveries>
  </Monitoring>
  <Presentation>
    <Views>
      <View ID="PlanetMPs.Win32_BIOS.Discovery.StateView" TypeID="SC!Microsoft.SystemCenter.StateViewType" Target="PlanetMPs.2009.Win32_BIOS" Visible="true" Accessibility="Internal">
        <Category>Operations</Category>
        <Criteria/>
      </View>
    </Views>
    <Folders>
      <Folder ID="PlanetMPs.Win32_BIOS.Discovery.ViewFolder.Root" ParentFolder="SC!Microsoft.SystemCenter.Monitoring.ViewFolder.Root" Accessibility="Internal"/>
    </Folders>
    <FolderItems>
      <FolderItem ElementID="PlanetMPs.Win32_BIOS.Discovery.StateView" Folder="PlanetMPs.Win32_BIOS.Discovery.ViewFolder.Root"/>
    </FolderItems>
  </Presentation>
  <LanguagePacks>
    <LanguagePack ID="ENU" IsDefault="true">
      <DisplayStrings>
        <!-- MP -->
        <DisplayString ElementID="PlanetMPs.Win32_BIOS.Discovery">
          <Name>PlanetMPs Win32_BIOS Discovery</Name>
          <Description>Discovers Win32_BIOS</Description>
        </DisplayString>
        <!-- Classes -->
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS">
          <Name>Win32_BIOS Discovery</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="BiosCharacteristics">
          <Name>BiosCharacteristics</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="BIOSVersion">
          <Name>BIOSVersion</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="BuildNumber">
          <Name>BuildNumber</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="Caption">
          <Name>Caption</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="CodeSet">
          <Name>CodeSet</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="CurrentLanguage">
          <Name>CurrentLanguage</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="Description">
          <Name>Description</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="IdentificationCode">
          <Name>IdentificationCode</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="InstallableLanguages">
          <Name>InstallableLanguages</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="InstallDate">
          <Name>InstallDate</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="LanguageEdition">
          <Name>LanguageEdition</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="ListOfLanguages">
          <Name>ListOfLanguages</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="Manufacturer">
          <Name>Manufacturer</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="Name">
          <Name>Name</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="OtherTargetOS">
          <Name>OtherTargetOS</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="PrimaryBIOS">
          <Name>PrimaryBIOS</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="ReleaseDate">
          <Name>ReleaseDate</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="SerialNumber">
          <Name>SerialNumber</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="SMBIOSBIOSVersion">
          <Name>SMBIOSBIOSVersion</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="SMBIOSMajorVersion">
          <Name>SMBIOSMajorVersion</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="SMBIOSMinorVersion">
          <Name>SMBIOSMinorVersion</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="SMBIOSPresent">
          <Name>SMBIOSPresent</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="SoftwareElementID">
          <Name>SoftwareElementID</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="SoftwareElementState">
          <Name>SoftwareElementState</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="Status">
          <Name>Status</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="TargetOperatingSystem">
          <Name>TargetOperatingSystem</Name>
        </DisplayString>
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS" SubElementID="Version">
          <Name>Version</Name>
        </DisplayString>
        <!-- Discoveries -->
        <DisplayString ElementID="PlanetMPs.2009.Win32_BIOS.Discovery">
          <Name>Discovers Win32_BIOS</Name>
        </DisplayString>
        <!-- Views -->
        <DisplayString ElementID="PlanetMPs.Win32_BIOS.Discovery.StateView">
          <Name>State</Name>
        </DisplayString>
        <!-- Folders -->
        <DisplayString ElementID="PlanetMPs.Win32_BIOS.Discovery.ViewFolder.Root">
          <Name>Win32_BIOS</Name>
        </DisplayString>
      </DisplayStrings>
    </LanguagePack>
  </LanguagePacks>
</ManagementPack>