Basic PowerShell/PowerCLI
ในส่วนนี้ เราจะทดลองศึกษาการใช้งาน PowerShell เบื้องต้นเพื่อควบคุมระบบคอมพิวเตอร์
เตรียมการใช้งาน PowerCLI
- เรียกใช้โปรแกรม PowerCLI (ให้เลือก Run as Administrator ในการเรียกใช้งานครั้งแรก)
- เนื่องจาก PowerCLI จำเป็นต้องเพิ่มคำสั่งหรือ CmdLet ให้กับ PowerShell ดังนั้นนักศึกษาต้องตั้งค่า
Execution Policy เป็น RemoteSigned เพื่อให้ PowerCLI สามารถทำงานได้
Set-ExecutionPolicy RemoteSigned
PowerShell เบื้องต้น
ใน PowerShell จะมีหน่วยที่ใช้จัดการส่วนต่าง ๆ ของระบบเรียกว่า Provider
- ใช้คำสั่ง
Get-PSProviderเพื่อเรียกดู Provider ที่ถูกติดตั้งไว้ Provider แต่ละตัวสามารถสร้าง drive ได้ เช่น FileSystem provider จะมี drive C:, D:, … ส่วน registry provider จะมี drive HKLM กับ HKCU เพื่อใช้เข้าถึง Registry HKEY_LOCAL_MACHINE และ HKEY_CURRENT_USERPowerCLI C:\> Get-PSProvider - ให้เรียกดู Drive ที่มีอยู่ทั้งหมดได้ด้วยคำสั่ง Get-PSDrive แล้วเปลี่ยนเข้าไปอ่าน Registry โดยใช้คำสั่ง
Set-LocationPowerCLI C:\> Get-PSDrive PowerCLI C:\> Set-Location HKLM: PowerCLI HKLM:\> _ - นักศึกษาสามารถใช้งาน Registry Drive ได้คล้ายกับ Drive ทั่วไป โดยใช้
dir(Get-ChildItem) เพื่อเรียกดูข้อมูล และใช้cd(Set-Location) เพื่อเปลี่ยนเข้าไปใน directory (หรือ registry)PowerCLI HKLM:\> cd SOFTWARE - ให้นักศึกษาหา Version ของ Windows ที่ใช้อยู่ ซึ่งโดยปกติแล้วข้อมูลนี้จะอยู่ใน registry
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion- ให้เปลี่ยน directory ไปเป็น HKLM:\SOFTWARE\Microsoft\Windows NT
PowerCLI HKLM:\> cd '\SOFTWARE\Microsoft\Windows NT' - ใช้คำสั่ง
Get-ChildItem | Get-Memberจะพบว่า Object นี้มี Type เป็นMicrosoft.Win32.RegistryKeyซึ่งมี Method และ Property ต่างๆ เราสามารถเรียกใช้ method และ property ของผลลัพธ์ได้ - เรียกใช้
(Get-ChildItem).GetValue(“CurrentVersion”)ผลลัพธ์ที่ได้มีค่าเท่าไหร่? และเป็น Type อะไร?
- ให้เปลี่ยน directory ไปเป็น HKLM:\SOFTWARE\Microsoft\Windows NT
- เราสามารถใช้ตัวแปรเพื่อเก็บค่าและนำไปใช้ภายหลังได้ เช่น
PowerCLI HKLM:\Software\Microsoft\Windows NT> $d = Get-ChildItem PowerCLI HKLM:\Software\Microsoft\Windows NT> $d.getValue("CurrentVersion") - บางทีข้อมูลที่พบอาจจะยาวเกินไป สามารถใช้
Out-Host –Pagingเพื่อแบ่งหน้าแสดงได้PowerCLI HKLM:\Software\Microsoft\Windows NT> Get-ChildItem CurrentVersion | Out-Host –Paging - นอกจากนี้เรายังสามารถเรียงลำดับข้อมูลได้ กลับไปที่ Home directory ( เรียก
C:แล้วใช้cd ~) แล้วใช้Get-ChildItem | Sort-Object Length –Descending - หลาย ๆ คำสั่งที่เราเคยใช้ใน cmd ยังสามารถใช้ได้อยู่เนื่องจากคำสั่งเหล่านี้ถูกเปลี่ยนให้เป็น PowerShell Cmdlet ส
มารถตรวจคำสั่งได้โดยใช้ alias เช่น
alias cdจะแจ้งว่าcdเป็นคำสั่งเดียวกับSet-Location - ถ้ามีปัญหาสงสัยในการใช้งาน PowerShell มี built-in help โดยใช้
Get-Helpเช่นGet-Help Set-Location
PowerShell Object
เราสามารถสร้าง Custom Object (PSObject) ใน PowerShell ได้จากการใช้ Hash table
$dict = @{title = 'title'; author = 'author'}
New-Object -TypeName PSObject -Property $dict
Array
$myArray = @(1,2,3,4)
$myArray += 5
$myArray[2]
For Loops / For Each
$array = @(1,2,3,4)
for ($i=0; $i -lt $array.length; $i++) {
$array[$i]
}
foreach ($element in $array) {
$element
}
$array | foreach {
$_
}