Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: Windows Hardware
Hello,
 
Are there any good resources out there or a WMI script repository for pulling hardware information such as hard drive status, raid status, or power supply status? I'm looking for information on how to remotely pull this information from Windows Servers.
 
Thanks
Posted 25-Jan-13 7:48am
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 1

First of all, you should be prepared for a lot of the information coming from old articles - this is not a bad thing as long as it works Smile | :) .
 
I would suggest starting with these MSDN articles:
WMI Scripting Primer: Part 1[^]
WMI Tasks for Scripts and Applications [Local system][^]
Connecting to WMI on a Remote Computer[^]
 
I feel bad about saying it because it seems obvious, but your next stop should be CodeProject. There is an entire article section dedicated to WMI here:
Articles » General Reading » Hardware & System » WMI[^]
 
You specified that you are interested in scripts for pulling the information. A lot of the articles in the section I linked to above are targeted at C# development, but should still provide you with excellent information. If you use the CodeProject Search functionality, you can find related articles in other sections, such as this VBScript article:
Retrieving hardware information with WMI[^]
 
If PowerShell is your pleasure, there is a great tutorial here:
PowerShell Scripting with WMI (Properties)[^]
PowerShell Scripting with WMI Part 2 (Methods)[^]
PowerShell Scripting with WMI Part 3 (Reports)[^]
 
Soren Madsen
  Permalink  
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 3

The proper answer would depend on your programming language.
 
For example, VBScript
 
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")
Set colScheduledJobs = objWMIService.ExecQuery _
    ("Select * from Win32_ScheduledJob")
For Each objJob in colScheduledJobs
    Wscript.Echo "Job ID: " & objJob.JobId & _
    "Command: " & objJob.Command & VBNewLine
Next
 

and C++:
 
<pre>#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <comdef.h>
#include <Wbemidl.h>

# pragma comment(lib, "wbemuuid.lib")
 
