Phần 22: Populate cơ sở dữ liệu MDT bằng PowerShell

Trong phần trước của loạt bài này, chúng tôi đã giới thiệu cho các bạn cách cấu hình và sử dụng cơ sở dữ liệu MDT cho các triển khai Lite Touch. Cho ví dụ, trong phần 16 chúng tôi đã giới thiệu cách sử dụng Deployment Workbench để bổ sung thêm các máy tính mục tiêu mới vào cơ sở dữ liệu để có thể tùy chỉnh triển khai Windows 7 dựa trên địa chỉ MAC hoặc UUID của mỗi máy tính mục tiêu. Tuy nhiên việc thực hiện thủ công bằng cách sử dụng Deployment Workbench quá nhàm chán – chắc chắn các bạn sẽ tự hỏi điều gì sẽ xảy ra nếu mình có đến hàng trăm máy tính muốn bổ sung vào cơ sở dữ liệu.
Đó chính là mảnh đất để Windows PowerShell dụng võ, công cụ hữu dụng này cho phép bạn có thể viết kịch bản để tự động hóa các nhiệm vụ quản trị nhàm chán. Tuy MDT 2010 không có sự hỗ trợ PowerShell đi kèm, nó cũng không có các lệnh cmdlet cho việc thao tác xử lý cơ sở dữ liệu MDT. Nhưng Michael Niehaus, một chuyên gia phát triển của MDT đã tạo một modul PowerShell riêng để người dùng có thể sử dụng nó cho việc bổ sung sự hỗ trợ PowerShell, từ đó có thể thao tác xử lý cơ sở dữ liệu MDT của mình. Trong bài này chúng tôi sẽ giới thiệu cách import modul này và sử dụng PowerShell để lấy spreadsheet chứa thông tin của máy tính mục tiêu và import các thông tin này vào cơ sở dữ liệu MDT như các mục máy tính mới.
Lưu ý: Bài viết này dựa trên giả thuyết rằng bạn chỉ là người mới biết PowerShell và mới có ít kinh nghiệm trong việc viết kịch bản PowerShell, tuy nhiên vẫn có một chút kiến thức về lập trình.
Cài đặt modul PowerShell cho MDT
Chúng ta hãy bắt đầu bằng cách download file nén chứa modul PowerShell có tên MDTDB.zip tại đây. Sau đó kích phải vào file đã download được và chọn Properties, tiếp đó kích Unblock. Giải nén file kịch bản MDTDB.psm1 và copy nó vào một thư mục (ở đây giả định là C:\Scripts) trên máy chủ MDT thử nghiệm của chúng tôi.
Lúc này mởi cửa sổ PowerShell và đánh vào đó lệnh Get-ExecutionPolicy để xem chính xác thực thi hiện hành trên máy chủ của bạn (xem tại đây để có thêm thông tin chi tiết):

Hình 1: Xem chính sách thực thi hiện hành
Nếu chính sách thực thi hiện hành có trạng thái hạn chế (Restricted), khi đó kịch bản MDTDB.psm1 sẽ không chạy, chính vì vậy hãy sử dụng lệnh Set-ExecutionPolicy Unrestricted để thay đổi chính sách thực thi thành Unrestricted:

Hình 2: Thay đổi chính sách thực thi thành Unrestricted
Lúc này đánh lệnh Import-Module –name C:\Scripts\MDTDB.psm1 để bổ sung thêm modul PowerShell cho MDT vào phiên PowerShell hiện hành như thể hiện ở đây:

Hình 3: Import modul PowerShell cho MDT
Lưu ý rằng đầu ra từ quá trình chạy lệnh Import-Module này sẽ liệt kê tất cả các lệnh PowerShell mới hiện có cho việc thao tác xử lý cơ sở dữ liệu MDT. Cho ví dụ, trong hình ở trên, bạn có thể thấy lệnh New-MDTComputer, đây là lệnh mà chúng ta sẽ sử dụng ở phần dưới bài này để bổ sung thêm các máy tính vào cơ sở dữ liệu.
Để thẩm định rằng modul đã được import, hãy đánh lệnh Get-Module như thể hiện dưới đây:

Hình 4: Thẩm định rằng modul đã được import
 
Kết nối đến cơ sở dữ liệu MDT
Lúc này chúng ta cần kết nối phiên PowerShell của mình đến cơ sở dữ liệu MDT. Để thực hiện điều đó, hãy sử dụng lệnh Connect-MDTDatabase. Để xem cú pháp cho lệnh này, bạn có thể đánh Get-Help Connect-MDTDatabase như thể hiện bên dưới:

