Gathering WMI Data without Writing a Single Line of Code
 

در این بخش با ابزار WMI بر روی Windows آشنا می شویم این ابزار کاربردی برای مدیریت منابع سیستم های Windows XP , 2003 می باشد .

 Windows Management Instrumentation (WMI)

از طریق این ابزار یک Admin می تواند به اطلاعاتی ارزشمند دسترسی داشته باشد که این اطلاعات می تواند مواردی همچون

نام Cpu و لیست آنها بر روی سیستم شما و بر روی

کلیه سیستم های شبکه و نیز مقدار Ram دستگاه و  نام MainBoard آنها و مدل آنها و لیست نرم افزارهایی که بر روی

سرور ها و Client ها نصب می باشد و گرفتن  کلیه

Configuration موجود بر روی سرور هاوNetwork Adapter آنها و  لیست Hotfix های نصب بر روی آنها و لیست Process آنها و خیلی موارد

جالب و با ارزش دیگر برای Admin می باشد .

این ابزار برای گرفتن Report از این موارد می تواند با سرعت بالا کمک بکند  به Admin اما این ابزار قدرت مدیریتی نیز دارد و می تواند

موارد بالا را نیز بر روی سیستم ها تغییردهد.

Easier Access

سادگی کار با این ابزار می تواند موجب شود که Admin بسادگی مواردی را که نیاز دارد توسط این ابزار بدست آورد.

برای مثال توسط یک Script ساده می تواند از طریق این ابزار نام CPU های موجود بر روی سیستم را گرفت .

 Code 1 : CPUName.vbs

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Processor",,48)
For Each CPU in colItems
    Wscript.Echo "Name  " & CPU.Name
Next
 

شما می توانید با استفاده از Cscript این کد را Run کنید برای این کار باید بدین صورت عمل کنید.

 

cscript /NOLOGO cpuname.vbs

خروجی این کد متنی همانند متن زیر می باشد :

Name    Intel(R) Pentium(R) M processor 2.00GHz

اما استفاده از دستور WMIC که این محیط را برای استفاده از WMI را فراهم می کند نیز همانند Code 2 می باشد . زمانی که برای اولین باز از WMIC استفاده شود اول این ابزار

خود را نصب می کند سپس اجرا می شود.برای این منظور به شکل 1 دقت کنید . استفاده از دستور WMIC cpu Get Name .

  Figure 1: WMIC Cpu GET Name and WMIC CPU LIST FULL

   Figure 1: WMIC Cpu GET Name and WMIC CPU LIST FULL

Using WMIC

این ابزار همانند شکل 1 که مشاهده می کنید یک محیط می باشد که با اجرای دستور WMIC وارد آن می شوید و زدن کلید Help می توانید کلیه دستور های آن را مشاهده کنید.

همانند شکل 2 شما می توانید کلیه Command این محیط را مشاهده کنید .

   Figure 2: WMIC

   Figure 2: WMIC

خروجی هر یک از این دستورات را می توان به یک Text File ارسال کرد برای این کار همانند دستور زیر می توان برای مثال لیست Hotfix های سیستم را بر روی یک فایل txt دید .

 

Code 2 : CMD - WMIC

Locally :

  • WMIC QFE > C:\ListAllHotfix.txt

Remote :

  •  WMIC  /Node: Remote host Name or IP Address  QFE > C:\ListAllHotfix.txt

  •  WMIC  /Node:192.168.0.1  QFE > C:\19216801_ListAllHotfix.txt

 
Getting Data from Remote Systems

این ابزار می تواند  بصورت Remote نیز اطلاعات دیگر سیستم ها را نیز دریافت کند همانند Code: 2 می توانید توسط کلید NODE و نام سیستم مقصد دستور را اجرا کرد .

برای مثال می توانید موارد زیر را بر روی سیستم خود Test کنید.

To get the process listing from a remote system, simply add the /NODE: global switch followed by the remote computer name: 
/node:"server1" process get name, workingsetsize

You can provide the names of multiple computers in a command line at the same time if you like:

/node:"server1","server2" process get name, workingsetsize

