คุณสามารถจัดเก็บข้อมูลที่เป็นประโยชน์ต่างๆ ไว้ในฟิลด์ Description ของออบเจ็กต์คอมพิวเตอร์ใน Active Directory ได้ เช่น ข้อมูลรุ่นคอมพิวเตอร์ รายการฮาร์ดแวร์ หรือชื่อผู้ใช้ที่ล็อกอินล่าสุด ในบทความนี้เราจะมาดูวิธีการกรอกและอัปเดตข้อมูลในฟิลด์ Description ของออบเจ็กต์คอมพิวเตอร์ใน Active Directory โดยอัตโนมัติด้วย PowerShell
อัปเดตฟิลด์คำอธิบายคอมพิวเตอร์ใน Active Directory ด้วย PowerShell
เช่น คุณต้องการให้ฟิลด์ Description สำหรับคอมพิวเตอร์และเซิร์ฟเวอร์ในคอนโซล Active Directory Users and Computers แสดงข้อมูลเกี่ยวกับผู้ผลิต รุ่น และหมายเลขซีเรียลของคอมพิวเตอร์ คุณสามารถดึงข้อมูลนี้ได้จาก WMI บนเครื่องท้องถิ่นด้วยคำสั่ง PowerShell ดังนี้:
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
ลองดูค่าที่กำหนดให้ตัวแตrables:
$computer
$vendor
$Model
$SerialNumber
เหลือเพียงเขียนข้อมูลที่ได้รับไปในฟิลด์ Description ของบัญชีคอมพิวเตอร์ใน Active Directory ให้รันสคริปต์ PowerShell ต่อไปนี้:
$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 ได้เช่นกัน อย่างไรก็ตาม วิธีนี้ต้องติดตั้งโมดูล Active Directory สำหรับ Windows PowerShell (จากชุดเครื่องมือ RSAT) บนคอมพิวเตอร์
Set-ADComputer $computer –Description "$vendor|$Model|$SerialNumber”
หากคุณต้องการใช้คำสั่งจากโมดูล AD PowerShell คุณสามารถคัดลอกไฟล์โมดูลไปยังคอมพิวเตอร์ทั้งหมดโดยไม่ต้องติดตั้ง RSAT ตรวจสอบว่าฟิลด์คำอธิบายคอมพิวเตอร์ในคอนโซล ADUC แสดงข้อมูลผู้ผลิตและรุ่นแล้ว
สคริปต์ดังกล่าวจะอัปเดตแอตทริบิวต์คำอธิบายของคอมพิวเตอร์ปัจจุบันใน AD เท่านั้น คุณสามารถกรอก Description ให้คอมพิวเตอร์ทั้งหมดในโดเมนจากระยะไกลโดยใช้ Get-ADComputer และลูป foreach แต่จะสะดวกกว่ามากหากคอมพิวเตอร์อัปเดตข้อมูลใน AD เองอัตโนมัติเมื่อผู้ใช้ล็อกอินหรือคอมพิวเตอร์บูท
เพื่อทำเช่นนี้ คุณต้องสร้าง Group Policy พร้อมสคริปต์ PowerShell สำหรับ Logon และนำไปใช้กับคอมพิวเตอร์ทั้งหมด:
- เปิดคอนโซล Group Policy Management (
gpmc.msc) สร้าง GPO และกำหนดให้ OU ที่มีคอมพิวเตอร์ - ขยาย GPO: User Configuration → Policies → Windows Settings → Scripts (Logon / Logoff) → Logon
- ไปที่แท็บ PowerShell Scripts
- คลิกปุ่ม Show Files และสร้างไฟล์ FillCompDesc.ps1 พร้อมโค้ดดังนี้:
# เขียนข้อมูลฮาร์ดแวร์/รุ่นคอมพิวเตอร์ในฟิลด์ Description ใน Active Directory
$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()
คุณสามารถบันทึกการทำงานของสคริปต์ PowerShell เพื่อการแก้ไขปัญหาได้ตามต้องการ - คลิกปุ่ม Add และตั้งค่าพารามิเตอร์สคริปต์ดังนี้:
Script name:FillCompDesc.ps1
Script Parameters:-ExecutionPolicy Bypassในกรณีนี้ คุณไม่ต้องเปลี่ยนการตั้งค่านโยบายการรัน PowerShell หรือเซ็นไฟล์ PS1 เพื่อรันสคริปต์ - มอบสิทธิ์ AD ให้ OU เฉพาะแก่กลุ่มโดเมน Authenticated Users กำหนดสิทธิ์เปลี่ยนแอตทริบิวต์ Description ของออบเจ็กต์ Computer ทั้งหมดใน OU (สิทธิ์
Write Description) ซึ่งจะอนุญาตให้ผู้ใช้และคอมพิวเตอร์ในโดเมนเปลี่ยนค่าในแอตทริบิวต์ Description ของออบเจ็กต์คอมพิวเตอร์ได้ - หลังจากรีสตาร์ทคอมพิวเตอร์ใน OU เป้าหมายและอัปเดตการตั้งค่า Group Policy ฟิลด์ Description ใน AD จะถูกกรอกอัตโนมัติ ฟิลด์นี้จะมีข้อมูลเกี่ยวกับฮาร์ดแวร์ของคอมพิวเตอร์ คุณสามารถแก้ไขปัญหา GPO ได้โดยใช้เครื่องมือ
gpresultหรือเคล็ดลับจากบทความ ปัญหาทั่วไปที่ทำให้ Group Policy ไม่ถูกนำไปใช้
ดังนั้น คุณสามารถเพิ่มข้อมูลใดๆ ในฟิลด์ Description ของออบเจ็กต์คอมพิวเตอร์ใน AD ได้ เช่น ชื่อผู้ใช้ที่ล็อกอินล่าสุด แผนก (สามารถดึงข้อมูลได้โดยใช้คำสั่ง Get-ADUser) ที่อยู่ IP ของคอมพิวเตอร์ หรือข้อมูลที่เกี่ยวข้องอื่นๆ ที่คุณต้องการ
หมายเหตุ ข้อเสียของวิธีนี้คือ ผู้ใช้ AD ที่ผ่านการรับรองความถูกต้องทุกคนสามารถเปลี่ยนหรือลบคำอธิบายของคอมพิวเตอร์ใดๆ ใน Active Directory ได้เพิ่มชื่อผู้ใช้ที่ล็อกอินล่าสุดในคำอธิบายคอมพิวเตอร์ใน AD
สคริปต์ PowerShell ด้านบนสามารถใช้เพิ่มข้อมูลอื่นๆ ลงในคำอธิบายของออบเจ็กต์คอมพิวเตอร์ใน AD ได้ เช่น มีประโยชน์เมื่อคำอธิบายคอมพิวเตอร์แสดงผู้ใช้ที่ล็อกอินอยู่ เรามาเพิ่มชื่อโดเมนคอนโทรลเลอร์ที่ผู้ใช้รับรองความถูกต้อง (LOGONSERVER) ด้วย
เปลี่ยนบรรทัดเดียวในสคริปต์ PowerShell Logon เป็น:
$computerObj.Put("Description","$vendor|$Model|$SerialNumber|$env:username|$env:LOGONSERVER")
ล็อกออทและล็อกอินเข้าด้วยบัญชีผู้ใช้ของคุณ ตรวจสอบว่าแอตทริบิวต์คำอธิบายคอมพิวเตอร์แสดงชื่อผู้ใช้ปัจจุบันและ logonserver (โดเมนคอนโทรลเลอร์) ที่คุณรับรองความถูกต้องแล้ว
เพื่อแยกวิเคราะห์ข้อมูลจากแอตทริบิวต์ Description คุณสามารถใช้โค้ด PowerShell ต่อไปนี้:
$ComputerName = 'PC-MUN22s7b2'
$vendor,$Model,$SerialNumber,$Username,$LogonServer = ((Get-ADComputer -identity $ComputerName -Properties *).description).split("|")
เราแยกค่าของฟิลด์ Description (คั่นด้วย |) ออกเป็นตัวแปรหลายตัว เพื่อดึงชื่อผู้ใช้บนคอมพิวเตอร์ระยะไกลที่ระบุ ให้รัน:
$Username
คุณสามารถดึงชื่อคอมพิวเตอร์ที่ผู้ใช้เฉพาะกำลังล็อกอินอยู่โดยใช้สคริปต์ PowerShell ต่อไปนี้:
$user='*M.Becker*'
Get-ADComputer -Filter "description -like '$user'" -properties *|select name,description |ft