PowerShell: Wait-Job ile işlerin tamamlanması bekleniyor
Cmdlet Wait-Job, oturumda çalışan PowerShell işlerinden biri veya tümü sonlandırma durumuna gelene kadar bekler. Bu blog yazısında size üzerine inşa edebileceğiniz bir örnek göstereceğim. Başlayalım.
Start-Job bir veya daha fazla PowerShell arka plan işi oluşturur. Bu işler arka planda gizli olarak çalışır ve PowerShell'de çalışmanıza devam etmenizi sağlar. Bu örnek, bir bağlantı noktası tarama arka plan işini başlatır.
Start-Job -Name PortScan -ScriptBlock {Test-NetConnection 192.168.0.150 -Port 88}
Get-Job -Name PortScan
Bu işin sonuçlarını görüntülemek için Alma İşini çalıştırın. Sonucu yalnızca bir kez görüntüleyebileceğinizi unutmayın! -Keep parametresini kullanmadığınız sürece.
Receive-Job -Name PortScan -Keep | Select-Object RemoteAddress,PingSucceeded,TcpTestSucceeded
Oturumda çalışan PowerShell işlerinden birinin veya tamamının sonlandırma durumuna geçmesini bekler.
Microsoft bunu şu şekilde açıklıyor:
Wait-Job cmdlet'i, yürütmeye devam etmeden önce bir işin sonlanma durumunda olmasını bekler. Sonlandırma durumları şunlardır:
- Tamamlanmış
- Arızalı
- Durduruldu
- Askıya alınmış
- Bağlantı kesildi
Belirli bir işe kadar bekleyebilirsiniz veya tüm işler sonlanma durumuna geçecektir. Ayrıca Zaman Aşımı parametresini kullanarak iş için maksimum bekleme süresini ayarlayabilir veya Askıya Alındı durumundaki bir işi beklemek için Zorla parametresini kullanabilirsiniz. veya Bağlantı kesildi durumları.
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/wait-job?view=powershell-7.3
İşte 2 işin nasıl yaratıldığına dair bir örnek. Çok uzun zaman alan ikinci işi bekliyorum. Her iki iş de birbiriyle ilişkili değildir ancak test için iyidir. Son olarak ikinci iş çağrılır, ancak yalnızca ilk iş tamamlandığında.
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
Umarım bu yardımcı olmuştur ve artık Wait-Job cmdlet'ini PowerShell komut dosyalarınıza uygulayabilirsiniz.