int main(int argc, char **argv)
{
    HRESULT hres;
 
    // Step 1: --------------------------------------------------
    // Initialize COM. ------------------------------------------

    hres =  CoInitializeEx(0, COINIT_MULTITHREADED); 
    if (FAILED(hres))
    {
        cout << "Failed to initialize COM library. Error code = 0x" 
            << hex << hres << endl;
        return 1;                  // Program has failed.
    }
 
    // Step 2: --------------------------------------------------
    // Set general COM security levels --------------------------
    // Note: If you are using Windows 2000, you need to specify -
    // the default authentication credentials for a user by using
    // a SOLE_AUTHENTICATION_LIST structure in the pAuthList ----
    // parameter of CoInitializeSecurity ------------------------

    hres =  CoInitializeSecurity(
        NULL, 
        -1,                          // COM authentication
        NULL,                        // Authentication services
        NULL,                        // Reserved
        RPC_C_AUTHN_LEVEL_DEFAULT,   // Default authentication 
        RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation  
        NULL,                        // Authentication info
        EOAC_NONE,                   // Additional capabilities 
        NULL                         // Reserved
        );
 
                      
    if (FAILED(hres))
    {
        cout << "Failed to initialize security. Error code = 0x" 
            << hex << hres << endl;
        CoUninitialize();
        return 1;                    // Program has failed.
    }
    
    // Step 3: ---------------------------------------------------
    // Obtain the initial locator to WMI -------------------------

    IWbemLocator *pLoc = NULL;
 
    hres = CoCreateInstance(
        CLSID_WbemLocator,             
        0, 
        CLSCTX_INPROC_SERVER, 
        IID_IWbemLocator, (LPVOID *) &pLoc);
 
    if (FAILED(hres))
    {
        cout << "Failed to create IWbemLocator object."
            << " Err code = 0x"
            << hex << hres << endl;
        CoUninitialize();
        return 1;                 // Program has failed.
    }
 
    // Step 4: -----------------------------------------------------
    // Connect to WMI through the IWbemLocator::ConnectServer method

    IWbemServices *pSvc = NULL;
 
    // Connect to the root\cimv2 namespace with
    // the current user and obtain pointer pSvc
    // to make IWbemServices calls.
    hres = pLoc->ConnectServer(
         _bstr_t(L"ROOT\\CIMV2"), // Object path of WMI namespace
         NULL,                    // User name. NULL = current user
         NULL,                    // User password. NULL = current
         0,                       // Locale. NULL indicates current
         NULL,                    // Security flags.
         0,                       // Authority (for example, Kerberos)
         0,                       // Context object 
         &pSvc                    // pointer to IWbemServices proxy
         );
    
    if (FAILED(hres))
    {
        cout << "Could not connect. Error code = 0x" 
             << hex << hres << endl;
        pLoc->Release();     
        CoUninitialize();
        return 1;                // Program has failed.
    }
 
    cout << "Connected to ROOT\\CIMV2 WMI namespace" << endl;
 

    // Step 5: --------------------------------------------------
    // Set security levels on the proxy -------------------------

    hres = CoSetProxyBlanket(
       pSvc,                        // Indicates the proxy to set
       RPC_C_AUTHN_WINNT,           // RPC_C_AUTHN_xxx
       RPC_C_AUTHZ_NONE,            // RPC_C_AUTHZ_xxx
       NULL,                        // Server principal name 
       RPC_C_AUTHN_LEVEL_CALL,      // RPC_C_AUTHN_LEVEL_xxx 
       RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
       NULL,                        // client identity
       EOAC_NONE                    // proxy capabilities 
    );
 
    if (FAILED(hres))
    {
        cout << "Could not set proxy blanket. Error code = 0x" 
            << hex << hres << endl;
        pSvc->Release();
        pLoc->Release();     
        CoUninitialize();
        return 1;               // Program has failed.
    }
 
    // Step 6: --------------------------------------------------
    // Use the IWbemServices pointer to make requests of WMI ----

    // For example, get the name of the operating system
    IEnumWbemClassObject* pEnumerator = NULL;
    hres = pSvc->ExecQuery(
        bstr_t("WQL"), 
        bstr_t("SELECT * FROM Win32_OperatingSystem"),
        WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, 
        NULL,
        &pEnumerator);
    
    if (FAILED(hres))
    {
        cout << "Query for operating system name failed."
            << " Error code = 0x" 
            << hex << hres << endl;
        pSvc->Release();
        pLoc->Release();
        CoUninitialize();
        return 1;               // Program has failed.
    }
 
    // Step 7: -------------------------------------------------
    // Get the data from the query in step 6 -------------------
 
    IWbemClassObject *pclsObj;
    ULONG uReturn = 0;
   
    while (pEnumerator)
    {
        HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, 
            &pclsObj, &uReturn);
 
        if(0 == uReturn)
        {
            break;
        }
 
        VARIANT vtProp;
 
        // Get the value of the Name property
        hr = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
        wcout << " OS Name : " << vtProp.bstrVal << endl;
        VariantClear(&vtProp);
 
        pclsObj->Release();
    }
 
    // Cleanup
    // ========
    
    pSvc->Release();
    pLoc->Release();
    pEnumerator->Release();
    pclsObj->Release();
    CoUninitialize();
 
    return 0;   // Program successfully completed.
 
}
  Permalink  
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 2

One main resource is the script center.
http://technet.microsoft.com/en-us/scriptcenter[^]
 
The the script center repository
http://gallery.technet.microsoft.com/scriptcenter[^]
 
That is a great resource for learning about different scripts from vb script to powershell scripting.
 
Have a look around and read some of there articles and blog post or look in the repository and see how they did a script for something.
  Permalink  

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 peetajonsan 90
1 Agnes Roy 16
2 twd54 8
3 soyalee90 -2
0 peetajonsan 90
1 noname ngunu 30
2 Agnes Roy 16
3 soyalee90 8
4 twd54 8


Advertise | Privacy | Mobile
RA-Web2 | 2.8.141216.1 | Last Updated 8 Sep 2013
Copyright © RootAdmin, 1999-2014
All Rights Reserved. Terms of Service
Layout: fixed | fluid

RootAdmin, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100