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
Yerel ve uzak bilgisayarlardaki arka plan işleri hakkında ayrıntılı bilgi sağlar.
Uzun açıklama
Bu konu, arka plan işi kavramını açıklar ve PowerShell'de arka plan işlerinin nasıl çalıştığı hakkında teknik bilgiler sağlar.
Bu konu, about_Jobs, about_Thread_Jobsve about_Remote_Jobs konu başlıklarının bir ekidir.
Arka plan işleri hakkında
Arka plan işi zaman uyumsuz olarak bir komut veya ifade çalıştırır. Bir cmdlet, işlev, betik veya başka bir komut tabanlı görev çalıştırabilir. Uzun zaman alan komutları çalıştırmak için tasarlanmıştır, ancak arka planda herhangi bir komutu çalıştırmak için bunu kullanabilirsiniz.
Zaman uyumlu bir komut çalıştırıldığında, komut tamamlanana kadar PowerShell komut istemi gösterilmez. Ancak arka plan işi PowerShell istemini gizlemez. Arka plan işi başlatma komutu bir iş nesnesi döndürür. Komut hemen yanıt vererek arka plandaki iş çalışırken diğer görevler üzerinde çalışabilmenizi sağlar.
Ancak, bir arka plan işi başlattığınızda, iş çok hızlı çalıştırıldığında bile sonuçları hemen almazsınız. Döndürülen iş nesnesi iş hakkında yararlı bilgiler içerir, ancak iş sonuçlarını içermez. İş sonuçlarını almak için ayrı bir komut çalıştırmanız gerekir. Ayrıca işi durdurmak, işin tamamlanmasını beklemek ve işi silmek için komutlar çalıştırabilirsiniz.
Arka plan işinin zamanlamasını diğer komutlardan bağımsız hale getirmek için her arka plan işi kendi PowerShell oturumunda çalışır. Ancak, bu yalnızca işi çalıştırmak için oluşturulan ve sonra yok edilen geçici bir bağlantı olabileceği gibi, çeşitli ilgili işleri veya komutları çalıştırmak için kullanabileceğiniz kalıcı bir PSSession olabilir.
İş cmdlet'lerini kullanma
Yerel bilgisayarda arka plan işi başlatmak için bir Start-Job komutu kullanın.
Start-Job bir iş nesnesi döndürür. Ayrıca, Get-Job cmdlet'ini kullanarak yerel bilgisayarda başlatılan işleri temsil eden nesneleri de alabilirsiniz.
İş sonuçlarını almak için bir Receive-Job komutu kullanın. İş tamamlanmazsa, Receive-Job kısmi sonuçlar döndürür.
Wait-Job cmdlet'ini kullanarak oturumda başlatılan işlerden biri veya tümü tamamlanana kadar komut istemini gizleyebilirsiniz.
Arka plan işini durdurmak için Stop-Job cmdlet'ini kullanın. Bir işi silmek için Remove-Job cmdlet'ini kullanın.
Cmdlet'lerin nasıl çalıştığı hakkında daha fazla bilgi için, her cmdlet'in Yardım konusuna bakın ve about_Jobskonusuna bakın.
Uzak bilgisayarlarda arka plan işlerini başlatma
Yerel veya uzak bir bilgisayarda arka plan işleri oluşturabilir ve yönetebilirsiniz. Bir arka plan işini uzaktan çalıştırmak için, gibi bir cmdlet'in Invoke-Command parametresini kullanın veya Invoke-Command komutunu uzaktan çalıştırmak için Start-Job cmdlet'ini kullanın. Etkileşimli bir oturumda arka plan işi de başlatabilirsiniz.
Uzak arka plan işleri hakkında daha fazla bilgi için bkz. about_Remote_Jobs.
Çocuk işleri
Her arka plan işi bir ana iş ve bir veya daha fazla alt işten oluşur.
Start-Job veya Invoke-Command parametresini kullanmaya başlayan işlerde, üst iş bir yöneticidir. Herhangi bir komut çalıştırmaz veya herhangi bir sonuç döndürmez. Komutlar aslında alt görevler tarafından çalıştırılır. Diğer cmdlet'leri kullanmaya başlayan işler farklı çalışabilir.
Alt işler, ana iş nesnesinin ChildJobs özelliğinde depolanır. ChildJobs özelliği bir veya birden çok alt iş nesnesi içerebilir. Alt iş nesnelerinin Adı, Kimliğive üst işten farklı olan InstanceId vardır; böylece üst ve alt işleri tek tek veya birim olarak yönetebilirsiniz.
Bir işin üst ve alt işlerini almak için cmdlet'in Get-Job parametresini kullanın.
IncludeChildJob parametresi Windows PowerShell 3.0'da kullanıma sunulmuştur.
Get-Job -IncludeChildJob
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 RemoteJob Failed True localhost Get-Process
2 Job2 Completed True Server01 Get-Process
3 Job3 Failed False localhost Get-Process
Üst işi ve yalnızca belirli bir State değerine sahip alt işleri almak için cmdlet'in Get-Job parametresini kullanın.
ChildJobState parametresi Windows PowerShell 3.0'da tanıtıldı.
Get-Job -ChildJobState Failed
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 RemoteJob Failed True localhost Get-Process
3 Job3 Failed False localhost Get-Process
PowerShell'in tüm sürümlerinde bir işin alt işlerini almak için üst işin ChildJob özelliğini kullanın.
(Get-Job Job1).ChildJobs
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 Job2 Completed True Server01 Get-Process
3 Job3 Failed False localhost Get-Process
Aşağıdaki komutta belirtildiği gibi, alt işte bir Get-Job komutu da kullanabilirsiniz.
Get-Job Job3
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
3 Job3 Failed False localhost Get-Process
Alt görevin yapılandırması, görevi başlatmak için kullandığınız komuta bağlıdır.
Yerel bir bilgisayarda iş başlatmak için
Start-Jobkullandığınızda, iş, bir yönetici üst görev ve komutu çalıştıran bir alt görevden oluşmaktadır.Bir veya daha fazla bilgisayarda bir iş başlatmak için
Invoke-Commandparametresini kullandığınızda, iş, her bilgisayarda çalıştırılan her bir iş için yürütücü bir üst görev ve bir alt görevden oluşur.Bir veya daha fazla uzak bilgisayarda
Invoke-Commandkomutu çalıştırmak içinStart-Jobkullandığınızda, sonuç her uzak bilgisayarda çalıştırılacak yerel komutla aynıdır. komut, her bilgisayar için bir iş nesnesi döndürür. İş nesnesi, bir ana üst işi ve komutu çalıştıran bir alt işten oluşur.
Üst iş tüm alt işleri temsil eder. Ana işi yönetirken, ilişkili alt işleri de yönetirsiniz. Örneğin, bir ana işi durdurursanız tüm alt işler durdurulur. Bir üst işin sonuçlarını alırsanız, tüm alt işlerin sonuçlarını alırsınız.
Ancak, alt işleri tek tek de yönetebilirsiniz. Bu, en çok bir işle ilgili bir sorunu araştırmak veya asjob Invoke-Command parametresini kullanmaya başlayan birkaç alt işin yalnızca birinin sonuçlarını almak istediğinizde kullanışlıdır.
Aşağıdaki komut, yerel bilgisayarda ve iki uzak bilgisayarda arka plan işlerini başlatmak için Invoke-Command parametresini kullanır. komutu işi $j değişkenine kaydeder.
$invokeCommandSplat = @{
ComputerName = 'localhost', 'Server01', 'Server02'
ScriptBlock = {Get-Date}
AsJob = $true
}
$j = Invoke-Command @invokeCommandSplat
içinde işin Name ve $j özelliklerini görüntülediğinizde, komutun her biri bir bilgisayar için olmak üzere üç alt işe sahip bir iş nesnesi döndürdüğünü gösterir.
$j | Format-List Name, ChildJobs
Name : Job3
ChildJobs : {Job4, Job5, Job6}
Bir üst işi görüntülediğinizde, işin başarısız olduğunu görürsünüz.
$j
Id Name PSJobTypeName State HasMoreData Location
-- ---- ------------- ----- ----------- --------
3 Job3 RemotingJob Failed False localhost,Server...
Ancak alt işleri alan bir Get-Job komutu çalıştırdığınızda, çıktıda yalnızca bir alt işin başarısız olduğu gösterilir.
Get-Job -IncludeChildJobs
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
3 Job3 RemotingJob Failed False localhost,Server...
4 Job4 Completed True localhost Get-Date
5 Job5 Failed False Server01 Get-Date
6 Job6 Completed True Server02 Get-Date
Tüm alt işlerin sonuçlarını almak için Receive-Job cmdlet'ini kullanarak üst işin sonuçlarını alın. Ancak aşağıdaki komutta gösterildiği gibi belirli bir alt işin sonuçlarını da alabilirsiniz.
Receive-Job -Name Job6 -Keep |
Format-Table ComputerName, DateTime -AutoSize
ComputerName DateTime
------------ --------
Server02 Thursday, March 13, 2008 4:16:03 PM
PowerShell arka plan görevlerinin alt görevler özelliği, çalıştırdığınız görevler üzerinde daha fazla kontrol sağlamanıza olanak tanır.
İş türleri
PowerShell, farklı görevler için farklı iş türlerini destekler. Windows PowerShell 3.0 sürümünden itibaren geliştiriciler PowerShell'e yeni iş türleri ekleyen ve iş kaynağı bağdaştırıcılarını modüllere ekleyen "iş kaynağı bağdaştırıcıları" yazabilir. Modülü içeri aktardığınızda, oturumunuzda yeni iş türünü kullanabilirsiniz. Örneğin, PSScheduledJob modülü zamanlanmış işleri ve PSWorkflow modülü iş akışı işlerini ekler.
Özel iş türleri standart PowerShell arka plan işlerinden önemli ölçüde farklı olabilir. Örneğin, zamanlanmış işler diske kaydedilir; bunlar yalnızca belirli bir oturumda mevcut değildir. İş akışları askıya alınabilir ve devam ettirilebilir.
Özel işleri yönetmek için kullandığınız cmdlet'ler iş türüne bağlıdır. Bazıları için Get-Job ve Start-Jobgibi standart iş cmdlet'lerini kullanırsınız.
Diğerleri yalnızca belirli bir iş türünü yöneten özel cmdlet'lerle gelir.
Özel iş türleri hakkında ayrıntılı bilgi için iş türüyle ilgili yardım konularına bakın.
İşin iş türünü bulmak için Get-Job cmdlet'ini kullanın.
Get-Job, farklı iş türleri için farklı iş nesneleri döndürür.
döndüren iş nesnelerinin Get-Job özelliğinin değeri, iş türünü gösterir.
Aşağıdaki listede yerleşik PowerShell iş türleri açıklanmaktadır.
-
BackgroundJob -
Start-Jobcmdlet'ini kullanmaya başladı. -
RemoteJob - cmdlet'in
Invoke-Commandparametresini kullanmaya başladı. - CIMJob - CDXML modülünden bir cmdlet'in AsJob parametresini kullanmaya başladı.
- wmijob - WMI modülünden bir cmdlet'in AsJob parametresini kullanmaya başladı.
-
PSEventJob -
Register-ObjectEventkullanılarak oluşturulur ve Eylem parametresiyle bir eylem belirtilir.
Not
Belirli bir türdeki işleri almak için Get-Job cmdlet'ini kullanmadan önce, iş türünü ekleyen modülün geçerli oturuma aktarıldığını doğrulayın.
Aksi takdirde, Get-Job bu tür işleri alamazsınız.
Windows PowerShell 5.1 aşağıdaki ek iş türlerini içerir.
- PSWorkflowJob - bir iş akışının AsJob parametresini kullanmaya başladı.
- PSScheduledJob - İş tetikleyicisi tarafından başlatılan zamanlanmış bir işin örneği.
Bu iş türleri yalnızca Windows PowerShell 5.1'de kullanılabilir. Bu iş türlerini ekleyen modüller PowerShell 6.0 ve sonraki sürümlerle uyumlu değildir.
Daha fazla bilgi için aşağıdaki makalelere bakın:
Örnekler
Aşağıdaki komutlar yerel bir arka plan işi, uzak arka plan işi, iş akışı işi ve zamanlanmış bir iş oluşturur. Ardından işleri almak için Get-Job cmdlet'ini kullanır.
Get-Job zamanlanmış işi almaz, ancak zamanlanmış işin başlangıç örneklerini alır.
Yerel bilgisayarda bir arka plan işi başlatın.
PS> Start-Job -Name LocalData {Get-Process}
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 LocalData BackgroundJob Running True localhost Get-Process
Uzak bilgisayarda çalışan bir arka plan işi başlatın.
$invokeCommandSplat = @{
ComputerName = 'Server01'
AsJob = $true
JobName = 'RemoteData'
ScriptBlock = {Get-Process}
}
Invoke-Command @invokeCommandSplat
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 RemoteData RemoteJob Running True Server01 Get-Process
Ayrıca bakınız
- işlerle_İlgili
- about_Remote
- Uzaktan_Çalışma_Hakkında
- İş Parçacıkları Hakkında
- Invoke-Command
- get-job
- İşi Kaldırma
- Başlangıç İşi
- İş Durdurma
- bekleme işi
- Enter-PSSession
- Çıkış-PSSession
- New-PSSession
PowerShell