In a multi-node query like this, it makes good sense to ask for the computer name as well, otherwise you might not know which system the process is running on. Here's how:

/node:"server1","server2" process get CSName, name, workingsetsize

The /NODE global switch can also accept the name of a text file containing a list of host names you'd like to access via your WMIC command line. Simply create the file and include system names or IP addresses, one system per line, and WMIC will process each entry. Here's the command to access a file called serverlist.txt:

/node:@serverlist.txt process get CSName, name, workingsetsize

When processing WMIC commands against multiple systems, it's a good idea to use the /FAILFAST:on global switch, which tells WMIC not to wait around for an unresponsive host. Here is an example of how you could use the /FAILFAST switch to check the OS version on several systems:

/failfast:on /Node:johnkelnc6000, " johnkel-fer" os get Caption, CSDVersion, CSName 

همانند مثال های بالا مشاهده می کنید که می توان کلیه آدرسهای سیستم های Remote را بر روی یک Text File قرار داد و بوسیله @ آن فایل را برای خواندن  و اجرای

دستور به WMIC Command معرفی کرد .

/node:@serverlist.txt process get CSName, name, workingsetsize
OUTPUT Formats

توانیی بالای این ابزار در ایجاد Report با Style های متفاوت بسیار کمک می کند به شما برای گرفتن Report های متفاوت و گوناگون با Format های متفاوت .

خروجی این ابزار برای نمایش گزارش ها بصورت Default جالب نمی باشد به همین دلیل این ابزار خروجی خود را می تواند به Format های مفید تر و پیشترفته تر بدهد

این خروجی ها مانند HTML , XML , CSV , MOF می باشد.استفاده از نوع HTML راحتر می باشد و نوع CSV را می توان توسط Excel با فرم خوب مشاهده کرد .

CSV Format برای استفاده در Access DB and SQL نیز می توان استفاده کرد به همین دلیل برای کار بهترین Format می باشد چون در جاهای زیادی می توان از آن استفاده کرد .

 
CSV

برای مشخص کردن نوع خروجی از کلید OUTPUT استفاده می شود . همانند شکل کد زیر :

/output:c:\os.csv os get /all /format:csv

HTML

برای این نوع Format همانند کد زیر باید استفاده کرد :

/output:c:\os1.html os get /all /format:htable.xsl

خروجی این دستور همانند شکل 3 می باشد .

   Figure 3:  WMIC output:c:\os1.html os get /all /format:htable.xsl

   Figure 3:  WMIC output:c:\os1.html os get /all /format:htable.xsl

همان طور که در شکل 3 مشاهده می کنید Report بسیار طولانی می باشد و باید توسط Scroll آن را تا آخر خواند .این نوع گزارش نتیجه استفاده از htable.xsl می باشد

اگر شما می خواهید این گزارش طول کمتر داشته باشد و بصورن Vertical باشد باید از hform.xsl استفاده کنید همانند شکل 4:

   

   Figure 4:  WMIC output:c:\os1.html os get /all /format:hform.xsl

 
Example 1

در این بخش یک مثال حرفه ای زده می شود که بسیار کاربردی نیز می تواند باشد برای Admin ها دقت کنید .

در این جا بکمک یک فایل Bat  که Code آن رامی توانید در Code 3 مشاهده کنید می خواهیم یکسری اطلاعات از سیستم های شبکه گرفته و بصورت Report نگهداری کنیم .

در جدول 1 شما می توانید مشاهده کنید که هر خط WMIC چه عملیاتی انجام می دهد و گزارش خود و یا خروجی خود را بر روی کدام فایل کپی می کند .

در اینجا از htable.xsl استفاده شده شما می توانید از hform.xsl استفاده کنید برای نوع افقی و یا عمودی بودن گزارش ها .

   Table 1: WMIC Commands and Descriptions

