Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Kısa açıklama
PowerShell arka plan işlerinin geçerli oturumla etkileşim kurmadan arka planda bir komut veya ifadeyi nasıl çalıştıracakları hakkında bilgi sağlar.
Uzun açıklama
PowerShell, komutları ve betikleri işler aracılığıyla eşzamanlı olarak çalıştırır. Eşzamanlılığı desteklemek için PowerShell tarafından sağlanan üç iş türü vardır.
-
RemoteJob- Komutlar ve betikler uzak bir oturumda çalışır. Bilgi için bkz. about_Remote_Jobs. -
BackgroundJob- Komutlar ve betikler yerel makinede ayrı bir işlemde çalıştırılır. -
PSTaskJobveyaThreadJob- Komutlar ve betikler, yerel makinede aynı işlem içinde ayrı bir iş parçacığında çalışır. Daha fazla bilgi için bkz. about_Thread_Jobs.
Betikleri uzaktan, ayrı bir makinede veya ayrı bir işlemde çalıştırmak harika yalıtım sağlar. Uzak işte oluşan hatalar, diğer çalışan işleri veya işi başlatan üst oturumu etkilemez. Ancak uzaktan iletişim katmanı, nesne serileştirme de dahil olmak üzere ek yük ekler. Tüm nesneler, üst oturum ile uzak (iş) oturum arasında geçirildikçe seri hale getirilir ve seri durumdan çıkarılır. Büyük karmaşık veri nesnelerinin seri hale getirilmesi büyük miktarda işlem ve bellek kaynağı tüketebilir ve büyük miktarda veriyi ağ üzerinden aktarabilir.
İş parçacığı tabanlı işler, farklı iş parçacıklarında aynı işlemde çalıştırıldığından uzak ve arka plan işleri kadar sağlam değildir. Bir işin işlemi kilitleyen kritik bir hatası varsa, işlemdeki diğer tüm işler sonlandırılır.
Ancak iş parçacığı tabanlı işler daha az ek yük gerektirir. Uzaktan iletişim katmanını veya serileştirmeyi kullanmaz. Sonuç nesneleri geçerli oturumdaki canlı nesnelere başvuru olarak döndürülür. Bu ek yük olmadan, iş parçacığı tabanlı işler daha hızlı çalışır ve diğer iş türlerinden daha az kaynak kullanır.
Önemli
İşi oluşturan üst oturum da iş durumunu izler ve işlem hattı verilerini toplar. İş tamamlanmış duruma ulaştığında, iş alt işlemi üst işlem tarafından sonlandırılır. Üst oturum sonlandırılırsa, çalışan tüm alt işler kendi alt işlemleriyle birlikte sonlandırılır.
Bu durumu geçici olarak gidermenin iki yolu vardır:
- bağlantısız oturumlarda çalışan işler oluşturmak için
Invoke-Commandkullanın. Daha fazla bilgi için bkz. about_Remote_Jobs. - İş yerine yeni bir işlem oluşturmak için
Start-Processkullanın. Daha fazla bilgi için bkz. başlangıç-işlem .
İş cmdlet'leri
-
Start-Job- Yerel bilgisayarda bir arka plan işi başlatır. -
Get-Job- Geçerli oturumda başlatılan arka plan işlerini alır. -
Receive-Job- Arka plan işlerinin sonuçlarını alır. -
Stop-Job- Arka plan işini durdurur. -
Wait-Job- Bir veya tüm işler tamamlanana kadar komut istemini gizler. -
Remove-Job- Arka plan işini siler. -
Invoke-Command- AsJob parametresi uzak bilgisayarda bir arka plan işi oluşturur.Invoke-Commanddahil olmak üzere herhangi bir iş komutunu uzaktan çalıştırmak içinStart-Jobkullanabilirsiniz.
Yerel bilgisayarda bir iş başlatma
Yerel bilgisayarda bir arka plan işi başlatmak için Start-Job cmdlet'ini kullanın.
Start-Job komutu yazmak için, işin çalıştığı komutu küme ayracı içine alın ({}). komutu belirtmek için ScriptBlock parametresini kullanın.
Aşağıdaki komut, yerel bilgisayarda bir Get-Process komutu çalıştıran bir arka plan işi başlatır.
Start-Job -ScriptBlock {Get-Process}
Bir arka plan işi başlattığınızda, işin tamamlanması uzun sürse bile komut istemi hemen döner. İş çalışırken oturumda kesintisiz olarak çalışmaya devam edebilirsiniz.
Start-Job komutu, işi temsil eden bir nesne döndürür. İş nesnesi iş hakkında yararlı bilgiler içerir, ancak iş sonuçlarını içermez.
İş nesnesini bir değişkene kaydedebilir ve arka plan işini yönetmek için diğer İş cmdlet'leriyle kullanabilirsiniz. Aşağıdaki komut bir iş nesnesi başlatır ve sonuçta elde edilen iş nesnesini $job değişkenine kaydeder.
$job = Start-Job -ScriptBlock {Get-Process}
PowerShell 6.0'da başlayarak, bir arka plan işi başlatmak için işlem hattının sonundaki arka plan işlecini (&) kullanabilirsiniz. Daha fazla bilgi için bkz. arka plan işleci.
Arka plan işlecinin kullanılması, önceki örnekteki Start-Job cmdlet'ini kullanmaya işlevsel olarak eşdeğerdir.
$job = Get-Process &
İş nesnelerini alma
Get-Job cmdlet'i geçerli oturumda başlatılan arka plan işlerini temsil eden nesneleri döndürür. Parametreler olmadan, Get-Job geçerli oturumda başlatılan tüm işleri döndürür.
Get-Job
İş nesnesi, işin durumunu içerir ve bu da işin tamamlanıp tamamlanmadığını gösterir. Tamamlanmış bir işin durumu Tamamlandı veya Başarısız . bir iş de Engellendi veya Çalıştırılıyor olabilir.
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Complete True localhost Get-Process
İş nesnesini bir değişkene kaydedebilir ve daha sonraki bir komutta işi temsil etmek için kullanabilirsiniz. Aşağıdaki komut, kimliği 1 olan işi alır ve $job değişkenine kaydeder.
$job = Get-Job -Id 1
bir işin sonuçlarını alma
Arka plan işi çalıştırdığınızda sonuçlar hemen görünmez. Arka plan işinin sonuçlarını almak için Receive-Job cmdlet'ini kullanın.
Aşağıdaki örnekte, Receive-Job cmdlet'i $job değişkenindeki iş nesnesini kullanarak işin sonuçlarını alır.
Receive-Job -Job $job
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
103 4 11328 9692 56 1176 audiodg
804 14 12228 14108 100 101.74 1740 CcmExec
668 7 2672 6168 104 32.26 488 csrss
...
Bir işin sonuçlarını bir değişkene kaydedebilirsiniz. Aşağıdaki komut, $job değişkenindeki işin sonuçlarını $results değişkenine kaydeder.
$results = Receive-Job -Job $job
Kısmi iş sonuçlarını alma ve tutma
Receive-Job cmdlet'i arka plan işinin sonuçlarını alır. İş tamamlandıysa Receive-Job tüm iş sonuçlarını alır. İş hala çalışıyorsa, Receive-Job şimdiye kadar oluşturulan sonuçları alır. Kalan sonuçları almak için Receive-Job komutları yeniden çalıştırabilirsiniz.
Varsayılan olarak, Receive-Job sonuçları iş sonuçlarının depolandığı önbellekten siler.
Receive-Job yeniden çalıştırdığınızda, yalnızca ilk çalıştırmadan sonra gelen yeni sonuçları alırsınız.
Aşağıdaki komutlar, iş tamamlanmadan önce çalıştırılacak Receive-Job komutların sonuçlarını gösterir.
C:\PS> Receive-Job -Job $job
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
103 4 11328 9692 56 1176 audiodg
804 14 12228 14108 100 101.74 1740 CcmExec
C:\PS> Receive-Job -Job $job
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
68 3 2632 664 29 0.36 1388 ccmsetup
749 22 21468 19940 203 122.13 3644 communicator
905 7 2980 2628 34 197.97 424 csrss
1121 25 28408 32940 174 430.14 3048 explorer
döndürülen iş sonuçlarını silmesini önlemek için Receive-Job parametresini kullanın. Aşağıdaki komutlar, Keep parametresini henüz tamamlanmamış bir iş üzerinde kullanmanın etkisini gösterir.
C:\PS> Receive-Job -Job $job -Keep
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
103 4 11328 9692 56 1176 audiodg
804 14 12228 14108 100 101.74 1740 CcmExec
C:\PS> Receive-Job -Job $job -Keep
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
103 4 11328 9692 56 1176 audiodg
804 14 12228 14108 100 101.74 1740 CcmExec
68 3 2632 664 29 0.36 1388 ccmsetup
749 22 21468 19940 203 122.13 3644 communicator
905 7 2980 2628 34 197.97 424 csrss
1121 25 28408 32940 174 430.14 3048 explorer
Sonuçlar bekleniyor
Tamamlanması uzun süren bir komut çalıştırırsanız, işin ne zaman tamamlandığını belirlemek için iş nesnesinin özelliklerini kullanabilirsiniz. Aşağıdaki komut, geçerli oturumdaki tüm arka plan işlerini almak için Get-Job nesnesini kullanır.
Get-Job
Sonuçlar bir tabloda görünür. İşin durumu Durumu sütununda görünür.
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Complete True localhost Get-Process
2 Job2 BackgroundJob Running True localhost Get-EventLog -Log ...
3 Job3 BackgroundJob Complete True localhost dir -Path C:\* -Re...
Bu durumda, State özelliği İş 2'nin hala çalıştığını gösterir. İş sonuçlarını şimdi almak için Receive-Job cmdlet'ini kullanırsanız sonuçlar tamamlanmamış olur. Tüm sonuçları almak için cmdlet'ini art arda kullanabilirsiniz Receive-Job . İşin ne zaman tamamleneceğini belirlemek için State özelliğini kullanın.
Komutunu da Receive-Job -Wait kullanabilirsiniz. Bu parametreyi kullandığınızda, iş tamamlanana ve tüm sonuçlar sağlanana kadar cmdlet komut istemini döndürmez.
İşin sonuçlarının herhangi birini veya tümünü beklemek için Wait-Job cmdlet'ini de kullanabilirsiniz.
Wait-Job, belirli bir veya daha fazla işi veya tüm işleri beklemenizi sağlar.
Aşağıdaki komut, Wait-Job 10 olan bir işi beklemek için cmdlet'ini kullanır.
Wait-Job -Id 10
Sonuç olarak, iş tamamlanana kadar PowerShell istemi gösterilmez.
Önceden belirlenmiş bir süre de bekleyebilirsiniz. Bu komut, beklemeyi 120 saniyeyle sınırlamak için Zaman Aşımı parametresini kullanır. Süre dolduğunda komut istemi geri döner, ancak iş arka planda çalışmaya devam eder.
Wait-Job -Id 10 -Timeout 120
İşi durdurma
Arka plan işini durdurmak için Stop-Job cmdlet'ini kullanın. Aşağıdaki komut, Sistem olay günlüğündeki her girişi almak için bir iş başlatır. İş nesnesini $job değişkenine kaydeder.
$job = Start-Job -ScriptBlock {Get-EventLog -Log System}
Aşağıdaki komut işi durdurur.
| değişkenindeki işi $jobgöndermek için bir işlem hattı işleci (Stop-Job) kullanır.
$job | Stop-Job
İşi silme
Arka plan işini silmek için Remove-Job cmdlet'ini kullanın. Aşağıdaki komut, $job değişkenindeki işi siler.
Remove-Job -Job $job
Başarısız bir işi araştırma
İşler birçok nedenle başarısız olabilir. iş nesnesi, hatanın nedeni hakkında bilgi içeren bir Reason özelliği içerir.
Aşağıdaki örnek, gerekli kimlik bilgileri olmadan bir iş başlatır.
$job = Start-Job -ScriptBlock {New-Item -Path HKLM:\Software\MyCompany}
Get-Job $job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Failed False localhost New-Item -Path HKLM:...
İşin başarısız olmasına neden olan hatayı bulmak için Neden özelliğini inceleyin.
$job.ChildJobs[0].JobStateInfo.Reason
Bu durumda, uzak bilgisayar komutu çalıştırmak için açık kimlik bilgileri gerektirdiğinden iş başarısız oldu. Nedeni özelliği aşağıdaki iletiyi içerir:
Uzak sunucuya bağlanma şu hata iletisiyle başarısız oldu: "Erişim reddedildi".
Ayrıca bakınız
- about_Job_Details
- about_PSSessions
- about_Remote
- about_Remote_Jobs
- about_Thread_Jobs
- Invoke-Command
- get-job
- Alma İşi
- İşi Kaldırma
- Başlangıç İşi
- İş Durdurma
- bekleme işi
PowerShell