এক্টিভ ডিরেক্টরির কম্পিউটার অবজেক্টের Description ফিল্ডে আপনি বিভিন্ন দরকারী তথ্য সংরক্ষণ করতে পারেন। উদাহরণস্বরূপ, কম্পিউটার মডেল, হার্ডওয়্যার ইনভেন্টরি, বা শেষ লগ-ইন করা ব্যবহারকারীর ব্যবহারকারীর নাম। এই নিবন্ধে, আমরা পাওয়ারশেল ব্যবহার করে এক্টিভ ডিরেক্টরির কম্পিউটার অবজেক্টের Description ফিল্ডে তথ্য স্বয়ংক্রিয়ভাবে পূরণ এবং আপডেট করার পদ্ধতি দেখব।
পাওয়ারশেল দিয়ে এক্টিভ ডিরেক্টরিতে কম্পিউটার ডিসক্রিপশন ফিল্ড আপডেট করুন
মনে করুন, আপনি চান এক্টিভ ডিরেক্টরি ইউজার্স অ্যান্ড কম্পিউটারস কনসোলে কম্পিউটার এবং সার্ভারের Description ফিল্ডে কোম্পানির নাম, মডেল, এবং সিরিয়াল নম্বর প্রদর্শিত হয়। আপনি আপনার লোকাল মেশিন থেকে WMI ব্যবহার করে নিম্নলিখিত পাওয়ারশেল কমান্ড দিয়ে এই তথ্য পেতে পারেন:
Get-WMIObject Win32_ComputerSystemProduct | Select Vendor, Name, IdentifyingNumber
WMI কোয়েরি নিচের ডেটা রিটার্ন করে:
- Vendor – HP
- Name – Proliant DL 360 G5
- IdentifyingNumber – CZJ733xxxx

এনভায়রনমেন্ট ভেরিয়েবল থেকে বর্তমান কম্পিউটারের নাম বের করে $computer ভেরিয়েবলে অ্যাসাইন করুন:
$computer = $env:COMPUTERNAME
তারপর কম্পিউটারের হার্ডওয়্যার তথ্য সংরক্ষণ করুন:
$computerinfo= Get-WMIObject Win32_ComputerSystemProduct
$Vendor = $computerinfo.vendor
$Model = $computerinfo.Name
$SerialNumber = $computerinfo.identifyingNumber
ভেরিয়েবলগুলোতে কী মান অ্যাসাইন হয়েছে তা দেখুন:
$computer
$vendor
$Model
$SerialNumber
এখন এক্টিভ ডিরেক্টরির কম্পিউটার অ্যাকাউন্টের Description ফিল্ডে ডেটা লিখুন। নিচের পাওয়ারশেল স্ক্রিপ্টটি রান করুন:
$ComputerSearcher = New-Object DirectoryServices.DirectorySearcher
$ComputerSearcher.SearchRoot = "LDAP://$("DC=$(($ENV:USERDNSDOMAIN).Replace(".",",DC="))")"
$ComputerSearcher.Filter = "(&(objectCategory=Computer)(CN=$Computer))"
$computerObj = [ADSI]$ComputerSearcher.FindOne().Path
$computerObj.Put( "Description", "$vendor|$Model|$SerialNumber" )
$computerObj.SetInfo()
আপনি Set-ADComputer কমান্ডলেট ব্যবহার করেও কম্পিউটার ডিসক্রিপশন পরিবর্তন করতে পারেন। তবে এর জন্য আপনার কম্পিউটারে RSAT অ্যাডমিন টুলকিট থেকে এক্টিভ ডিরেক্টরি মডিউল ইনস্টল থাকতে হবে।
Set-ADComputer $computer –Description "$vendor|$Model|$SerialNumber”
যদি আপনি AD পাওয়ারশেল মডিউলের কমান্ডলেট ব্যবহার করতে চান, তবে RSAT ইনস্টল না করে মডিউল ফাইলগুলো সব কম্পিউটারে কপি করা সম্ভব। ADUC কনসোলে কম্পিউটার Description ফিল্ডে ম্যানুফ্যাকচারার এবং মডেল ইনফো দেখাচ্ছে কিনা যাচাই করুন।

