ค้นหาเว็บไซต์

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 เพื่อให้คำสั่งก่อนหน้านี้เสร็จสิ้นก่อน เพราะบางครั้งอินพุตคำสั่งถัดไปขึ้นอยู่กับเอาต์พุตของคำสั่งก่อนหน้า และเราจำเป็นต้องดำเนินการก่อน

บทความที่เกี่ยวข้อง