आप एक्टिव डायरेक्टरी में कंप्यूटर ऑब्जेक्ट्स के विवरण में विभिन्न उपयोगी जानकारी संग्रहीत कर सकते हैं। उदाहरण के लिए, कंप्यूटर मॉडल, हार्डवेयर इन्वेंट्री, या अंतिम लॉगऑन किए गए उपयोगकर्ता का नाम। इस लेख में, हम देखेंगे कि पावरशेल का उपयोग करके एक्टिव डायरेक्टरी में कंप्यूटर ऑब्जेक्ट्स के विवरण फ़ील्ड में जानकारी को स्वचालित रूप से कैसे भरें और अपडेट करें।
पावरशेल के साथ एक्टिव डायरेक्टरी में कंप्यूटर विवरण फ़ील्ड अपडेट करें
उदाहरण के लिए, आप चाहते हैं कि एक्टिव डायरेक्टरी यूजर्स एंड कंप्यूटर्स कंसोल में कंप्यूटर्स और सर्वर्स के लिए विवरण फ़ील्ड में कंप्यूटर के निर्माता, मॉडल और सीरियल नंबर की जानकारी प्रदर्शित हो। आप निम्न पावरशेल कमांड का उपयोग करके 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
अब प्राप्त डेटा को एक्टिव डायरेक्टरी में कंप्यूटर खाते के विवरण फ़ील्ड में लिखना बाकी है। निम्न पावरशेल स्क्रिप्ट चलाएं:
$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 cmdlet का उपयोग करके कंप्यूटर विवरण में परिवर्तन भी कर सकते हैं। हालांकि, इसके लिए कंप्यूटर पर एक्टिव डायरेक्टरी मॉड्यूल फॉर विंडोज पावरशेल (RSAT एडमिनिस्ट्रेशन टूलकिट से) इंस्टॉल होना आवश्यक है।
Set-ADComputer $computer –Description "$vendor|$Model|$SerialNumber”
यदि आप AD पावरशेल मॉड्यूल से cmdlets का उपयोग करना चाहते हैं, तो आप मॉड्यूल फ़ाइलों को RSAT इंस्टॉल किए बिना सभी कंप्यूटर्स पर कॉपी कर सकते हैं। ADUC कंसोल में कंप्यूटर विवरण फ़ील्ड में निर्माता और मॉडल जानकारी दिखाई दे रही है या नहीं, इसे सत्यापित करें।
ऐसी स्क्रिप्ट केवल AD में वर्तमान कंप्यूटर विवरण विशेषता को अपडेट करेगी। आप Get-ADComputer और foreach लूप का उपयोग करके दूरस्थ रूप से सभी डोमेन कंप्यूटर्स के लिए विवरण भर सकते हैं। लेकिन यह अधिक सुविधाजनक है कि कंप्यूटर उपयोगकर्ता लॉगऑन या कंप्यूटर बूट होने पर अपनी जानकारी AD में स्वचालित रूप से अपडेट करें।
ऐसा करने के लिए, आपको पावरशेल लॉगऑन स्क्रिप्ट के साथ एक ग्रुप पॉलिसी बनाने और इसे सभी कंप्यूटर्स पर लागू करने की आवश्यकता है:
- डोमेन ग्रुप पॉलिसी मैनेजमेंट कंसोल (
gpmc.msc) खोलें, एक GPO बनाएं और इसे कंप्यूटर्स वाले OU पर असाइन करें; - GPO का विस्तार करें: उपयोगकर्ता कॉन्फ़िगरेशन -> नीतियां -> विंडोज सेटिंग्स -> स्क्रिप्ट्स (लॉगऑन/लॉगऑफ) -> लॉगऑन;
- पावरशेल स्क्रिप्ट्स टैब पर जाएं;
- फ़ाइलें दिखाएं बटन पर क्लिक करें और निम्न कोड के साथ FillCompDesc.ps1 फ़ाइल बनाएं:
# एक्टिव डायरेक्टरी में विवरण फ़ील्ड में कंप्यूटर हार्डवेयर/मॉडल के बारे में जानकारी लिखें
$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()
आप पावरशेल स्क्रिप्ट क्रियाओं को लॉग कर सकते हैं ताकि समस्या निवारण आसान हो। - जोड़ें बटन पर क्लिक करें और निम्न स्क्रिप्ट पैरामीटर्स सेट करें:
स्क्रिप्ट नाम:FillCompDesc.ps1
स्क्रिप्ट पैरामीटर्स:-ExecutionPolicy Bypassइस मामले में, आपको पावरशेल एक्ज़ीक्यूशन पॉलिसी सेटिंग्स बदलने या अपनी PS1 स्क्रिप्ट फ़ाइल पर हस्ताक्षर करने की आवश्यकता नहीं है। - प्रमाणित उपयोगकर्ता डोमेन ग्रुप के लिए एक विशिष्ट OU के लिए AD अनुमतियां सौंपें। OU में सभी कंप्यूटर ऑब्जेक्ट्स के विवरण विशेषता को बदलने के अधिकार असाइन करें (
विवरण लिखेंअनुमति)। यह डोमेन उपयोगकर्ताओं और कंप्यूटर्स को कंप्यूटर ऑब्जेक्ट्स के विवरण विशेषता में मान बदलने की अनुमति देगा; - लक्ष्य OU में कंप्यूटर्स को पुनरारंभ करने और ग्रुप पॉलिसी सेटिंग्स अपडेट करने के बाद, AD में विवरण फ़ील्ड स्वचालित रूप से भर जाएगा। इस फ़ील्ड में कंप्यूटर के हार्डवेयर के बारे में जानकारी होगी। आप
gpresultटूल का उपयोग करके या "ग्रुप पॉलिसी लागू न होने के सामान्य कारण" लेख से सुझावों का उपयोग करके GPOs का समस्या निवारण कर सकते हैं।
इस प्रकार, आप AD में कंप्यूटर ऑब्जेक्ट्स के विवरण फ़ील्ड में कोई भी जानकारी जोड़ सकते हैं। उदाहरण के लिए, अंतिम लॉगऑन किए गए उपयोगकर्ता का नाम, विभाग (आप Get-ADUser cmdlet का उपयोग करके यह जानकारी प्राप्त कर सकते हैं), कंप्यूटर का IP पता, या कोई अन्य प्रासंगिक जानकारी जिसकी आपको आवश्यकता है।
एक्टिव डायरेक्टरी में कंप्यूटर विवरण में अंतिम लॉगऑन उपयोगकर्ता नाम जोड़ना
ऊपर दी गई पावरशेल स्क्रिप्ट का उपयोग AD में कंप्यूटर ऑब्जेक्ट्स के विवरण में कोई अन्य जानकारी जोड़ने के लिए किया जा सकता है। उदाहरण के लिए, यह तब उपयोगी होता है जब कंप्यूटर का विवरण वर्तमान में लॉगऑन किए गए उपयोगकर्ता को दिखाता है। आइए उस डोमेन कंट्रोलर का नाम भी जोड़ें जिस पर उपयोगकर्ता प्रमाणित है (LOGONSERVER)।
पावरशेल लॉगऑन स्क्रिप्ट में एक पंक्ति बदलें:
$computerObj.Put("Description","$vendor|$Model|$SerialNumber|$env:username|$env:LOGONSERVER")
लॉगऑफ करें और अपने उपयोगकर्ता खाते से साइन इन करें। जांचें कि कंप्यूटर विवरण विशेषता अब वर्तमान उपयोगकर्ता का नाम और लॉगऑन सर्वर (डोमेन कंट्रोलर) दिखाती है जिससे आप प्रमाणित हुए।
विवरण विशेषता से डेटा पार्स करने के लिए, आप निम्न पावरशेल कोड का उपयोग कर सकते हैं:
$ComputerName = 'PC-MUN22s7b2'
$vendor,$Model,$SerialNumber,$Username,$LogonServer = ((Get-ADComputer -identity $ComputerName -Properties *).description).split("|")
हम विवरण फ़ील्ड मान को ( | से अलग) कई अलग-अलग वेरिएबल्स में विभाजित करते हैं। निर्दिष्ट रिमोट कंप्यूटर पर उपयोगकर्ता नाम प्राप्त करने के लिए, बस चलाएं:
$Username
आप निम्न पावरशेल स्क्रिप्ट का उपयोग करके उस कंप्यूटर का नाम प्राप्त कर सकते हैं जिस पर कोई विशिष्ट उपयोगकर्ता वर्तमान में लॉगऑन है:
$user='*M.Becker*'
Get-ADComputer -Filter "description -like '$user'" -properties *|select name,description |ft