Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Máy Chủ Windows

Cách tự động điền thông tin mô tả máy tính trong Active Directory

Bạn có thể lưu trữ nhiều thông tin hữu ích trong thuộc tính Description của đối tượng máy tính trong Active Directory. Ví dụ: thông tin về mẫu máy tính, kiểm kê phần cứng hoặc tên người dùng đăng nhập gần nhất. Trong bài viết này, chúng ta sẽ xem cách tự động điền và cập nhật thông tin vào trường Description của đối tượng máy tính trong Active Directory bằng PowerShell.

Cập nhật trường Description của máy tính trong Active Directory với PowerShell

Ví dụ, bạn muốn trường Description cho các máy tính và máy chủ trong bảng điều khiển Active Directory Users and Computers hiển thị thông tin về nhà sản xuất, mẫu máy và số serial. Bạn có thể lấy thông tin này trên máy cục bộ từ WMI bằng lệnh PowerShell sau:

Get-WMIObject Win32_ComputerSystemProduct | Select Vendor, Name, IdentifyingNumber

Truy vấn WMI trả về dữ liệu sau:

  • Vendor – HP
  • Name – Proliant DL 360 G5
  • IdentifyingNumber – CZJ733xxxx

Cách tự động điền thông tin mô tả máy tính trong Active Directory

Lấy tên máy tính hiện tại từ biến môi trường và gán vào biến $computer:

$computer = $env:COMPUTERNAME

Sau đó lưu thông tin phần cứng của máy tính:

$computerinfo = Get-WMIObject Win32_ComputerSystemProduct
$Vendor = $computerinfo.vendor
$Model = $computerinfo.Name
$SerialNumber = $computerinfo.identifyingNumber

Kiểm tra các giá trị được gán cho các biến:

$computer
$vendor
$Model
$SerialNumber

Cuối cùng, ghi dữ liệu nhận được vào trường Description của tài khoản máy tính trong Active Directory. Chạy script PowerShell sau:

$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()

Bạn cũng có thể thay đổi mô tả máy tính bằng cmdlet Set-ADComputer. Tuy nhiên, điều này yêu cầu cài đặt Module Active Directory cho Windows PowerShell (từ bộ công cụ quản trị RSAT) trên máy tính.

Set-ADComputer $computer –Description "$vendor|$Model|$SerialNumber”

Nếu bạn muốn sử dụng các cmdlet từ module AD PowerShell, bạn có thể sao chép các file module đến tất cả các máy tính mà không cần cài đặt RSAT.

Kiểm tra xem trường Description của máy tính trong bảng điều khiển ADUC có hiển thị thông tin nhà sản xuất và mẫu mã hay không.

Cách tự động điền thông tin mô tả máy tính trong Active Directory

Script như vậy chỉ cập nhật thuộc tính description của máy tính hiện tại trong AD. Bạn có thể điền Description từ xa cho tất cả các máy tính trong domain bằng Get-ADComputer và vòng lặp foreach. Nhưng việc để các máy tính tự động cập nhật thông tin của chúng trong AD khi người dùng đăng nhập hoặc máy tính khởi động sẽ thuận tiện hơn nhiều.

Để làm được điều này, bạn cần tạo một Group Policy với script đăng nhập PowerShell và áp dụng nó cho tất cả các máy tính:

  1. Mở bảng điều khiển Quản lý Group Policy của domain (gpmc.msc), tạo một GPO và gán nó cho OU chứa máy tính;
  2. Mở rộng GPO: User Configuration -> Policies -> Windows Settings -> Scripts (Logon / Logoff) -> Logon;
  3. Chuyển sang tab PowerShell Scripts;
  4. Nhấn nút Show Files và tạo file FillCompDesc.ps1 với mã sau:
    # ghi thông tin phần cứng/mẫu máy tính vào trường Description trong 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()
    Bạn có thể tùy chọn ghi log hành động của script PowerShell để dễ dàng khắc phục sự cố.
  5. Nhấn nút Add và đặt các tham số script sau:
    Script name: FillCompDesc.ps1
    Script Parameters: -ExecutionPolicy Bypass Cách tự động điền thông tin mô tả máy tính trong Active Directory Trong trường hợp này, bạn không cần thay đổi cài đặt chính sách thực thi PowerShell hoặc ký file script PS1 để chạy script PowerShell.
  6. Ủy quyền quyền AD cho một OU cụ thể cho nhóm domain Authenticated Users. Gán quyền thay đổi thuộc tính Description của tất cả đối tượng Computer trong OU (quyền Write Description). Điều này sẽ cho phép người dùng và máy tính trong domain thay đổi giá trị trong thuộc tính Description của đối tượng máy tính; Cách tự động điền thông tin mô tả máy tính trong Active Directory
  7. Sau khi khởi động lại các máy tính trong OU đích và cập nhật cài đặt Group Policy, trường Description trong AD sẽ được tự động điền. Trường này sẽ chứa thông tin phần cứng của máy tính. Bạn có thể khắc phục sự cố GPO bằng công cụ gpresult hoặc sử dụng các mẹo từ bài viết "Common problems causing group policy to not apply".

Như vậy, bạn có thể thêm bất kỳ thông tin nào vào trường Description của đối tượng máy tính trong AD. Ví dụ: tên người dùng đăng nhập gần nhất, phòng ban (bạn có thể lấy thông tin này bằng cmdlet Get-ADUser), địa chỉ IP của máy tính hoặc bất kỳ thông tin liên quan nào khác bạn cần.

Lưu ý. Nhược điểm của cách tiếp cận này là bất kỳ người dùng AD đã xác thực nào cũng có thể thay đổi hoặc xóa mô tả của bất kỳ máy tính nào trong Active Directory.

Thêm tên người dùng đăng nhập gần nhất vào mô tả máy tính trong AD

Script PowerShell ở trên có thể được sử dụng để thêm bất kỳ thông tin nào khác vào mô tả của đối tượng máy tính trong AD. Ví dụ, rất hữu ích khi mô tả máy tính hiển thị người dùng hiện đang đăng nhập. Hãy cũng thêm tên bộ điều khiển domain mà người dùng được xác thực trên đó (LOGONSERVER).

Thay đổi một dòng trong script đăng nhập PowerShell thành:

$computerObj.Put("Description","$vendor|$Model|$SerialNumber|$env:username|$env:LOGONSERVER")

Đăng xuất và đăng nhập lại dưới tài khoản người dùng của bạn. Kiểm tra xem thuộc tính mô tả máy tính hiện tại có hiển thị tên người dùng hiện tại và logonserver (bộ điều khiển domain) bạn được xác thực hay không.

Cách tự động điền thông tin mô tả máy tính trong Active Directory

Để phân tích dữ liệu từ thuộc tính Description, bạn có thể sử dụng mã PowerShell sau:

$ComputerName = 'PC-MUN22s7b2'
$vendor,$Model,$SerialNumber,$Username,$LogonServer = ((Get-ADComputer -identity $ComputerName -Properties *).description).split("|")

Chúng ta tách giá trị trường Description (được phân tách bằng |) thành nhiều biến riêng biệt. Để lấy tên người dùng trên máy tính từ xa được chỉ định, chỉ cần chạy:

$Username

Cách tự động điền thông tin mô tả máy tính trong Active Directory

Bạn có thể lấy tên máy tính mà một người dùng cụ thể hiện đang đăng nhập bằng script PowerShell sau:

$user='*M.Becker*'
Get-ADComputer -Filter "description -like '$user'" -properties * | select name,description | ft