Hình 5: Xem cú pháp lệnh Connect-MDTDatabase
Mẹo: Bạn cũng có thể tìm thêm các thông tin khác về lệnh này tại blog của Michael.
Để kết nối đến một cơ sở dữ liệu MDT có tên MDT trên một SQL Server instance có tên SQLEXPRESS trên máy chủ MDT có tên SEA-MDT-01, hãy đánh vào lệnh sau:
Connect-MDTDatabase –sqlServer SEA-MDT-01 –instance SQLEXPRESS –database MDT

Hình 6: Kết nối đến cơ sở dữ liệu MDT
Làm việc với các mục máy tính
Sau đây chúng ta hãy bắt đầu bằng cách xem liệu đã có mục máy tính nào trong cơ sở dữ liệu MDT chưa. Để thực hiện điều đó, chúng ta cần sử dụng lệnh Get-MDTComputer, vì vậy hãy sử dụng Get-Help để xem cú pháp của lệnh này:

Hình 7: Xem cú pháp của lệnh Get-MDTComputer
Để liệt kê tất cả các mục máy tính trong cơ sở dữ liệu, chúng ta chỉ cần đánh vào lệnh Get-MDTComputer:

Hình 8: Liệt kê tất cả các máy tính trong cơ sở dữ liệu MDT
Lệnh Get-MDTComputer sẽ hiển thị có một máy tính trong cơ sở dữ liệu và máy tính đó có địa chỉ MAC là EE:EE:EE:FF:FF:Firefox, ID là 2. Số ID là trường chính cho các mục máy tính. Nói cách khác, mỗi máy tính trong cơ sở dữ liệu sẽ có một số ID duy nhất.
Nếu mở Deployment Workbench, chúng ta sẽ thấy mục máy tính này:

Hình 9: Xem một máy tính nào đó bằng Workbench
Chúng ta cũng có thể xóa một máy tính nào đó bằng cách sử dụng Workbench, tuy nhiên hãy thưc hiện điều này bằng PowerShell thay vì. Nếu cần thiết, hãy đánh Get-Help Remove-MDTComputer để hiển thị cú pháp cho việc xóa máy tính. Sau đó đánh lệnh Remove-MDTComputer –id 2 –verbose để xóa máy tính và hiển thị các thông tin chi tiết có liên quan đến hoạt động:

Hình 10: Xóa một máy tính ra khỏi cơ sở dữ liệu
 
Import máy tính vào cơ sở dữ liệu
Chúng ta hãy đi import một số máy tính vào cơ sở dữ liệu. Bắt đầu bằng cách tạo một Excel spreadsheet với một vài cột tên, UUID, địa chỉ MAC và thuộc tính khác của các máy tính này. Mỗi hàng trong spreadsheet tương ứng với mỗi một máy tính. Để giới thiệu, chúng tôi sẽ tạo một spreadsheet cho một vài máy tính trong lab của mình:

Hình 11: Tạo một spreadsheet cho các máy tính mục tiêu
Export spreadsheet nào như một file văn bản CSV (có tên C:\Data\machines.txt ), bạn có thể mở bằng Notepad để xem nó như dưới đây:

Hình 12: File CSV cho các máy tính mục tiêu
Lúc này sử dụng lệnh Import-Csv cmdlet để import file CSV và gán nó cho biến $machines như dưới đây:
$machines = Import-Csv C:\Data\machines.txt

Hình 13: Import file CSV vào một biến
Đánh lệnh $machines sẽ hiển thị các thông tin đã được import, được lưu thành mảng:

Hình 14: Các thông tin máy tính được lưu dưới một mảng
Bạn có thể đánh lệnh $machines.count để hiển thị số thành phần trong mảng này:

Hình 15: Mảng có ba thành phần, mỗi một thành phần là một máy tính
Để hiển thị thành phần đầu tiên của mảng, bạn có thể đánh lệnh $machines[0]:

Hình 16: Hiển thị thành phần đầu tiên của mảng
Như những gì bạn thấy từ hình trên, thành phần đầu tiên của mảng gồm có thông tin về máy tính thứ nhất. Để chỉ hiển thị tên máy tính này, đánh $machines[0].name:

Hình 17: Hiển thị tên của máy tính đầu tiên
 
Bổ sung các máy tính đã được import vào cơ sở dữ liệu
Lúc này chúng ta đã biết chút ít về việc việc xử lý với mảng và sẵn sàng cho việc import các thông tin được lưu trong mảng dưới tên biến $machines vào cơ sở dữ liệu MDT. Để thực hiện điều đó, chúng ta hãy sử dụng lệnh New-MDTComputer, do đó hãy xem cú pháp của lệnh này:  