WMIC Command Description Reports - File Name
wmic /Failfast:on /node:"%%i" /output:"%%i_OS.html" OS Get /All /format:hform.xsl Operation system information  ? _OS.html
wmic /Failfast:on /node:"%%i" /output:"%%i_qfe.html" QFE list /format:htable.xsl List all Hotfix on System  ? _qfe.html
wmic /Failfast:on /node:"%%i" /output:"%%i_drives.html" logicaldisk get caption, description, filesystem, size,freespace /format:htable.xsl Logical Disks information  ? _drives.html
wmic /Failfast:on /node:"%%i" /output:"%%i_test.html" Process list /format:htable.xsl Current Process List and info  ? _test.html
wmic /Failfast:on /node:"%%i" /output:"%%i_test2.html" environment list full /format:htable.xsl Environment  Information  ? _test2.html
wmic /Failfast:on /node:"%%i" /output:"%%i_test3.html" Group list /format:htable.xsl List All Group  ? _test3.html
wmic /Failfast:on /node:"%%i" /output:"%%i_test4.html" NICConfig list /format:htable.xsl Network Adapter Information and configuration  ? _test4.html
wmic /Failfast:on /node:"%%i" /output:"%%i_test5.html" Softwarefeature list /format:htable.xsl List All Installed Application  ? _test5.html
wmic /Failfast:on /node:"%%i" /output:"%%i_test6.html" UserAccount list /format:htable.xsl List All User Accounts  ? _test6.html
wmic /Failfast:on /node:"%%i" /output:"%%i_test7.html" netlogin list /format:htable.xsl Netlogin Users Information  ? _test7.html
wmic /Failfast:on /node:"%%i" /output:"%%i_share.html" share list /format:htable.xsl List All Share Folder  ? _Share.html
 
 

          Code 3 : Clients_Pack.Bat

@Echo off

echo ^<HTML^>^<HEAD^>^<TITLE^>TechNet WMIC Monitoring Page Example^</TITLE^>^</HEAD^> >> list.html
echo ^<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080"^> >> list.html
echo ^<h1 align="center"^>^<b^>^<font face="Arial" size="+4" color="Red"^>TechNet WMIC Monitoring Page Example^</font^>^</b^>^</h1^> >> list.html
echo ^<p align="center"^>^<table border="1" width="600"^> >> list.html
rem
rem Table headers on the page are defined here, should you want to add more...
rem

echo ^<tr^>^<td^>^<B^>Server Name^</td^> >> list.html

rem
rem
rem The loop below does all the heavy lifting
rem
for /F %%i in (serverlist.txt) do (
echo Processing OS INfo %%i...
wmic /Failfast:on /node:"%%i" /output:"%%i_OS.html" OS Get /All /format:hform.xsl
echo Processing List All Hot Fix %%i...
wmic /Failfast:on /node:"%%i" /output:"%%i_qfe.html" QFE list /format:htable.xsl
echo Processing Logical Disks %%i...
wmic /Failfast:on /node:"%%i" /output:"%%i_drives.html" logicaldisk get caption, description, filesystem, size,freespace /format:htable.xsl
echo Processing List Current Process %%i...
wmic /Failfast:on /node:"%%i" /output:"%%i_test.html" Process list /format:htable.xsl
echo Processing List All environment %%i...
wmic /Failfast:on /node:"%%i" /output:"%%i_test2.html" environment list full /format:htable.xsl
echo Processing List All Group %%i...
wmic /Failfast:on /node:"%%i" /output:"%%i_test3.html" Group list /format:htable.xsl
echo Processing NetWork Adapter Configuration Info %%i...
wmic /Failfast:on /node:"%%i" /output:"%%i_test4.html" NICConfig list /format:htable.xsl
echo Processing Installed Application %%i...
wmic /Failfast:on /node:"%%i" /output:"%%i_test5.html" Softwarefeature list /format:htable.xsl
echo Processing List all UserAccounts %%i...
wmic /Failfast:on /node:"%%i" /output:"%%i_test6.html" UserAccount list /format:htable.xsl
echo Processing Users Login Info %%i...
wmic /Failfast:on /node:"%%i" /output:"%%i_test7.html" netlogin list /format:htable.xsl
echo Processing Share info %%i...
wmic /Failfast:on /node:"%%i" /output:"%%i_share.html" share list /format:htable.xsl
echo **************************************

echo ^<tr^>^<td^>%%i^</td^> >> list.html
echo ^<td^>^<a href="%%i_test.html"^>List Current Processk^</a^>^</td^> >> list.html
echo ^<td^>^<a href="%%i_test2.html"^>List All environment^</a^>^</td^> >> list.html
echo ^<td^>^<a href="%%i_test3.html"^>List All Group^</a^>^</td^> >> list.html
echo ^<td^>^<a href="%%i_test4.html"^>NetWork Adapter Configuration Info^</a^>^</td^> >> list.html
echo ^<td^>^<a href="%%i_test5.html"^>Installed Application^</a^>^</td^> >> list.html
echo ^<td^>^<a href="%%i_test6.html"^>List all UserAccounts^</a^>^</td^> >> list.html
echo ^<td^>^<a href="%%i_test7.html"^>Users Login Info^</a^>^</td^> >> list.html
echo ^<td^>^<a href="%%i_share.html"^>Share info^</a^>^</td^> >> list.html
echo ^<td^>^<a href="%%i_OS.html"^>OS Info^</a^>^</td^> >> list.html
echo ^<td^>^<a href="%%i_QFE.html"^>Patches^</a^>^</td^> >> list.html
echo ^<td^>^<a href="%%i_drives.html"^>Drive Volumes^</a^>^</td^> >> list.html
echo ^</tr^> >> list.html
)

