আপনার কম্পিউটারের CPU বা মেমরি ডিটেলস, সিরিয়াল বা মডেল নম্বর, বা ইনস্টল্ড সফটওয়্যার ভার্সন জানতে চাইলেন কিন্তু কোথায় খুঁজবেন সেটা নিশ্চিত নন? এক্সেলে মাত্র একটু সিম্পল কোড দিয়ে আপনি আপনার উইন্ডোজ পিসির একটি পূর্ণ লাইব্রেরি ইনফরমেশন এক্সট্রাক্ট করতে পারেন।
খুব ভালো হয়ে যাওয়ার মত লাগছে? তো, এটাই উইন্ডোজ, যদি আপনি জানেন কীভাবে ব্যবহার করবেন।
আপনার হয়তো হাত একটু গরু করতে হবে, কিন্তু এই আর্টিকেলে আমরা আপনাকে সকল কোড দিবো এবং কীভাবে এক্সেলে সেটা দিয়ে কাজ করাতে হয় সেটাও। একবার হয়ে গেলে, আপনার একটি এক্সেল শিট থাকবে যা, প্রতিবার খোললে, আপনাকে আপনার কম্পিউটার সিস্টেম সম্পর্কে আপনি যা যা জানতে চেয়েছিলেন সব বলবে।
নোট করুন এটি শুধু এক্সেলের ডেস্কটপ ভার্সনের সাথে কাজ করবে, যা আপনি অফিসের ফ্রি ট্রায়াল দিয়ে পেতে পারেন।
WMI-এর জাদু
মাইক্রোসফট অপারেটিং সিস্টেম চালানো যেকোনো কম্পিউটারে, আপনার এক্সেস থাকে একটি পাওয়ারফুল এক্সটেনশন সেটে যাকে বলে Windows Management Instrumentation (WMI), যা আপনাকে আপনার কম্পিউটার, অপারেটিং সিস্টেম, এবং ইনস্টল্ড সফটওয়্যারের সম্পর্কে ইনফরমেশন ও স্পেসিফিকেশন অ্যাক্সেস করার একটি খুব পাওয়ারফুল এবং এক্সটেনসিভ মেথড দেয়।
সবচেয়ে ভালো কথা, WMI অ্যাক্সেসযোগ্য প্রোগ্রামিং ল্যাঙ্গুয়েজের মত VBA থেকে, যা প্রায় সকল মাইক্রোসফট অফিস প্রোডাক্টে উপলব্ধ।
আপনার অটোমেটেড স্প্রেডশিট সেট আপ করুন
প্রথমে, একটি নতুন এক্সেল ওয়ার্কবুক তৈরি করুন এবং নাম দিন MyComputerInfo.xlsm (ম্যাক্রো ইনাবল্ড)। এটা খুলুন, Sheet1 বাদ দিন, এবং পরবর্তী ১১টি শিটের নাম দিন নিচের মতো:
- Network
- LogicalDisk
- Processor
- Physical Memory
- Video Controller
- OnBoardDevices
- Operating System
- Printer
- Software
- Accounts
- Services
এগুলো আপনার কম্পিউটার ডিটেলস ধারণ করবে, এবং এই এক্সেল স্প্রেডশিট খোলার 때마다 আপডেট হবে।
পরবর্তী, Developer মেনু আইটেমে যান এবং Controls সেকশনে View Code ক্লিক করুন।
আপনি যদি Developer মেনু আইটেম না দেখেন, File > Options > Customize Ribbon-এ ক্লিক করুন, Choose commands from ড্রপডাউনকে All Tabs-এ চেঞ্জ করুন, Developer সিলেক্ট করুন এবং Add>> বাটন চাপা দিয়ে কাস্টোমাইজড রিবন সাইডে অ্যাড করুন। নিশ্চিত করুন সেই সাইডে Developer চেকবক্স সিলেক্টেড আছে।
একবার আপনি VBA কোড এডিটরের ভিতর আসলামা, আপনাকে শুধু নিচের স্ক্রিপ্টগুলো একটি মডিউলে অ্যাড করতে হবে। এই স্ক্রিপ্টগুলো সব ভাড়াটে কাজ করবে। আপনাকে নিজে কোড লিখতে হবে না, শুধু নিচে দেখানো অনুযায়ী কপি-পেস্ট করুন।
কপি-পেস্ট শেষ হলে, শুধু একটু আরো কোড অ্যাড করুন আপনার শিটগুলো লোড করার জন্য, এবং আপনার কাজ শেষ।
ঠিক আছে, কপি-পেস্ট শুরুর জন্য প্রস্তুত? চলুন শুরু করা যাক।
আপনার WMI মডিউলগুলো বিল্ড করুন
এই কোডের ইনস্পিরেশন এসেছে Beyond Excel নামে একটি চমৎকার গুগল সাইটস রিসোর্স থেকে। সেখানে দেখানো উদাহরণ হলো WMI() নামে একটি সাবরুটিন, যা আপনার কম্পিউটারের সকল নেটওয়ার্ক ইনফরমেশন এক্সেল প্রোগ্রামিং এনভায়রনমেন্টের ডিবাগিং এরিয়ায় পাস করে।
শestens, সেটা আমাদের কাজে সেটা লাগে না, তাই আমি কোডটি মডিফাই করেছি যাতে সেটা আপনার তৈরি করা শিটগুলোতে আউটপুট দেয়।
কোডিং নেভিগেশন এরিয়াতে, আপনি একটি সেকশন দেখবেন Modules নামে এবং তার নিচে Module1 নামে একটি কম্পোনেন্ট। সেটা ডাবল ক্লিক করুন খোলার জন্য। আপনি যদি Modules ফোল্ডার না দেখেন, মেনু থেকে Insert এক্সপ্যান্ড করুন এবং Module সিলেক্ট করুন।
এই এরিয়ায় সব সাবরুটিন থাকবে যা WMI ব্যবহার করে আপনার কম্পিউটার সম্পর্কে সব গুরুত্বপূর্ণ ইনফরমেশন পুল করবে এবং আপনার তৈরি করা শিটগুলিতে লোড করবে।
নিচের লাইনগুলো কোড উইন্ডোর সবচেয়ে উপরে একলা রাখুন।
Public oWMISrvEx As Object 'SWbemServicesEx
Public oWMIObjSet As Object 'SWbemServicesObjectSet
Public oWMIObjEx As Object 'SWbemObjectEx
Public oWMIProp As Object 'SWbemProperty
Public sWQL As String 'WQL Statement
Public n
কাজ শেষ হলে এটা এমন দেখাবে:
নিচের কোড Module1-এ উপরের লাইনগুলোর নিচে পেস্ট করুন:
Sub NetworkWMI()
sWQL = "Select * From Win32_NetworkAdapterConfiguration"
Set oWMISrvEx = GetObject("winmgmts:root/CIMV2")
Set oWMIObjSet = oWMISrvEx.ExecQuery(sWQL)
intRow = 2
strRow = Str(intRow)
ThisWorkbook.Sheets("Network").Range("A1").Value = "Name"
ThisWorkbook.Sheets("Network").Cells(1, 1).Font.Bold = True
ThisWorkbook.Sheets("Network").Range("B1").Value = "Value"
ThisWorkbook.Sheets("Network").Cells(1, 2).Font.Bold = True
For Each oWMIObjEx In oWMIObjSet
For Each oWMIProp In oWMIObjEx.Properties_
If Not IsNull(oWMIProp.Value) Then
If IsArray(oWMIProp.Value) Then
For n = LBound(oWMIProp.Value) To UBound(oWMIProp.Value)
Debug.Print oWMIProp.Name & "(" & n & ")", oWMIProp.Value(n)
ThisWorkbook.Sheets("Network").Range("A" & Trim(strRow)).Value = oWMIProp.Name
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).Value = oWMIProp.Value(n)
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).HorizontalAlignment = xlLeft
intRow = intRow + 1
strRow = Str(intRow)
Next
Else
ThisWorkbook.Sheets("Network").Range("A" & Trim(strRow)).Value = oWMIProp.Name
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).Value = oWMIProp.Value
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).HorizontalAlignment = xlLeft
intRow = intRow + 1
strRow = Str(intRow)
End If
End If
Next
'End If
Next
End Sub
এখন, আপনি এই ফাংশনের মতই একই ফাংশন তৈরি করবেন গাইডের প্রথম পার্টে তৈরি করা প্রতিটি শিটের জন্য কিছু মাইনর ডিফারেন্সের সাথে।
উদাহরণস্বরূপ, পরেরবার আপনি NetworkWMI() এর জন্য উপরের কোড কপি করবেন, সেটার শেষে পেস্ট করবেন, এবং তারপর "NetworkWMI()" রিপ্লেস করবেন "LogicalDiskWMI()" দিয়ে।
সिर्फ কিছু সেকশন চেঞ্জ করতে হবে যাতে এই কোড সঠিক শিট ফিল করে।
এটি চেঞ্জ করুন:
sWQL = "Select * From Win32_NetworkAdapterConfiguration"
এটাতে:
sWQL = "Select * From Win32_LogicalDisk"
এই চার লাইন চেঞ্জ করুন:
ThisWorkbook.Sheets("Network").Range("A1").Value = "Name"
ThisWorkbook.Sheets("Network").Cells(1, 1).Font.Bold = True
ThisWorkbook.Sheets("Network").Range("B1").Value = "Value"
ThisWorkbook.Sheets("Network").Cells(1, 2).Font.Bold = True
এটাতে:
ThisWorkbook.Sheets("LogicalDisk").Range("A1").Value = "Name"
ThisWorkbook.Sheets("LogicalDisk").Cells(1, 1).Font.Bold = True
ThisWorkbook.Sheets("LogicalDisk").Range("B1").Value = "Value"
ThisWorkbook.Sheets("LogicalDisk").Cells(1, 2).Font.Bold = True
এই দুটি লাইন চেঞ্জ করুন:
ThisWorkbook.Sheets("Network").Range("A" & Trim(strRow)).Value = oWMIProp.Name
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).Value = oWMIProp.Value(n)
এটাতে:
ThisWorkbook.Sheets("LogicalDisk").Range("A" & Trim(strRow)).Value = oWMIProp.Name
ThisWorkbook.Sheets("LogicalDisk").Range("B" & Trim(strRow)).Value = oWMIProp.Value(n)
এবং এই তিনটি লাইন চেঞ্জ করুন:
ThisWorkbook.Sheets("Network").Range("A" & Trim(strRow)).Value = oWMIProp.Name
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).Value = oWMIProp.Value
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).HorizontalAlignment = xlLeft
এটাতে:
ThisWorkbook.Sheets("LogicalDisk").Range("A" & Trim(strRow)).Value = oWMIProp.Name
ThisWorkbook.Sheets("LogicalDisk").Range("B" & Trim(strRow)).Value = oWMIProp.Value
ThisWorkbook.Sheets("LogicalDisk").Range("B" & Trim(strRow)).HorizontalAlignment = xlLeft
এখন, আপনি প্রায় শেষ!
আপনার ওয়ার্কবুকের প্রতিটি ট্যাবের জন্য উপরের প্রসেস রিপিট করুন। ফাংশনগুলো হবে নিচের মতো:
- "ProcessorWMI()" "Processor" শিটের জন্য।
- "PhysicalMemWMI()" "Physical Memory" শিটের জন্য।
- "VideoControlWMI()" "Video Controller" শিটের জন্য।
- "OnBoardWMI()" "OnBoardDevices" শিটের জন্য।
- "PrinterWMI()" "Printer" শিটের জন্য।
- "OperatingWMI()" Operating System শিটের জন্য।
- "SoftwareWMI()" "Software" শিটের জন্য।
- "ServicesWMI()" "Services" শিটের জন্য।
আপনার কম্পিউটার সম্পর্কে এই ইনফরমেশন অ্যাক্সেস করার জন্য আপনার দরকারি স্পেশাল "Win32_" অবজেক্টগুলো নিচের মতো:
- Win32_NetworkAdapterConfiguration - আপনার সকল নেটওয়ার্ক কনফিগারেশন সেটিংস
- Win32_LogicalDisk - ক্যাপাসিটি ও ফ্রি স্পেসসহ ডিস্কগুলো
- Win32_Processor - CPU স্পেক্স
- Win32_PhysicalMemoryArray - RAM/ইনস্টলড মেমরি সাইজ
- Win32_VideoController - গ্রাফিক্স অ্যাডাপ্টার ও সেটিংস
- Win32_OnBoardDevice - মাদারবোর্ড ডিভাইস
- Win32_OperatingSystem - কোন উইন্ডোজ ভার্সন সিরিয়াল নম্বরসহ
- WIn32_Printer - ইনস্টল্ড প্রিন্টারস
- Win32_Product - ইনস্টল্ড সফটওয়্যার
- Win32_BaseService - যেকোনো পিসিতে রানিং (বা স্টপড) সার্ভিসের লিস্ট সার্ভিসের পাথ ও ফাইল নামসহ
কোডের Module1 এরিয়াতে সকল ফাংশন কপি/পেস্ট এবং টুইকিং ফিনিশ করুন। শেষ হলে গাইডের পরবর্তী সেকশনে যান।
VBA ভিউতে আপনার কোড সেভ করা মনে রাখুন! আপনি যদি প্রাথমিকভাবে ওয়ার্কবুক .xls ফাইল টাইপে সেভ করেন, এক্সেল এখন আপনাকে ম্যাক্রো ইনাবল্ড ফাইল টাইপ ব্যবহার করতে বলবে, যেমন .xlsm।
ওয়ার্কবুক অটোমেটিক্যালি লোড করুন
এখন যেহেতু আপনার সেই সব পাওয়ারফুল ফাংশন তৈরি হয়েছে, বাকি আছে সেগুলো রান করা প্রতিবার ওয়ার্কবুক খোলার সাথে। এটি করা খুব সহজ।
বাম অবজেক্ট ব্রাউজারে, Microsoft Excel Objects-এর নিচে, আপনার ThisWorkbook দেখতে পাবেন। সেটা ডাবল ক্লিক করুন খোলার জন্য।
কোড এরিয়ারের টপে দুটি ড্রপডাউন বক্স আছে, বামটিকে Workbook এবং ডানটিকে Open-এ চেঞ্জ করুন।
আপনি একটি ফাংশন অটোমেটিক্যালি জেনারেটেড দেখবেন যাকে বলে Private Sub Workbook_Open()।
এখানে নিচের লাইনগুলো টাইপ করুন যাতে ফাংশনটি এমন হয়:
Private Sub Workbook_Open()
NetworkWMI
LogicalDiskWMI
ProcessorWMI
PhysicalMemWMI
VideoControlWMI
OnBoardWMI
PrinterWMI
SoftwareWMI
OperatingWMI
ServicesWMI
End Sub
এখন, প্রতিবার আপনি ওয়ার্কবুক খোলেন, আপনার নতুন তৈরি করা প্রতিটি ফাংশন কল হবে, কম্পিউটার থেকে সকল ডেটা পুল করবে, এবং উপযুক্ত শিটে লোড করবে।
এটি একশনে দেখতে, কোড সেভ করুন, কোড উইন্ডো বন্ধ করুন, ওয়ার্কবুক সেভ করুন, এবং সেটাও বন্ধ করুন। আপনি যেনা ফাইলটা ক্লোজ করেছিলেন সেটা রি-ওপেন করুন, এবং আপনি আবিষ্কার করবেন যে প্রতিটি শিট আপনার কম্পিউটার সম্পর্কে বিপুল ডেটা ধারণ করছে।
যেহেতু ওয়ার্কবুক ম্যাক্রো ধারণ করে, যা সিকিউরিটি কারণাবশে ডিজেবল্ড থাকতে পারে, আপনাকে শীটের উপরে Enable Content ক্লিক করতে হতে পারে ডেটা কালেক্ট করার জন্য।
সতর্কতা — এটি অপ্রচুর ডেটা কালেক্ট করে, তাই ফাইল প্রথমবার খোলার সময় কয়েক মিনিট অপেক্ষা করতে হতে পারে।
কম্পিউটার ইনফরমেশন কালেক্ট করা
WMI ব্যবহার করার চমৎকার দিক হলো উপরের ডেটা শুধু আইসবার্গের টিপ। আপনার কম্পিউটার সিস্টেমের যেকোনো দিক সম্পর্কে ইনফরমেশন ধারণ করে صدেকতর WMI ক্লাস উপলব্ধ।
আপনি যদি aventureous হন এবং এক ধাপ এগিয়ে যেতে চান, তবে ওয়ার্কবুকের প্রথম শিটকে একটি ড্যাশবোর্ডে পরিণত করতে পারেন, এবং অন্যান্য শিট থেকে ডেটা ব্যবহার করে সেটা ফিড করতে পারেন।
বটম লাইন হলো, এই নতুন টুল ব্যবহার করে, আপনি অধিকাংশ IT এক্সপার্ট যেসব ডিটেলস রিয়ালাইজ করে না সেটাও কালেক্ট ও ডিসপ্লে করতে পারবেন, এবং সেটা করার জন্য আপনাকে সে এক্সপার্টদের কন্ট্রোল প্যানেল এবং অ্যাডমিনিস্ট্রেটিভ এরিয়া খুঁজে বের করার সময়ের একটি অঙ্কে সময় লাগবে।
আপনি কি এমন একটি টুল বিল্ড ও ব্যবহার করতে নিজেকে দেখছেন? আপনি কি VBA প্রোগ্রামার এবং কখনো WMI ক্লাস ব্যবহার করেছেন? কমেন্ট সেকশনে আপনার অভিজ্ঞতা ও আইডিয়া শেয়ার করুন!
ইমেজ কেডিট: Adriano Castelli via Shutterstock.com, Mclek via Shutterstock