Hình 18: Xem cú pháp lệnh New-MDTComputer
Cần nhớ những gì chúng tôi đã giới thiệu trong phần 16, máy tính phải mang tính duy nhất trong cơ sở dữ liệu bằng cách sử dụng một hoặc một vài trường dưới đây:
  • Universally Unique Identifier (UUID)
  • Asset tag
  • Serial number
  • MAC address
Chúng ta hãy đi bổ sung máy tính đầu tiên trong spreadsheet của mình bằng cách sử dụng địa chỉ MAC của nó để phân biệt. Để thực hiện, hãy đánh vòa lệnh dưới đây:
New-MDTComputer –macAddress $machines[0].mac –settings @{OSInstall='YES'}

Hình 19: Add máy tính đầu tiên vào cơ sở dữ liệu bằng cách sử dụng địa chỉ MAC
Đóng và mở lại Workbench để refresh nó, khi đó bạn sẽ thấy máy tính mới này:

Hình 20: Máy tính mới đã được thêm vào cơ sở dữ liệu
Nếu kích đúp lên máy tính này, bạn sẽ thấy các thuộc tính của nó:

Hình 21: Thuộc tính của máy tính mới
Chọn tab Details, bạn sẽ thấy thuộc tính Osinstall đã được thiết lập là YES như mong đợi:

Hình 22: Các thuộc tính chi tiết của máy tính mới
Mặc dù vậy cần lưu ý trong hình trên rằng thuộc tính OSDComputerName của máy tính mới không có giá trị. Thuộc tính OSDComputerName chỉ định tên mà bạn muốn MDT gán cho máy tính mục tiêu, và nếu tham chiếu lại hình 11, bạn sẽ thấy chúng tôi đã thiết lập là DESK-A.
Chúng ta hãy đi xem xét cách bổ sung máy tính mới vào cơ sở dữ liệu trong khi đó chỉ định tên máy tính. Để giới thiệu cách thực hiện, chúng ta hãy đi add máy tính thứ hai trong spreadsheet bằng địa chỉ MAC của nó, thêm vào đó là chỉ định tên (như những gì bạn thấy trong hình 11, DESK-B). Để thực hiện, hãy đánh vào lệnh dưới đây:
New-MDTComputer –macAddress $machines[1].mac –settings @{OSInstall='YES';OSDComputerName=$machines[1].name}

Hình 23: Bổ sung máy tính thứ hai vào cơ sở dữ liệu bằng cách sử dụng địa chỉ MAC và chỉ định tên máy tính
Nếu đóng và mở lại Workbench, mở thuộc tính cho máy tính mới và chọn tab Details, lúc này bạn có thể thấy thuộc tính OSDComputerName có giá trị mong đợi là DESK-B như được gán cho nó:

Hình 24: Các thuộc tính chi tiết của máy tính mới
Chúng ta hãy thử thêm một ví dụ và add thêm một máy tính thứ ba vào spreadsheet bằng địa chỉ MAC, tiếp đó là chỉ thị tên máy tính, tên tổ chức và tên đầy đủ của người dùng. Để thực hiện, hãy đánh lệnh PowerShell:
New-MDTComputer –macAddress $machines[2].mac –settings @{
OSInstall='YES';
OSDComputerName=$machines[2].name;
FullName='Michael Allen';
OrgName='Contoso Ltd.'}

Hình 25: Bổ sung thêm máy tính thứ ba vào cơ sở dữ liệu với
một vài thuộc tính đã được chỉ định
Lưu ý rằng trong PowerShell, bạn không phải sử dụng các ký tự ghép dòng đặc biệt nào nếu các ngắt lệnh trong một mảng được chỉ định bằng dấu ngoặc nhọn.
Đóng và mở lại Workbench, mở trang thuộc tính của máy tính mới và chọn tab Details, khi đó bạn sẽ thấy các thuộc tính mong đợi đã được cấu hình:

Hình 26: Các thuộc tính được liệt kê chi tiết cho máy tính mới
 