echo ^<p align="center"^>^<b^>^<font size="+1" color="Red"^>^<BR^>Completed at >> list.html
time /T >> list.html
echo - on >> list.html
date /T >> list.html
echo ^</font^>^</b^>^<BR^>^</p^> >> list.html
Echo .
Echo DONE!!!
Echo Please Open List.html File

این Bat File قبل از اجرا نیاز به یک فایل Text دارد تا IP Address سیستم های شبکه را از آن بخواند برای این کار همانند شکل 5 شما باید یک فایل با نام Serverlist.txt را بسازید.

ونام سیستم ها و یا آدرس آنها را وارد کنید .

Figure 5: TextFile (ServerList.txt)  

 

برای استفاده از WMI شما می توانید از ManifestCreator 1.1 نیز استفاده کنید این ابزار به شما امکان را می دهد که برای کل سیستم های شبکه اطلاعاتی همانند Mainboard , CPU, RAM ,HDD Drive,VGA, IPAddress, BIOS, Monitor,Sound,OS Information,PC Name راجمع آوری کنید.

 

Download : Manifest Creator  v1.1

    Figure 5: TextFile (ServerList.txt)

بعد از وارد کردن آدرسها اطلاعات را Save کرده سپس همانند شکل 6 فایل Bat را که نامش Clients_Pack می باشد در محیط CMD اجرا می کنیم . تذکر هر دو فایل باید در یک آدرس

باشند.

   Figure 6: Execute Clients_Pack.Bat

    Figure 6: Execute Clients_Pack.Bat

بعد از اجرای این فایل یکسری HTML فایل ایجاد می شود که ممکن است تعداد آنها بسیار زیاد باشد به همین دلیل بهتر است که مانند مثال این برنامه را در داخل یک Folder قرار

دهید سپس اجرا کنید. در میان این فایلها همانند شکل 7 یک فایل بنام List.html وجود دارد که در واقع Index تمامی دیگر Report ها می باشد .این فایل را Open می کنیم همانند

شکل 8 .

   Figure 7: WMIC_Test Folder

    Figure 7: WMIC_Test Folder

در شکل 7 مشاهده می کنید تعداد زیادی فایل html برای 3 آدرس معرفی شده در TextFile : Serverlist.txt ایجاد شده.

 

   Figure 8: List.html

    Figure 8: List.html

در شکل 8 می توان Index کلیه آن Html فایل ها را مشاهده کرد بر روی هر یک Click کنیم به Report مخصوص خود که یکی از آن Html File ها می باشد Link می شود .