এই স্ক্রিপ্ট শুধু বর্তমান কম্পিউটারের ডিসক্রিপশন অ্যাট্রিবিউট আপডেট করবে। আপনি Get-ADComputer এবং foreach লুপ ব্যবহার করে রিমোটলি সকল ডোমেইন কম্পিউটারের ডিসক্রিপশন পূরণ করতে পারেন। কিন্তু ব্যবহারকারী লগ-ইন করলে বা কম্পিউটার বুট হলে স্বয়ংক্রিয়ভাবে AD-তে তথ্য আপডেট হলে আরও সুবিধাজনক।
এজন্য একটি গ্রুপ পলিসি তৈরি করতে হবে যাতে পাওয়ারশেল লগ-অন স্ক্রিপ্ট থাকে এবং সেটি সব কম্পিউটারে প্রয়োগ করা হবে:
- ডোমেইন গ্রুপ পলিসি ম্যানেজমেন্ট কনসোলে (
gpmc.msc) একটি GPO তৈরি করুন এবং কম্পিউটারवाले OU-তে লিংক করুন; - GPO এক্সপ্যান্ড করুন: User Configuration → Policies → Windows Settings → Scripts (Logon / Logoff) → Logon;
- PowerShell Scripts ট্যাবে যান;
- Show Files বাটনে ক্লিক করুন এবং FillCompDesc.ps1 ফাইল তৈরি করে নিচের কোড বসান:
# কম্পিউটার হার্ডওয়্যার/মডেলের তথ্য এক্টিভ ডিরেক্টরির Description ফিল্ডে লিখুন
$computer = $env:COMPUTERNAME
$computerinfo= Get-WMIObject Win32_ComputerSystemProduct
$Vendor = $computerinfo.vendor
$Model = $computerinfo.Name
$SerialNumber = $computerinfo.identifyingNumber
$DNSDOMAIN= (Get-WmiObject -Namespace root\cimv2 -Class Win32_ComputerSystem).Domain
$ComputerSearcher = New-Object DirectoryServices.DirectorySearcher
$ComputerSearcher.SearchRoot = "LDAP://$("DC=$(($DNSDOMAIN).Replace(".",",DC="))")"
$ComputerSearcher.Filter = "(&(objectCategory=Computer)(CN=$Computer))"
$computerObj = [ADSI]$ComputerSearcher.FindOne().Path
$computerObj.Put( "Description", "$vendor|$Model|$SerialNumber" )
$computerObj.SetInfo()
আপনি সমস্যা সমাধানের সুবিধার্থে পাওয়ারশেল স্ক্রিপ্টের ক্রিয়াকলাপ লগ করতে পারেন। - Add বাটনে ক্লিক করুন এবং নিচের প্যারামিটার সেট করুন:
Script name:FillCompDesc.ps1
Script Parameters:-ExecutionPolicy Bypass
এতে আপনাকে পাওয়ারশেল এক্সিকিউশন পলিসি পরিবর্তন করতে হবে না বা PS1 ফাইল সাইন করতে হবে না। - টার্গেট OU-তে Authenticated Users ডোমেইন গ্রুপের জন্য AD পারমিশন ডেলিগেট করুন। OU-তে সব কম্পিউটার অবজেক্টের Description অ্যাট্রিবিউট পরিবর্তনের অধিকার (
Write Descriptionপারমিশন) দিন। এতে ডোমেইন ইউজার এবং কম্পিউটার কম্পিউটার অবজেক্টের Description মান পরিবর্তন করতে পারবে;
- টার্গেট OU-তে কম্পিউটার রিস্টার্ট করুন এবং গ্রুপ পলিসি আপডেট করুন। AD-তে Description ফিল্ড স্বয়ংক্রিয়ভাবে পূরণ হবে। এই ফিল্ডে কম্পিউটারের হার্ডওয়্যার তথ্য থাকবে। GPO ট্রাবলশুট করতে
gpresultটুল বা Common problems causing group policy to not apply নিবন্ধটি দেখুন।
এভাবে আপনি AD-তে কম্পিউটার অবজেক্টের Description ফিল্ডে যেকোনো তথ্য যোগ করতে পারেন। যেমন, শেষ লগ-ইন করা ব্যবহারকারীর নাম, ডিপার্টমেন্ট (Get-ADUser কমান্ডলেট দিয়ে পাওয়া যায়), কম্পিউটারের IP ঠিকানা, বা অন্য প্রাসঙ্গিক তথ্য।
দ্রষ্টব্য: এই পদ্ধতির একটি খামি হল যে যেকোনো প্রমাণীকৃত AD ব্যবহারকারী এক্টিভ ডিরেক্টরিতে যেকোনো কম্পিউটারের ডিসক্রিপশন পরিবর্তন বা ডিলিট করতে পারে।এক্টিভ ডিরেক্টরিতে কম্পিউটার ডিসক্রিপশনে শেষ লগ-ইন করা ব্যবহারকারীর নাম যোগ করুন
উপরোক্ত পাওয়ারশেল স্ক্রিপ্ট ব্যবহার করে আপনি AD-তে কম্পিউটার অবজেক্টের ডিসক্রিপশনে অন্য কোনো তথ্য যোগ করতে পারেন। উদাহরণস্বরূপ, কম্পিউটারের ডিসক্রিপশনে বর্তমানে লগ-ইন করা ব্যবহারকারীর নাম দেখানো খুব উপকারী। এছাড়াও ব্যবহারকারী যেন ডোমেইন কন্ট্রোলার দ্বারা প্রমাণীকৃত হয়েছে তার নাম (LOGONSERVER) যোগ করা যাক।
পাওয়ারশেল লগ-অন স্ক্রিপ্টের এক লাইন পরিবর্তন করুন:
$computerObj.Put("Description","$vendor|$Model|$SerialNumber|$env:username|$env:LOGONSERVER")
লগ-অফ করুন এবং আপনার ব্যবহারকারী অ্যাকাউন্ট দিয়ে সাইন-ইন করুন। চেক করুন যে কম্পিউটার ডিসক্রিপশন অ্যাট্রিবিউটে বর্তমান ব্যবহারকারীর নাম এবং লগ-অন সার্ভার (ডোমেইন কন্ট্রোলার) দেখাচ্ছে।

Description অ্যাট্রিবিউট থেকে ডেটা পার্স করতে নিচের পাওয়ারশেল কোড ব্যবহার করুন:
$ComputerName = 'PC-MUN22s7b2'
$vendor,$Model,$SerialNumber,$Username,$LogonServer = ((Get-ADComputer -identity $ComputerName -Properties *).description).split("|")
Description ফিল্ডের মান ( | দিয়ে পৃথক) কয়েকটি আলাদা ভেরিয়েবলে ভাগ করা হয়েছে। নির্দিষ্ট রিমোট কম্পিউটারের ব্যবহারকারীর নাম পেতে শুধু রান করুন:
$Username

নির্দিষ্ট ব্যবহারকারী বর্তমানে কোন কম্পিউটারে লগ-ইন করা আছে তা জানতে নিচের পাওয়ারশেল স্ক্রিপ্ট ব্যবহার করুন:
$user='*M.Becker*'
Get-ADComputer -Filter "description -like '$user'" -properties *|select name,description |ft