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 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. -
PSTaskJoborThreadJob- 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 kullanın
Invoke-Command. Daha fazla bilgi için bkz . about_Remote_Jobs. - İş yerine yeni bir işlem oluşturmak için kullanın
Start-Process. Daha fazla bilgi için bkz . Start-Process.
İş 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. dahil olmak üzereInvoke-Commandherhangi bir iş komutunu uzaktan çalıştırmak için kullanabilirsinizStart-Job.
Yerel bilgisayarda bir iş başlatma
Yerel bilgisayarda bir arka plan işi başlatmak için cmdlet'ini Start-Job kullanın.
Komut Start-Job yazmak için, işin çalıştığı komutu küme ayraçları ({} içinde) içine alın.
Komut belirtmek için ScriptBlock parametresini kullanın.
Aşağıdaki komut, yerel bilgisayarda bir komut çalıştıran bir Get-Process 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.
komutu, Start-Job 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 birlikte kullanabilirsiniz. Aşağıdaki komut bir iş nesnesi başlatır ve sonuçta elde edilen iş nesnesini değişkene $job 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şlecini kullanmak, önceki örnekteki Start-Job cmdlet'i kullanmaya işlevsel olarak eşdeğerdir.
$job = Get-Process &
İş nesnelerini alma
Cmdlet, Get-Job 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 oldu. Bir iş De Engellendi veya Çalışı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 değişkene $job 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 cmdlet'ini Receive-Job kullanın.
Aşağıdaki örnekte Receive-Job , cmdlet değişkenindeki iş nesnesini $job 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, değişkenindeki işin $job sonuçlarını değişkenine $results kaydeder.
$results = Receive-Job -Job $job
Kısmi iş sonuçlarını alma ve tutma
Receive-Job Cmdlet bir 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 komutları yeniden çalıştırabilirsiniz Receive-Job .
Varsayılan olarak, Receive-Job sonuçları iş sonuçlarının depolandığı önbellekten siler. Yeniden çalıştırdığınızda Receive-Job , 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 komutların sonuçlarını Receive-Job 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
parametresini kullanın. Aşağıdaki komutlar, Henüz tamamlanmamış bir iş üzerinde Keep parametresinin kullanılmasını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 Get-Job tüm arka plan işlerini almak için nesnesini kullanır.
Get-Job
Sonuçlar bir tabloda görünür. İşin durumu State 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 cmdlet'ini kullanırsanız Receive-Job 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 Wait-Job herhangi birini veya tümünü beklemek için cmdlet'ini de kullanabilirsiniz.
Wait-Job bir veya daha fazla belirli iş veya tüm işler için beklemenize olanak tanır.
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 Timeout 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 cmdlet'ini Stop-Job kullanın. Aşağıdaki komut, Sistem olay günlüğündeki her girişi almak için bir iş başlatır. İş nesnesini değişkene $job kaydeder.
$job = Start-Job -ScriptBlock {Get-EventLog -Log System}
Aşağıdaki komut işi durdurur. değişkenindeki |$jobişi adresine göndermek için bir işlem hattı işleci (Stop-Job) kullanır.
$job | Stop-Job
İşi silme
Bir arka plan işini silmek için cmdlet'ini Remove-Job kullanın. Aşağıdaki komut değişkendeki $job 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 Reason ö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. Reason ö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
PowerShell