PowerShell: กำลังรอให้งานเสร็จสิ้นด้วย Wait-Job
cmdlet Wait-Job รอจนกระทั่งงาน PowerShell หนึ่งงานหรือทั้งหมดที่ทำงานในเซสชันอยู่ในสถานะสิ้นสุด ในบล็อกโพสต์นี้ ฉันจะแสดงตัวอย่างที่คุณสามารถสร้างต่อได้ มาเริ่มกันเลย.
Start-Job สร้างงานพื้นหลัง PowerShell หนึ่งงานขึ้นไป งานเหล่านี้ทำงานซ่อนอยู่ในพื้นหลังและช่วยให้คุณสามารถทำงานต่อใน PowerShell ได้ ตัวอย่างนี้เริ่มต้นงานพื้นหลังการสแกนพอร์ต
Start-Job -Name PortScan -ScriptBlock {Test-NetConnection 192.168.0.150 -Port 88}
Get-Job -Name PortScan
หากต้องการแสดงผลลัพธ์ของงานนี้ ให้รัน รับ-งาน โปรดทราบว่าคุณสามารถแสดงผลได้เพียงครั้งเดียว! ยกเว้นกรณีที่คุณใช้พารามิเตอร์ -Keep
Receive-Job -Name PortScan -Keep | Select-Object RemoteAddress,PingSucceeded,TcpTestSucceeded
รอจนกระทั่งงาน PowerShell หนึ่งงานหรือทั้งหมดที่ทำงานในเซสชันอยู่ในสถานะสิ้นสุด
Microsoft อธิบายดังนี้:
cmdlet Wait-Job จะรอให้งานอยู่ในสถานะสิ้นสุดก่อนที่จะดำเนินการต่อไป สถานะที่สิ้นสุดคือ:
- สมบูรณ์
- ล้มเหลว
- หยุดแล้ว
- ถูกระงับ
- ตัดการเชื่อมต่อแล้ว
คุณสามารถรอจนกว่างานที่ระบุ หรืองานทั้งหมดอยู่ในสถานะสิ้นสุด คุณยังตั้งเวลารอสูงสุดสำหรับงานได้โดยใช้พารามิเตอร์ หมดเวลา หรือใช้พารามิเตอร์ บังคับ เพื่อรองานใน ถูกระงับ หรือสถานะ ตัดการเชื่อมต่อ
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/wait-job?view=powershell-7.3
นี่คือตัวอย่างวิธีการสร้างงาน 2 รายการ รองานที่สองซึ่งใช้เวลานานมาก งานทั้งสองไม่เกี่ยวข้องกัน แต่ดีสำหรับการทดสอบ ในที่สุดงานที่สองจะถูกเรียก แต่เมื่องานแรกเสร็จสิ้นเท่านั้น
Get-Job | Remove-Job -Force
Start-Job -Name PortScan -ScriptBlock {Test-NetConnection 192.168.0.150 -Port 88}
Start-Job -Name Files -ScriptBlock {Get-ChildItem C:\Windows -File -Recurse}
Wait-Job -Name Files
Receive-Job -Name PortScan -Keep | Select-Object RemoteAddress,PingSucceeded,TcpTestSucceeded
หวังว่านี่จะเป็นประโยชน์ และตอนนี้คุณสามารถใช้งาน Wait-Job cmdlet ในสคริปต์ PowerShell ของคุณได้แล้ว

