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-Commandbir 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-Commandkullanmaya 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-Jobgibi 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.