<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://myitforum.com/cs2/utility/FeedStylesheets/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>Paul Thomsen at myITforum.com : hardware inventory extensions</title><link>http://myitforum.com/cs2/blogs/pthomsen/archive/tags/hardware+inventory+extensions/default.aspx</link><description>Tags: hardware inventory extensions</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 SP2 (Build: 31113.47)</generator><item><title>A hardware inventory extension for HALs</title><link>http://myitforum.com/cs2/blogs/pthomsen/archive/2008/04/06/114713.aspx</link><pubDate>Mon, 07 Apr 2008 01:52:00 GMT</pubDate><guid isPermaLink="false">8e8f7986-475c-475d-bdc9-a1b3a63b955b:114713</guid><dc:creator>pthomsen</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://myitforum.com/cs2/blogs/pthomsen/rsscomments.aspx?PostID=114713</wfw:commentRss><comments>http://myitforum.com/cs2/blogs/pthomsen/archive/2008/04/06/114713.aspx#comments</comments><description>&lt;p&gt;Summary: here&amp;#39;s a technique for collecting details about&amp;nbsp;the HAL used by&amp;nbsp;your computers. Do you&amp;nbsp;need to know which Hardware Abstraction Layer (HAL) your clients are using? For example, you may wish to ensure you&amp;#39;re using all features (such as multiprocessors).&lt;/p&gt;
&lt;p&gt;This solution is from a couple of years ago,&amp;nbsp;and&amp;nbsp;I don’t know if I had the optimal method (or whether it’s still optimal), but research at that time indicated that the following was necessary, and I don&amp;#39;t have reason to think there&amp;#39;s a better solution:&lt;/p&gt;
&lt;p&gt;1.&amp;nbsp;Do a binary file open of %windir%\system32\hal.dll&lt;br /&gt;2.&amp;nbsp;Find the original HAL name in the file&lt;br /&gt;3.&amp;nbsp;(optionally) translate that into a meaningful name (if I remember right, there were only a couple that were common, and of course things may have changed over the last couple of years) (code snippet below)&lt;br /&gt;4.&amp;nbsp;Write the results to a custom WMI data class (or a registry entry)&lt;br /&gt;5.&amp;nbsp;Collect the results using typical SMS/ConfigMgr hardware inventory extension methods&lt;/p&gt;
&lt;p&gt;Tricky, but not bad.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;HAL descriptive name&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if HALname=&amp;quot;halmacpi.dll&amp;quot; then HALdescr = &amp;quot;ACPI Multiprocessor PC&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if HALname=&amp;quot;halaacpi.dll&amp;quot; then HALdescr = &amp;quot;ACPI Uniprocessor PC&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if HALname=&amp;quot;halacpi.dll&amp;quot;&amp;nbsp; then HALdescr = &amp;quot;Advanced Configuration and Power Interface (ACPI) PC&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if HALname=&amp;quot;halsp.dll&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp; then HALdescr = &amp;quot;Compaq SystemPro Multiprocessor or 100% Compatible&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if HALname=&amp;quot;halapic.dll&amp;quot;&amp;nbsp; then HALdescr = &amp;quot;MPS Uniprocessor PC&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if HALname=&amp;quot;halmps.dll&amp;quot;&amp;nbsp;&amp;nbsp; then HALdescr = &amp;quot;MPS Multiprocessor PC&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if HALname=&amp;quot;hal.dll&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; then HALdescr = &amp;quot;Standard PC&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if HALname=&amp;quot;halborg.dll&amp;quot;&amp;nbsp; then HALdescr = &amp;quot;SGI mp&amp;quot;&lt;/p&gt;
&lt;p&gt;p.s. Here’s some resources on the topic:&lt;/p&gt;
&lt;p&gt;•&amp;nbsp;&lt;a class="" href="http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q237/5/56.ASP&amp;amp;NoWebContent=1" target="_blank"&gt;http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q237/5/56.ASP&amp;amp;NoWebContent=1&lt;/a&gt; &lt;br /&gt;•&amp;nbsp;A script class to read file version information: &lt;a class="" href="http://www.jsware.net/jsware/scripts.php3" target="_blank"&gt;http://www.jsware.net/jsware/scripts.php3&lt;/a&gt; (under File Version Information Class) (I don’t know if there are licensing issues)&lt;br /&gt;•&amp;nbsp;&lt;a class="" href="http://www.microsoft.com/resources/documentation/WindowsServ/2003/all/deployguide/en-us/Default.asp?url=/resources/documentation/WindowsServ/2003/all/deployguide/en-us/acicc_ris_jfxo.asp" target="_blank"&gt;http://www.microsoft.com/resources/documentation/WindowsServ/2003/all/deployguide/en-us/Default.asp?url=/resources/documentation/WindowsServ/2003/all/deployguide/en-us/acicc_ris_jfxo.asp&lt;/a&gt;&amp;nbsp; (you’ll have to dig a bit)&lt;br /&gt;&lt;/p&gt;&lt;img src="http://myitforum.com/cs2/aggbug.aspx?PostID=114713" width="1" height="1"&gt;</description><category domain="http://myitforum.com/cs2/blogs/pthomsen/archive/tags/scripts/default.aspx">scripts</category><category domain="http://myitforum.com/cs2/blogs/pthomsen/archive/tags/vbscript/default.aspx">vbscript</category><category domain="http://myitforum.com/cs2/blogs/pthomsen/archive/tags/hardware+inventory+extensions/default.aspx">hardware inventory extensions</category></item><item><title>A hardware inventory extension for ActiveX controls</title><link>http://myitforum.com/cs2/blogs/pthomsen/archive/2008/03/05/113513.aspx</link><pubDate>Thu, 06 Mar 2008 03:55:00 GMT</pubDate><guid isPermaLink="false">8e8f7986-475c-475d-bdc9-a1b3a63b955b:113513</guid><dc:creator>pthomsen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://myitforum.com/cs2/blogs/pthomsen/rsscomments.aspx?PostID=113513</wfw:commentRss><comments>http://myitforum.com/cs2/blogs/pthomsen/archive/2008/03/05/113513.aspx#comments</comments><description>&lt;p&gt;Summary: here&amp;#39;s a technique for collecting details about ActiveX controls on your computers.&lt;/p&gt;
&lt;p&gt;Do you have a need to inventory the ActiveX controls on your computers? Collecting details about ActiveX controls is not trivial. Many have a .OCX extension, but not all of them. And even if you find them on disk, are you confident they&amp;#39;ve been installed for use? So a simple software inventory rule won&amp;#39;t do the trick.&lt;/p&gt;
&lt;p&gt;I built an SMS / ConfigMgr&amp;nbsp;hardware inventory extension for ActiveX controls a few years ago, and a little research today didn&amp;#39;t reveal a better solution. If you have one, I&amp;#39;d be pleased to hear about it (as would others, I&amp;#39;m sure).&lt;/p&gt;
&lt;p&gt;The solution basically involves sending a script like this&amp;nbsp;via software distribution to your clients:&lt;/p&gt;&lt;span style="FONT-SIZE:9pt;COLOR:#1f497d;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;set fso = CreateObject(&amp;quot;Scripting.FileSystemObject&amp;quot;)&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;COLOR:#1f497d;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;COLOR:#1f497d;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;Set Appshell = WScript.CreateObject(&amp;quot;Shell.Application&amp;quot;)&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;COLOR:#1f497d;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;COLOR:#1f497d;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;Set folder = Appshell.NameSpace( windir &amp;amp; “\Downloaded Program Files&amp;quot;)&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;COLOR:#1f497d;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;COLOR:#1f497d;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;Set items = folder.Items&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;COLOR:#1f497d;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;COLOR:#1f497d;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;For Each item in items&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;COLOR:#1f497d;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="FONT-SIZE:9pt;COLOR:#1f497d;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;version=&amp;quot;&amp;quot; : if item.path&amp;lt;&amp;gt;&amp;quot;&amp;quot; then version = fso.getfileversion(item.path)&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;COLOR:#1f497d;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="FONT-SIZE:9pt;COLOR:#1f497d;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;wscript.echo item.name, version&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;COLOR:#1f497d;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;COLOR:#1f497d;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;Next&lt;/span&gt; 
&lt;p&gt;The &amp;quot;Downloaded Program Files&amp;quot; can look like an ordinary folder (depending on how you look), but it&amp;#39;s actually a special object that is used to manage installed Active X controls.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The script for your hardware inventory extension will be a little more complex than the code sample above. Rather than displaying the control name and version, you&amp;#39;ll need to write it to a custom WMI class, and get SMS or ConfigMgr hardware inventory to collect that WMI class. That&amp;#39;s a bit of an art in itself, but I hope it&amp;#39;s well described in this chapter of the SMS 2003 Operations Guide:&lt;/p&gt;
&lt;p&gt;&lt;a class="" href="http://www.microsoft.com/technet/prodtechnol/sms/sms2003/opsguide/ops_0351.mspx?mfr=true" target="_blank"&gt;http://www.microsoft.com/technet/prodtechnol/sms/sms2003/opsguide/ops_0351.mspx?mfr=true&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One concern with the solution I suggest is whether all ActiveX controls end up in that &amp;quot;Downloaded Program Files&amp;quot; object. Maybe only Internet Explorer ActiveX controls make it there. I really can&amp;#39;t confirm that either way. If that&amp;#39;s an important scenario for you, and you have non-IE ActiveX controls, it would be worth testing (and let us know).&lt;/p&gt;
&lt;p&gt;BONUS MATERIAL: do you need to run scripts that use 32-bit objects on 64-bit computers. That&amp;#39;s the case here, where &amp;quot;Shell.Application&amp;quot; is 32-bit only. It doesn&amp;#39;t error out, but it doesn&amp;#39;t return any results on 64-bit computers. When that&amp;#39;s the case, you should run the script using the 32-bit version of cscript.exe, like so:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %SystemRoot%\syswow64\cscript.exe script.vbs&lt;/p&gt;
&lt;p&gt;p.s.&amp;nbsp;An alternate solution for this hardware inventory extension is to use the MicrosoftIE_Object class&amp;nbsp;from the&amp;nbsp;root\cimv2\Applications\MicrosoftIE WMI namespace. Even&amp;nbsp;“the Scripting Guy” suggests it: &lt;a class="" href="http://www.microsoft.com/technet/scriptcenter/resources/qanda/dec04/hey1220.mspx" target="_blank"&gt;http://www.microsoft.com/technet/scriptcenter/resources/qanda/dec04/hey1220.mspx&lt;/a&gt;. But that namespace doesn&amp;#39;t seem to exist on Windows Vista or Windows Server 2008 computers, so it no longer seems to be a viable option.&lt;/p&gt;&lt;img src="http://myitforum.com/cs2/aggbug.aspx?PostID=113513" width="1" height="1"&gt;</description><category domain="http://myitforum.com/cs2/blogs/pthomsen/archive/tags/scripts/default.aspx">scripts</category><category domain="http://myitforum.com/cs2/blogs/pthomsen/archive/tags/vbscript/default.aspx">vbscript</category><category domain="http://myitforum.com/cs2/blogs/pthomsen/archive/tags/hardware+inventory+extensions/default.aspx">hardware inventory extensions</category></item></channel></rss>