PowerShell รอ | Wait Method ทำงานอย่างไรใน PowerShell (ตัวอย่าง)
คำจำกัดความของ PowerShell Wait
PowerShell รอ cmdlet ใช้เพื่อระงับการดำเนินการในช่วงระยะเวลาหนึ่งเพื่อรอคำสั่ง งาน หรือกระบวนการให้เสร็จสิ้น เพื่อแจ้งให้ผู้ใช้ทราบว่างานพื้นหลังกำลังทำงานอยู่ และขอให้รอเป็นระยะเวลาหนึ่ง เพื่อรีสตาร์ทระบบระยะไกล และรอจนกระทั่งระบบปรากฏขึ้น เริ่มและหยุด VM ฯลฯ ซึ่งขึ้นอยู่กับคำสั่งที่ระบุ หากคำสั่งมีไว้สำหรับงานพื้นหลังที่ประมวลผลก่อน คำสั่งจะรอจนเสร็จสิ้น และหากคำสั่งหยุดการดำเนินการตามระยะเวลาที่กำหนด ผู้ใช้ต้องรอจนกว่าจะถึงเวลาที่ระบุ
ไวยากรณ์:
ก. รอกระบวนการ
คำสั่งข้างต้นใช้เพื่อรอให้กระบวนการหยุดก่อนที่จะยอมรับอินพุตใหม่หรือย้ายไปยังคำสั่งถัดไป
ข.รอ-งาน
คำสั่งนี้ใช้เพื่อทำให้งานเบื้องหลังเสร็จสมบูรณ์ และการดำเนินการจะไม่ย้ายไปยังขั้นตอนถัดไปจนกว่าการดำเนินการจะเสร็จสิ้น
ค. เริ่ม -สลีป
คำสั่งนี้จะหยุดการทำงานของสคริปต์ตามเวลาที่ระบุในหน่วยวินาทีหรือมิลลิวินาที และไม่สามารถทำให้คำสั่งหรืองานใดๆ ให้รอในเบื้องหลังได้ แต่จะหยุดการทำงานของสคริปต์ชั่วคราว
ง. รอ-เหตุการณ์
คำสั่งนี้จะระงับการดำเนินการของสคริปต์หรือฟังก์ชันจนกว่าเหตุการณ์เฉพาะจะเกิดขึ้น และดำเนินการเรียกใช้สคริปต์ต่อไปหลังจากนั้น
จ. รอพารามิเตอร์
คำสั่งหลายคำสั่งใช้พารามิเตอร์ -Wait โดยตรงในคำสั่งเพื่อรอให้คำสั่งนั้นเสร็จสิ้น แทนที่จะใช้คำสั่ง Wait-Job ที่ทำงานแยกกัน
ฉ. หมดเวลา
คล้ายกับคำสั่ง Start-Sleep คำสั่งนี้เก็บการทำงานของสคริปต์ตามระยะเวลาที่กำหนด
วิธีการ รอ ทำงานอย่างไรใน PowerShell
เมื่อเราใช้คำสั่ง Wait คำสั่งจะหยุดการดำเนินการจนกว่างานเบื้องหลังหรือกระบวนการจะเสร็จสิ้น และดำเนินการดำเนินการต่อจากจุดสุดท้ายที่หยุดไว้ คำสั่งบางคำสั่ง เช่น Start-Sleep และ หมดเวลา เพียงแค่หยุดสคริปต์ชั่วคราว แต่จะไม่รันงานหรือกระบวนการใดๆ ในเบื้องหลัง
ตัวอย่าง
ให้เราคุยตัวอย่างของ PowerShell Wait
1. ตัวอย่างกระบวนการรอ
เมื่อเราใช้คำสั่ง รอ-กระบวนการ คำสั่งจะรอให้กระบวนการหรือแอปพลิเคชันเฉพาะหยุดทำงาน คำสั่งนี้ยอมรับ ID กระบวนการ ชื่อ และการหมดเวลาในไม่กี่วินาที
ตัวอย่างเช่น เรามีแอปพลิเคชัน SnippingTools ทำงานอยู่ และเรากำลังจะยุติการใช้งาน แต่เราจะรอจนกว่ากระบวนการจะสิ้นสุดลง
Get-Process SnippingToolหากต้องการใช้คำสั่ง wait เราสามารถใช้ ProcessID หรือชื่อของกระบวนการก็ได้
Wait-Process -ID 32328
Write-Output "This command will be executed after process termination"คุณยังสามารถระบุพารามิเตอร์การหมดเวลาเป็นวินาทีได้ หากกระบวนการไม่ยุติตามเวลาที่กำหนด ก็จะทำให้เกิดข้อผิดพลาด
คุณยังสามารถระบุชื่อกระบวนการหลายชื่อสำหรับคำสั่ง รอ-กระบวนการ ได้
2. ตัวอย่างการเริ่ม-นอน
คำสั่งนี้จะระงับการดำเนินการเป็นระยะเวลาหนึ่ง และคำสั่งถัดไปจะรอจนกว่าจะถึงเวลานั้น คุณสามารถระบุเวลาเป็นวินาทีหรือมิลลิวินาทีได้
Write-Output "Writing First Line"Start-Sleep -Seconds 5การเขียนเอาต์พุต “คำสั่งนี้ จะถูกดำเนินการหลังจาก 5 วินาที”
คุณยังสามารถระบุพารามิเตอร์ -มิลลิวินาที ได้ด้วย
Start-Sleep -Milliseconds 5000ค. ตัวอย่างการหมดเวลา
นี่คือคำสั่ง cmd แต่สามารถเข้าถึงได้ใน PowerShell เช่นกัน เมื่อคุณระบุการหมดเวลาเป็นวินาที คำสั่งถัดไปจะรอจนกว่าจะหมดเวลา
Write-Output "Writing First Line"
Timeout /T 5
Write-Output "This command will be executed after 5 seconds"เอาต์พุต:
ผู้ใช้สามารถขัดจังหวะการหมดเวลาที่ระบุได้ หากคุณต้องการให้การหมดเวลาไม่หยุดชะงัก จากนั้นใช้สวิตช์ /NoBreak
ตัวเลือกเดียวที่มีสวิตช์ /NoBreak คือการกด Ctrl+C เพื่อยุติการดำเนินการต่อไป
ง. ตัวอย่างงานรอ
เมื่อเราใช้คำสั่ง Wait-Job มันจะรอให้ scriptblock เสร็จสิ้นและดำเนินการคำสั่งบรรทัดถัดไป
$sb = Start-Job -ScriptBlock{
$i = 0
while($i -lt 10){
$i++
Sleep 3
}
}
Wait-Job $sb.Name
Write-Output "This line will be executed after job completes"เอาต์พุต:
นอกจากนี้เรายังสามารถระบุการหมดเวลาสำหรับงานที่จะเสร็จสมบูรณ์โดยใช้พารามิเตอร์ -Timeout ในหน่วยวินาทีใน Wait-Job cmdlet หากงานไม่เสร็จสิ้นในช่วงเวลานั้น สคริปต์จะส่งข้อผิดพลาด
จ. ตัวอย่างเหตุการณ์รอ
คำสั่งนี้จะรอให้เหตุการณ์เฉพาะเกิดขึ้น และ PowerShell ระงับการดำเนินการจนกว่าจะถึงเวลานั้น และดำเนินการต่อเมื่อเหตุการณ์ทริกเกอร์
Wait-Eventคำสั่งดังกล่าวจะรอให้เหตุการณ์ถัดไปทริกเกอร์และระงับการดำเนินการ PowerShell ในขณะนั้น
เราจะสร้างเหตุการณ์ทดสอบใหม่ที่นี่เพื่อทริกเกอร์คำสั่ง Wait-Event
Wait-Event;
New-Event -SourceIdentifier Timer -Sender windows.timer -MessageData "Test" | Out-Nullเอาต์พุต:
หากเรามีแหล่งที่มาเฉพาะสำหรับเหตุการณ์นั้น เราสามารถระบุชื่อ SourceIdentifier ได้
Wait-Event -SourceIdentifier "ProcessStarted" -Timeout 200ก. -รอ พารามิเตอร์ในคำสั่ง
คำสั่งบางอย่างเช่น Restart-Computer, Start-AZVM, Stop-AzVM, etc รองรับพารามิเตอร์ -Wait และคำสั่งถัดไปจะดำเนินการหลังจากดำเนินการ -Wait คำสั่งพารามิเตอร์ที่แข็งแกร่ง> ตัวอย่างเช่น,
Restart-Computer -ComputerName test1-win2k12 -Wait -Force
Write-Output "Get Process command will be executed after server restart"
Get-Process -ComputerName test1-win2k12เอาต์พุต:
มีคำสั่งอื่นๆ ซึ่งตามค่าเริ่มต้นจะรวมพารามิเตอร์รอ เช่น คำสั่ง Start-AzVM และ Stop-AzVM
Start-AzVM -Name TestVm -ResourceGroupName TestRG -NoWait
Write-Output "This command will be executed immediately"หากต้องการหยุด VM
Stop-AzVM -Name TestVm -ResourceGroupName TestRG
Write-Output "This command will be executed after VM Stops"ในคำสั่งแรก Start-AZVM พารามิเตอร์ -NoWait จะถูกระบุ ดังนั้นคำสั่งนั้นจะไม่รอเพื่อเริ่ม VM แต่ในคำสั่งที่สอง Stop-AZVM พารามิเตอร์เริ่มต้นคือ รอ เพื่อให้คำสั่งถัดไป คำสั่งจะรอจนกว่า VM หยุดสำเร็จ
บทสรุป
มี Wait cmdlets จำนวนมากใน PowerShell และรองรับพารามิเตอร์ Wait ในคำสั่ง PowerShell เพื่อให้คำสั่งก่อนหน้านี้เสร็จสิ้นก่อน เพราะบางครั้งอินพุตคำสั่งถัดไปขึ้นอยู่กับเอาต์พุตของคำสั่งก่อนหน้า และเราจำเป็นต้องดำเนินการก่อน



















