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-Location
PowerCLI 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 {
$_
}