Tạo các mục máy tính trong cơ sở dữ liệu
Cho đến đây chúng ta đã biết cách sử dụng lệnh PowerShell để tạo một mục máy tính mới trong cơ sở dữ liệu MDT và cấu hình các thuộc tính của mục đó. Giờ đây chúng ta hãy đi xem xét cách có thể sử dụng một kịch bản để tự động hóa quá trình nào, khi đó chúng ta có thể tạo rất nhiều máy tính trong cơ sở dữ liệu qua một bước thực hiện.
Đầu tiên, thay vì đánh các lệnh riêng lẻ để tạo máy tính trong cơ sở dữ liệu, chúng ta hãy sử dụng lệnh lặp For để tạo một vòng lặp cho các thành phần của mảng $machines như dưới đây:
For ($i=1; $i -le $machines.count; $i++)
{
   New-MDTComputer -macAddress $machines[$i-1].mac -settings @{ OSInstall='YES'; OSDComputerName=$machines[$i-1].name;}
}

Hình 27: Sử dụng lệnh lặp For để bổ sung các máy tính vào cơ sở dữ liệu
Lưu ý rằng vòng lặp này không thực thi cho tới khi bạn kết thúc việc đánh dấu đóng ngoặc – không cần sử dụng bất cứ ký tự ghép dòng nào giống như trong VBScript.
Bạn có thể xem kết quả lệnh này bằng cách mở Workbench:

Hình 28: Ba mục máy tính vừa được tạo bằng các lệnh riêng lẻ
Hãy biến tất cả thành một kịch bản thực hiện những thứ dưới đây:
  • Cài đặt modul PowerShell
  • Kết nối đến cơ sở dữ liệu MDT
  • Import file CSV của máy tính mục tiêu
  • Tạo các mục máy tính trong cơ sở dữ liệu gồm có tên máy tính và tên tổ chức
Để thực hiện, đánh kịch bản PowerShell vào Notepad:
Import-Module –name C:\Scripts\MDTDB.psm1
Connect-MDTDatabase –sqlServer SEA-MDT-01 –instance SQLEXPRESS –database MDT
$machines = Import-Csv C;\Data\machines.txt
For ($i=1; $i -le $machines.count; $i++)
{
   New-MDTComputer -macAddress $machines[$i-1].mac -settings @{
      OSInstall='YES';
      OSDComputerName=$machines[$i-1].name;
      OrgName='Contoso Ltd.'
   }
}
Sau đó lưu nó với tên file Create.ps1 vì các kịch bản PowerShell phải có phần mở rộng là .ps1. Mở Workbench và xóa các mục máy tính đang tồn tại trong cơ sở dữ liệu, sau đó đóng Workbench.
Duyệt đến file Create.ps1, kích phải vào nó và chọn Run With PowerShell. Cửa sổ lệnh của PowerShell sẽ được hiển thị trong chốc lát và sau đó sẽ đóng lại. Một cách làm khác bạn có thể kích đúp vào file .ps1, có thể mở cửa sổ lệnh PowerShell và thay đổi thư mục chứa file Create.ps1, sau đó đánh vào đó Create.ps1 để chạy kịch bản của mình.
Mở Workbench, lúc này bạn sẽ thấy các mục máy tính mới. Đến lúc này chúng ta đã đạt được mục tiêu của mình là có thể populate cơ sở dữ liệu MDT với nhiều mục máy tính bằng một bước.
Đây là một món quà dành cho bạn. Các quản trị viên thường muốn đặt tên các máy tính bằng hiệp định tên chuẩn, giả sử chúng ta cũng muốn đặt tên cho ba máy tính này là SEA-CLI-001, SEA-CLI-002 và SEA-CLI-003 thay vì DESK-A, DESK-B và DESK-E. Khi đó chúng ta có thể thực hiện bằng cách thay đổi kịch bản ở trên như dưới đây:
Import-Module –name C:\Scripts\MDTDB.psm1
Connect-MDTDatabase –sqlServer SEA-MDT-01 –instance SQLEXPRESS –database MDT
$machines = Import-Csv C;\Data\machines.txt
For ($i=1; $i -le $machines.count; $i++)
{
   $n = "{0:D3}" -f $i
   New-MDTComputer -macAddress $machines[$i-1].mac -settings @{
      OSInstall='YES';
      OSDComputerName='SEA-CLI-' + $n
      OrgName='Contoso Ltd.'
   }
}
Lưu kịch bản này với tên Create2.ps1, sau đó chạy nó. Khi ví vụ tab Details trong trang thuộc tính của các mục máy tính được tạo bởi kịch bản, bạn sẽ thấy các máy tính được đặt tên bằng hiệp định tên đã được chỉ định:

Hình 29: Tạo các mục máy tính bằng một hiệp định tên
 
  (Theo Quan Tri Mang)
 
 
 
 

0 comments:

Post a Comment