İş_Detayları_Hakkında

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-Job kullandığı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-Command parametresini 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-Command komutu çalıştırmak için Start-Job kullandığı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-Job cmdlet'ini kullanmaya başladı.
  • RemoteJob - cmdlet'in Invoke-Command parametresini 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-ObjectEvent kullanı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