เอาหล่ะครับ หลังจากที่มีพื้นฐานกับการทำงานของ Windows Power Shell กันไปแล้วในภาคที่ 1 นะครับ ทีนี้ในภารนี้เรามาดูการเขียน script แบบง่ายๆ ซึ่งผมจะขอยกตัวอย่าง script ในการสร้าง AD user จากแฟ้มข้อมูล CSV กันครับ
การทำงานของ Windows Power Shell กับแฟ้มข้อมูล CSV
เป็นที่ทราบกันดีว่าแฟ้มข้อมูลที่มีส่วนขยายเป็น .CSV นั้นเป็นแฟ้มข้อมูลที่มีลักษณะเป็นตาราง คล้ายกับตารางของ Microsoft Excel และสามารถนำเอาแผ่นงานของ Microsoft Excel มาบันทึกข้อมูลเป็น แฟ้มข้อมูล CSV ได้ด้วย ดังนั้นแฟ้มข้อมูล CSV จึงนับว่าเป็นวิธีการที่สะดวกในการที่จะใช้เป็นฐานข้อมูลสำหรับการบรรจุข้อมูลต่างๆ สำหรับการทำงาน เช่น การสร้าง User เป็นต้น
ดังนั้น Windows Power Shell จึงมี cmdlet มาตรฐานมาให้เพื่อให้ผู้ใช้งานสามารถทำการอ่านข้อมูลจากแฟ้มข้อมูล CSV ได้อย่างสะดวก โดยการใช้ cmdlet “Import-CSV” ซึ่งมีการใช้งานดังต่อไปนี้
ตัวอย่างที่ 1
Import-Csv -Path \\192.168.10.10\c$\Users\Administrator\Desktop\create-ad-user.csv |
จากตัวอย่างที่ 1 เป็นการสั่งให้เครื่อง Server ทำการอ่านข้อมูลในแฟ้มข้อมูล CSV จาก UNC Path ที่กำหนด (\\192.168.10.10\c$\Users\Administrator\Desktop\create-ad-user.csv) (เนื่องจากในการทำการของ Demo นี้เป็นการใช้คำสั่งผ่าน network ดังนั้นจึงต้องมีการระบบ path ของแฟ้มข้อมูล CSV ในรูปของ UNC Path ด้วยเพื่อให้สามารถอ้างอิงไปยังเครื่อง server ที่เก็บแฟ้มข้อมูล CSV เอาไว้จริงๆ ได้ โดยข้อมูลที่เก็บไว้ในแฟ้มข้อมูล CSV ประกอบด้วยข้อมูลของพนักงานใหม่ที่เราต้องการเพิ่มเข้าสู่ Active Directory Domain Service (AD DS) จำนวน 3 คนดังนี้
ข้อมูลภายในแฟ้มข้อมูล CSV (วางไว้ที่ \\192.168.10.10\c$\Users\Administrator\Desktop\)
Name,FirstName,LastName,samAccountName,UPN,password |
ซึ่งข้อมูลในแฟ้มข้อมูล CSV ประกอบด้วย Attribute ต่างๆ ของผู้ใช้คนใหม่จำนวน 6 Field ได้แก่
- Name: Field นี้จะเป็นชื่อของ Object ที่จะสร้างขึ้นใน AD DS ซึ่งชื่อนี้จะต้องไม่ซ้ำกับ Object ที่มีอยู่เดิมใน AD DS แล้ว
- FirstName: Field นี้จะเป็นชื่อตัว (FirstName) ของผู้ใช้คนใหม่ใน AD DS
- LastName: Field นี้จะเป็นนามสกุลของผู้ใช้คนใหม่ใน AD DS
- samAccountName: Field นี้จะเป็นชื่อ logon name ในระบบ Pre-Windows 2000 ซึ่งจะต้องไม่ซ้ำในระดับ AD DS Domain และต้องมีความยาวไม่เกิน 20 ตัวอักษร
- UPN: Field นี้จะเป็น User principle name เพื่อใช้ในการ logon เข้าสู่ระบบ โดย UPN จะต้องไม่ซ้ำในระดับ Forest นอกจากนี้ UPN จะเป็นชื่อที่อยู่ในรูปแบบคล้าย E-mail Address ซึ่ง default แล้วหลังเครื่องหมาย @ จะเป็นชื่อ dns domain ของ AD DS เช่น @mvpskill.local เป็นต้น
- password: Field นี้จะเป็นรหัสผ่านของผู้ใช้งาน ที่จะนำไปใช้ในการ logon เข้าสู่ระบบ AD DS
ซึ่งเมื่อทำการ Execute คำสั่งในตัวอย่างที่ 1 จะได้ผลการทำงานดัง output1
output1: ผลจากการใช้คำสั่ง Import-Csv -Path \\192.168.10.10\c$\Users\Administrator\Desktop\create-ad-user.csv
จาก output1 จะเห็นได้ว่าผลลัพธ์ที่เกิดขึ้นจะมีการวนซ้ำของแต่ละแถวที่อยู่ในแฟ้มข้อมูล CSV ตามลำดับ โดยมี Attribute ต่างๆ (ซึ่งชื่อของ Attribute ก็คือบรรทัดแรกของข้อมูลในแฟ้มข้อมูล CSV นั่นเอง) ของแต่ละบรรทัดแสดงเอาไว้
การใช้ Windows Power Shell ในการสร้าง AD User สำหรับ Active Directory Domain Service
หลังจากที่ได้กล่าวถึงแฟ้มข้อมูลของ CSV การวนซ้ำต่างๆ ไปแล้วนั้น ในหัวข้อนี้จะได้กล่าวถึงสิ่งสำคัญอีกสิ่งหนึ่งที่เราต้องใช้ในการเขียน script คือการใช้งาน cmdlet ที่ใช้ในการสร้าง ADUser นั่นก็คือ “New-ADUser”
“New-ADUser” เป็น cmdlet สำหรับใช้ในการบริหารจัดการระบบ Active Directory ซึ่งปกติแล้วจะต้องทำการ Import Module สำหรับ Active Directory เข้าไปใน Windows Power Shell เสียก่อน โดยใช้คำสั่ง “Import-Module ActiveDirectory” แต่เนื่องจาก Windows Power Shell 3.0 มีคุณสมบัติในการที่จะสามารถ Import Module ที่เกี่ยวข้องได้โดยอัตโนมัติ ดังนั้นจึงสามารถข้ามขั้นตอนนี้ไปได้
รูปแบบของ New-ADUser นั้นประกอบด้วยการใช้งานดังตัวอย่างที่ 2
ตัวอย่างที่ 2 การใช้งาน cmdlet “New-ADUser” New-ADUser –Name “Thanyapon Sananakin” -GivenName Thanyapon -Surname Sananakin -SamAccountName thanyapon.s -UserPrincipalName [email protected] -AccountPassword (ConvertTo-SecureString “p@ssw0rd” -AsPlainText -force) -PasswordNeverExpires $true -ChangePasswordAtLogon $false -Enabled $true |
ซึ่ง Parameter ต่างๆในการใช้งาน New-ADUser นั้นมีดังต่อไปนี้
- New-ADUser เป็น cmdlet หลักเพื่อทำการสร้าง User ในระบบ Active Directory
- -Name “Thanyapon Sananakin” เป็นการกำหนดให้ user object ที่สร้างใหม่ มีชื่อแสดงผล (Display name) เป็น Thanyapon Sananakin
- -GivenName Thanyapon เป็นการกำหนดให้ user object ที่สร้างใหม่มีชื่อแรก หรือชื่อตัว เป็น Thanyapon
- -SurName Sananakin เป็นการกำหนดให้ user object ที่สร้างใหม่มีนามสกุล เป็น Sananakin
- -SamAccountName thanyapon.s เป็นการกำหนดให้ user object ที่สร้างใหม่ต้องทำการ logon เข้าสู่ระบบด้วยชื่อ thanyapon.s
- -UserPrincipleName [email protected] เป็นการกำหนดให้ user object ที่สร้างใหม่มี user principle name เป็น [email protected]
- -AccountPassword (ConvertTo-SecureString “p@ssw0rd” -AsPlainText -force) เป็นการกำหนดให้ user object ที่สร้างใหม่มีรหัสผ่าน เป็น p@ssw0rd แต่เนื่องจากในการเก็บรหัสผ่านในระบบ Active Directory นั้นจะมีการเข้ารหัสรหัสผ่านเอาไว้ ดังนั้นการกำหนดรหัสผ่านให้กับ user object จึงต้องมีมีการนำรหัสผ่านที่ต้องการ (คือ p@ssw0rd) ไปผ่านฟังก์ชัน ConvertTo-SecureString “p@ssw0rd” -AsPlainText -force เสียก่อน
- -PasswordNeverExpires $true เป็นการกำหนดให้ user object ที่สร้างใหม่ มีรหัสผ่านที่ไม่หมดอายุ (Password Never Expires)
- -ChangePasswordAtLogon $false เป็นการกำหนดให้ user object ที่สร้างใหม่ ไม่ต้องมีการเปลี่ยนรหัสผ่านในครั้งแรก
- -Enabled $true เป็นการกำหนดให้ user object ที่สร้างใหม่นั้น ได้รับการ Enable สามารถใช้งานได้ทันที
ซึ่งเมื่อสั่ง Execute คำสั่งในตัวอย่างที่ 2 แล้วจะพบว่าเกิด user object ชื่อว่า “Thanyapon Sanankin” ขึ้นใน Users container ของ Active Directory (เนื่องจากไม่ได้กำหนด OU ให้กับ user object ดังนั้นจึงเกิด user object ขึ้นที่ user container ซึ่งเป็น default ของระบบ Active Directory และเม่อตรวจสอบคุณสมบัติของ user object ต่างๆ พบว่าเป็นไปตามที่กำหนดใน parameter ต่างๆ ของคำสั่ง ดังรูป
output2.1 – user object ถูกสร้างขึ้นใน Users container และถูก Enable ไว้
output2.2 คุณสมบัติต่างๆ ของ user object เช่น First name, Last name, user logon name, User Principal Name, และ Account Options
การประยุกต์ใช้ New-ADUser และ Import-CSV เพื่อการสร้างข้อมูลผู้ใช้งานในระบบ Active Directory เป็นจำนวนมาก
หลังจากที่เข้าใจหลักการทำงานของทั้ง 2 ส่วนคือ Import-CSV และ New-ADUser แล้ว ต่อไปนี้ก็จะเป็นการทำการนำทั้ง 2 ส่วนมาประยุกต์เข้าด้วยกัน ดังตัวอย่างที่ 3
ตัวอย่างที่ 3 การประยุกต์ใช้ New-ADUser และ Import-CSV เพื่อการสร้างข้อมูลผู้ใช้งานในระบบ Active Directory เป็นจำนวนมาก Import-Csv -Path “\\192.168.10.10\c$\Users\Administrator\Desktop\create-ad-user.csv” | foreach { $DisplayName = $_.FirstName + ” ” + $_.LastName Write-Host “Creating user…..” $DisplayName $pw = ConvertTo-SecureString -AsPlainText $_.password -force New-ADUser $DisplayName -GivenName $_.FirstName -Surname $_.LastName -SamAccountName $_.samAccountName -UserPrincipalName $_.UPN -AccountPassword $pw -PasswordNeverExpires $true -ChangePasswordAtLogon $false -Enabled $true -Path “OU=PowerShell Users,DC=mvpskill,DC=local” } |
จากตัวอย่างที่ 3 มีการใช้งานคำสั่ง Import-CSV เพื่อให้อ่านข้อมูลจากแฟ้มข้อมูล CSV ที่กำหนดไว้ใน UNC จากนั้นทำการส่งข้อมูลไปยังคำสั่ง ForEach ในรูปแบบ Pipeline ทีละบรรทัดเพื่อให้ทำการวนซ้ำ ซึ่งดังที่กล่าวแล้วในภาคที่ 1 นั้นว่าการอ้างอิง object ที่มีการส่งผ่านโดยวิธีการ pipeline จะอ้างอิงในรูปแบบของ object $_ หรือ THIS นั่นเอง
และในคำสั่ง ForEach นั้นมีการระบุคำสั่งในการวนซ้ำดังต่อไปนี้ (ต้องมีการกำหนดขอบเขตของคำสั่งโดยใช้เครื่องหมาย { และ } )
- $DisplayName = $_.FirstName + ” ” + $_.LastName เป็นการสั่งให้มีการนำค่าของตัวแปร $_.FirstName ตามด้วยเว้นวรรค และ $_.LastName นำมาต่อกัน และนำไปเก็บไว้ในตัวแปร $DisplayName เพื่อความสะดวกในการอ้างอิง
- Write-Host “Creating user…..” $DisplayName เป็นการสั่งให้แสดงข้อความว่า “Creating user…. “ ตามด้วยค่าของตัวแปร $DisplayName ออกมา
- $pw = ConvertTo-SecureString -AsPlainText $_.password –force เป็นการสั่งให้ทำการเข้ารหัสรหัสผ่านของผู้ใช้งาน ไปเก็บไว้ในตัวแปร $pw เพื่อสะดวกในการอ้างอิง
- New-ADUser $DisplayName -GivenName $_.FirstName -Surname $_.LastName -SamAccountName $_.samAccountName -UserPrincipalName $_.UPN -AccountPassword $pw -PasswordNeverExpires $true -ChangePasswordAtLogon $false -Enabled $true -Path “OU=PowerShell Users,DC=mvpskill,DC=local” เป็นคำสั่งหลักในการสร้าง user object ในระบบ AD DS โดยอาศัยข้อมูลจากตัวแปรต่างที่กำหนดไว้ในแฟ้มข้อมูล CSV ซึ่งมีความหมายเช่นเดียวกับที่อธิบายไปแล้วข้างต้น นอกจากนี้ยังมีการกำหนดให้ทำการสร้าง user object ใน OU ที่กำหนด คือ OU ชื่อว่า “Power Shell Users” ด้วย โดยใช้ Paramter –Path
เมื่อทำการ Execute คำสั่งในตัวอย่างที่ 3 จะได้ผลลัพธ์ดังรูป
ผลลัพธ์ 3-1 ขณะ Execute คำสั่งในตัวอย่างที่ 3 จะเห็นว่ามีการแสดงความคืบหน้าในการทำงาน โดยการแสดงชื่อของ user object ที่กำลังทำงานอยู่ให้ทราบ
ผลลัพธ์ 3-2 เมื่อคำสั่งทำงานเสร็จจะพบว่ามี user object ปรากฏใน OU ที่กำหนดไว้
หลังจากนี้หากลองนำ user object ทั้ง 3 นี้ไป logon จะพบว่าสามารถ login ได้ตามปกติ
ทั้งหมดนี้เป็นหลักการในการนำ Windows Power Shell มาประยุกต์ใช้ในการดำเนินการในการบริหารจัดการระบบ Active Directory นะครับ ซึ่งจริงๆ แล้วยังมีลูกเล่นให้ใช้งานได้อีกมากมาย เช่นการจัดการกับ Group การจัดการกับ OU และอื่นๆ ซึ่งจะได้เขียนมาเล่าสู่กันฟังในโอกาสต่อๆ ไปครับ
สำหรับภาคที่ 2 นี้คงต้องขอจบไว้เพียงเท่านี้ก่อนนะครับ ส่วนในภาคที่ 3 จะพูดถึงการจัด user เข้า group ตามเงื่อนไขที่กำหนดครับ ติดตามกันได้ที่นี่ที่เดิมครับ www.mvpskill.com ครับ