برای نمایش یم نمونه از Reprot ها بر روی Logical Disk مربوط به سرور 192.168.0.133 کلیک کرده خروجی را بر روی شکل 9 می توانید مشاهده  کنید .

   Figure 9: Win32_LogicalDisk for Server 192.168.0.133

    Figure 9: Win32_LogicalDisk for Server 192.168.0.133

در بخش زیر یکسری مثال زده شده برای استفاده از WMIC برای تغییر دادن Configuration منابع سیستم که مشاهده می کنید .

System Configuration Changes

All manner of system configuration options may be changed using WMIC. I find the NICCONFIG alias really useful. Perhaps you'd like to change a system from using a statically assigned IP address to leveraging DHCP without a desktop visit. You could look up the NIC card info using the following command:

WMIC nicconfig get description, DHCPEnabled, index
and change it to use DHCP (assuming the index number listed was 1) with the line:
WMIC NICCONFIG WHERE Index=1 CALL Enable DHCP
There are a number of other configuration settings for a network interface you can manage this way, such as the default gateway and WINS Servers.

Here's how to disable a service (Virtual Server in this case) on the local system:

wmic service where "caption='Virtual Server'" call changestartmode disabled
… and on more than one system:
wmic /interactive:off /Node:johnkelnc6000,"johnkel-fer" service where "caption='Virtual Server'"call changestartmode disabled
… and on a list of systems:
wmic /interactive:off /Node:@serverlist.txt service where "caption='Virtual Server'" call changestartmode disabled
What kind of tool would WMIC be if it didn't allow you to remotely reboot systems? Luckily, it does:
wmic /interactive:off /Node:@serverlist.txt os WHERE Primary=True call reboot
 

The Upshot

As useful as WMIC can be, it is not a replacement for WMI scripts or more powerful management tools. You can't easily automate the manipulation of data accessible via WMIC—calculate the percentage of free disk space, for example. Pulling the same data via a Visual Basic® script may allow you to manipulate or filter it and act on information more easily in customizable ways. One other key limitation of WMIC I've found is the need for systems to be online to generate reports. It is wonderful to be able to interrogate systems and create HTML or other reports using WMIC, but it is not a management solution. It sounds silly to say, but it's hard to ask a system about its configuration if it is offline! Tools with persistent information storage coupled with robust reporting and alerting (such as SMS 2003 and Microsoft® Operations Manager) should be the core of every secure, well managed infrastructure. Still, for quick and easy access to system information, WMIC is hard to beat.

WMIC does provide a wonderful way to harness the power of WMI, and I've only scratched the surface here. There's still a great deal left for you to explore and discover on your own. New command-line and shell options are on the way for Windows, including the upcoming release of Windows PowerShell™ (formerly known as MONAD or MSH). PowerShell, with stunning new capabilities for managing and automating Windows systems, should be released later this year. Until it is generally available, WMIC can lighten your administrative burden.

WMIC Requirements

Though WMIC is not available on Windows 2000, it can be used from a Windows XP or Windows Server 2003 system to access WMI—it even works to a limited degree with Windows NT, if WMI support is installed. WMI in Windows NT does not expose the event logs, so they may not be queried successfully from WMIC.

You’ll need a good amount of rights to use many of the capabilities of WMIC. Everything I’ve done in this article I did with full administrator rights. Also note that some aliases have not been implemented in both Windows XP and Windows Server 2003. The memorychip alias, for example, which can display the size and slots of memory modules (handy if you want to order RAM for an upgrade without opening up the system before hand) is not available in Windows XP.

WMIC Resources

If you want to read more about WMIC, check out these valuable resources:

 

در زیر مشخصات نویسنده این مقاله را مشاهده می کنید .

Gathering WMI Data without Writing a Single Line of Code

John Kelbley is an Account Technology Specialist for Microsoft based in the Northeastern USA. He is the author of many poorly written VBScript and Perl scripts for server and workstation administration, many of which are obsolete since the introduction of WMIC. You can reach John at kelbley@hotmail.com.
 

Last Updated: October 01, 2006

Winteacher.com
Gathering WMI Data without Writing a Single Line of Code

 © 2003-2006 Winteacher.com . All rights reserved