about_Job_Details
Kısa açıklama
Yerel ve uzak bilgisayarlardaki arka plan işleri hakkında ayrıntılı bilgi sağlar.
Ayrıntılı 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_Jobs ve about_Remote_Jobs konuları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 kullanabilirsiniz.
Zaman uyumlu bir komut çalıştırıldığında, komut tamamlanana kadar PowerShell komut istemi gösterilmez. Ancak bir arka plan işi PowerShell istemini gizlemez. Arka plan işi başlatma komutu bir iş nesnesi döndürür. İstem, arka plan işi çalışırken diğer görevler üzerinde çalışabilmeniz için hemen döndürür.
Ancak, bir arka plan işi başlattığınızda, iş çok hızlı çalıştırılsa bile sonuçları hemen alamazsı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 da olabilir.
İş cmdlet'lerini kullanma
Yerel bilgisayarda Start-Job
arka plan işi başlatmak için bir komut kullanın.
Start-Job
bir iş nesnesi döndürür. Ayrıca, cmdlet'ini kullanarak Get-Job
yerel bilgisayarda başlatılan işleri temsil eden nesneleri de alabilirsiniz.
İş sonuçlarını almak için bir Receive-Job
komut kullanın. İş tamamlanmazsa kısmi Receive-Job
sonuçlar döndürür. Oturumda Wait-Job
başlatılan işlerden biri veya tümü tamamlanana kadar komut istemini engellemek için cmdlet'ini de kullanabilirsiniz.
Arka plan işini durdurmak için cmdlet'ini Stop-Job
kullanın. Bir işi silmek için cmdlet'ini Remove-Job
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_Jobs 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 Invoke-Command
bir cmdlet'in AsJob parametresini kullanın veya cmdlet'ini Invoke-Command
kullanarak komutu uzaktan çalıştırınStart-Job
. 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.
Alt işler
Her arka plan işi bir üst iş ve bir veya daha fazla alt işten oluşur. kullanmaya Start-Job
başlayan işlerde veya öğesinin AsJob parametresinde Invoke-Command
üst iş bir yöneticidir. Herhangi bir komut çalıştırmaz veya herhangi bir sonuç döndürmez. Komutlar aslında alt işler tarafından çalıştırılır. Diğer cmdlet'leri kullanmaya başlayan işler farklı çalışabilir.
Alt işler, üst iş nesnesinin ChildJobs özelliğinde depolanır. ChildJobs özelliği bir veya birden çok alt iş nesnesi içerebilir. Üst ve alt işleri tek tek veya birim olarak yönetebilmeniz için alt iş nesnelerinin üst işten farklı bir Name, ID ve InstanceId değeri vardır.
Bir işin üst ve alt işlerini almak için cmdlet'in IncludeChildJobs parametresini Get-Job
kullanın. IncludeChildJob parametresi Windows PowerShell 3.0'da kullanıma sunulmuştur.
PS> 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
ChildJobState parametresini kullanın. ChildJobState parametresi Windows PowerShell 3.0'da kullanıma sunulmuştur.
PS> 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.
PS> (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 gösterildiği gibi alt işte bir Get-Job
komut da kullanabilirsiniz:
PS> Get-Job Job3
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
3 Job3 Failed False localhost Get-Process
Alt işin yapılandırması, işi başlatmak için kullandığınız komuta bağlıdır.
yerel bir bilgisayarda bir iş başlatmak için kullandığınızda
Start-Job
, iş bir yönetici üst işi ve komutu çalıştıran bir alt iş oluşur.Bir veya daha fazla bilgisayarda iş başlatmak için AsJob parametresini
Invoke-Command
kullandığınızda, iş bir yönetici üst işi ve her bilgisayarda çalıştırılacak her iş için bir alt iş içerir.Komutunu bir
Start-Job
veya daha fazla uzak bilgisayarda çalıştırmak için kullandığınızdaInvoke-Command
, 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 yönetici üst işi ve komutu çalıştıran bir alt işten oluşur.
Üst iş tüm alt işleri temsil eder. Bir üst işi yönetirken, ilişkili alt işleri de yönetirsiniz. Örneğin, bir üst 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, bir işle ilgili bir sorunu araştırmak veya asjob parametresini Invoke-Command
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 AsJob parametresini Invoke-Command
kullanır. komutu işi değişkene $j
kaydeder.
PS> $j = Invoke-Command -ComputerName localhost, Server01, Server02 `
-Command {Get-Date} -AsJob
içinde işin Name ve ChildJob özelliklerini görüntüdüğünüzde $j
, komutun her bilgisayar için bir tane olmak üzere üç alt işi olan bir iş nesnesi döndürdüğünü gösterir.
PS> $j | Format-List Name, ChildJobs
Name : Job3
ChildJobs : {Job4, Job5, Job6}
Üst işi görüntüdüğünüzde, işin başarısız olduğu gösterilir.
PS> $j
Id Name PSJobTypeName State HasMoreData Location
-- ---- ------------- ----- ----------- --------
3 Job3 RemotingJob Failed False localhost,Server...
Ancak alt işleri alan bir Get-Job
komut çalıştırdığınızda, çıkışta yalnızca bir alt işin başarısız olduğu gösterilir.
PS> 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 cmdlet'ini Receive-Job
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.
PS> Receive-Job -Name Job6 -Keep | Format-Table ComputerName,
>> DateTime -AutoSize
ComputerName DateTime
------------ --------
Server02 Thursday, March 13, 2008 4:16:03 PM
PowerShell arka plan işlerinin alt işler özelliği, çalıştırdığınız işler üzerinde daha fazla denetim sağlar.
İş 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ışı işleri askıya alınabilir ve sürdürülebilir.
Özel işleri yönetmek için kullandığınız cmdlet'ler iş türüne bağlıdır. Bazıları için ve Start-Job
gibi Get-Job
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.
Bir işin iş türünü bulmak için cmdlet'ini Get-Job
kullanın. Get-Job
farklı iş türleri için farklı iş nesneleri döndürür. döndüren iş nesnelerinin PSJobTypeName özelliğinin Get-Job
değeri, iş türünü gösterir.
Aşağıdaki tabloda PowerShell ile birlikte gelen iş türleri listelenmiştir.
İş Türü | Açıklama |
---|---|
BackgroundJob | cmdlet'ini Start-Job kullanmaya başladı. |
RemoteJob | 'nin AsJob parametresini kullanmaya başladı |
Invoke-Command cmdlet'i seçin. |
|
PSWorkflowjob | Bir iş akışının AsJob parametresini kullanmaya başladı. |
PSScheduledJob | İş tetikleyicisi tarafından başlatılan zamanlanmış bir işin örneği. |
CIM İşi | Bir cmdlet'in AsJob parametresini kullanmaya başladı |
CDXML modülü. | |
WMI İşi | Bir cmdlet'in AsJob parametresini kullanmaya başladı |
WMI modülü. | |
PSEventjob | KullanılarakRegister-ObjectEvent ve belirterek oluşturuldu |
eylemini eylem parametresiyle birlikte kullanın. |
NOT: Belirli bir türdeki Get-Job
işleri almak için 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 almaz.
Ö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 cmdlet'ini kullanır Get-Job
. 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.
PS> Invoke-Command -ComputerName Server01 {Get-Process} `
-AsJob -JobName RemoteData
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 RemoteData RemoteJob Running True Server01 Get-Process
Zamanlanmış iş oluşturma
PS> Register-ScheduledJob -Name ScheduledJob -ScriptBlock `
{Get-Process} -Trigger (New-JobTrigger -Once -At "3 PM")
Id Name JobTriggers Command Enabled
-- ---- ----------- ------- -------
1 ScheduledJob 1 Get-Process True
bir iş akışı oluşturun.
PS> workflow Test-Workflow {Get-Process}
İş akışını iş olarak çalıştırın.
PS> Test-Workflow -AsJob -JobName TestWFJob
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 TestWFJob PSWorkflowJob NotStarted True localhost Get-Process
İşleri al. Komut Get-Job
zamanlanmış işleri almaz, ancak başlatılan zamanlanmış işin örneklerini alır.
PS> Get-Job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 LocalData BackgroundJob Completed True localhost Get-Process
4 RemoteData RemoteJob Completed True Server01 Get-Process
6 TestWFJob PSWorkflowJob Completed True localhost WorkflowJob
8 ScheduledJob PSScheduledJob Completed True localhost Get-Process
Zamanlanmış işleri almak için cmdlet'ini Get-ScheduledJob
kullanın.
PS> Get-ScheduledJob
Id Name JobTriggers Command Enabled
-- ---- ----------- ------- -------
1 ScheduledJob 1 Get-Process True
Ayrıca bkz.
PowerShell