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
Uzak bilgisayarlarda arka plan işlerinin nasıl çalıştırıldığı açıklanır.
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. -
BackgroundJob- Komutlar ve betikler yerel makinede ayrı bir işlemde çalıştırılır. Daha fazla bilgi için bkz. about_Jobs. -
PSTaskJobveyaThreadJob- 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ş) oturumu arasında geçirildikçe serileştirilir 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.
Ö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
Invoke-Commandkullanın. Bu makalenin ayrılmış işlemler bölümüne bakın. - İş yerine yeni bir işlem oluşturmak için
Start-Processkullanın. Daha fazla bilgi için bkz. başlangıç-işlem .
Uzak işler
Üç farklı yöntem kullanarak uzak bilgisayarlarda iş çalıştırabilirsiniz.
Uzak bilgisayarda etkileşimli bir oturum başlatın. Ardından etkileşimli oturumda bir iş başlatın. Tüm eylemler uzak bilgisayarda gerçekleştirilse de yordamlar yerel bir işi çalıştırmayla aynıdır.
Sonuçlarını yerel bilgisayara döndüren uzak bir bilgisayarda bir iş çalıştırın. İşlerin sonuçlarını toplamak ve yerel bilgisayarda merkezi bir konumda tutmak istediğinizde bu yöntemi kullanın.
Uzak bilgisayarda, sonuçlarını uzak bilgisayarda tutan bir işi çalıştırın. İş verileri kaynak bilgisayarda daha güvenli bir şekilde korunduğunda bu yöntemi kullanın.
Etkileşimli oturumda iş başlatma
Uzak bir bilgisayarla etkileşimli bir oturum başlatabilir ve ardından etkileşimli oturum sırasında bir iş başlatabilirsiniz. Etkileşimli oturumlar hakkında daha fazla bilgi için bkz. about_Remoteve bkz. Enter-PSSession.
Etkileşimli bir oturumda iş başlatma yordamı, yerel bilgisayarda arka plan işi başlatma yordamıyla neredeyse aynıdır. Ancak, tüm işlemler yerel bilgisayarda değil uzak bilgisayarda gerçekleşir.
Uzak bir bilgisayarla etkileşimli bir oturum başlatmak için
Enter-PSSessioncmdlet'ini kullanın. Etkileşimli oturum için geçici bir bağlantı kurmak üzereEnter-PSSessionComputerName parametresini kullanabilirsiniz. Alternatif olarak, etkileşimli oturumu bir PowerShell oturumunda (PSSession) çalıştırmak için Session parametresini de kullanabilirsiniz.Aşağıdaki komut, Server01 bilgisayarında etkileşimli bir oturum başlatır.
C:\PS> Enter-PSSession -ComputerName Server01Komut istemi, artık Server01 bilgisayarına bağlı olduğunuzu gösterecek şekilde değişir.
Server01\C:>Oturumda uzak bir iş başlatmak için
Start-Jobcmdlet'ini kullanın. Aşağıdaki komut, Server01 bilgisayarındaki Windows PowerShell olay günlüğündeki olayları alan uzak bir iş çalıştırır.Start-Jobcmdlet'i, işi temsil eden bir nesne döndürür.Bu komut, iş nesnesini
$jobdeğişkenine kaydeder.Server01\C:> $job = Start-Job -ScriptBlock { Get-EventLog "Windows PowerShell" }İş çalışırken, diğer işler de dahil olmak üzere diğer komutları çalıştırmak için etkileşimli oturumu kullanabilirsiniz. Ancak, iş tamamlanana kadar etkileşimli oturumu açık tutmanız gerekir. Oturumu sona erdirdiğinizde iş kesintiye uğrar ve sonuçlar kaybolur.
İşin tamam olup olmadığını öğrenmek için
$jobdeğişkeninin değerini görüntüleyin veya işi almak içinGet-Jobcmdlet'ini kullanın. Aşağıdaki komut, işi görüntülemek içinGet-Jobcmdlet'ini kullanır.Server01\C:> Get-Job $job SessionId Name State HasMoreData Location Command --------- ---- ----- ----------- -------- ------- 1 Job1 Complete True localhost Get-EventLog "Windows...Get-Jobçıktısı, işin "localhost" bilgisayarda çalıştığını çünkü işin aynı bilgisayarda (bu örnekte Server01) başlatıldığını ve çalıştığını gösterir.İşin sonuçlarını almak için
Receive-Jobcmdlet'ini kullanın. Sonuçları etkileşimli oturumda görüntüleyebilir veya uzak bilgisayardaki bir dosyaya kaydedebilirsiniz. Aşağıdaki komut, $job değişkenindeki işin sonuçlarını alır. Komut, işin sonuçlarını Server01 bilgisayarındaki PsLog.txt dosyasına kaydetmek için yeniden yönlendirme işlecini (>) kullanır.Server01\C:> Receive-Job $job > C:\logs\PsLog.txtEtkileşimli oturumu sonlandırmak için
Exit-PSSessioncmdlet'ini kullanın. Komut istemi, yerel bilgisayarda özgün oturumda olduğunuzu gösterecek şekilde değişir.Server01\C:> Exit-PSSession C:\PS>Server01 bilgisayarında
PsLog.txtdosyasının içeriğini istediğiniz zaman görüntülemek için başka bir etkileşimli oturum başlatın veya uzak bir komut çalıştırın. Bu tür komutlar,PsLog.txtdosyasındaki verileri araştırmak ve yönetmek için çeşitli komutlar kullanmak istemeniz durumunda en iyi şekilde PSSession'da (kalıcı bir bağlantı) çalıştırılır. PSSessions hakkında daha fazla bilgi için bkz. about_PSSessions.Aşağıdaki komutlar, Server01 bilgisayarına bağlı bir
New-PSSessionoluşturmak için cmdlet'ini kullanır ve dosyanın içeriğini görüntülemek üzere PSSession'da birInvoke-Commandkomutu çalıştırmak içinGet-Contentcmdlet'ini kullanır.$s = New-PSSession -ComputerName Server01 Invoke-Command -Session $s -ScriptBlock { Get-Content C:\logs\pslog.txt}
Sonuçları yerel bilgisayara döndüren uzak bir iş başlatma (AsJob)
Komut sonuçlarını yerel bilgisayara döndüren uzak bir bilgisayarda iş başlatmak için, cmdlet'i gibi bir cmdlet'in Invoke-Command parametresini kullanın.
AsJob parametresini kullandığınızda, iş uzak bilgisayarda çalıştırılıyor olsa bile iş nesnesi aslında yerel bilgisayarda oluşturulur. İş tamamlandığında sonuçlar yerel bilgisayara döndürülür.
Herhangi bir cmdlet tarafından oluşturulan herhangi bir işi yönetmek için İş adlarını (İş cmdlet'leri) içeren cmdlet'leri kullanabilirsiniz. AsJob parametrelerine sahip cmdlet'lerin çoğu PowerShell uzaktan iletişimini kullanmaz, bu nedenle uzaktan iletişim için yapılandırılmamış ve uzaktan iletişim gereksinimlerini karşılamayan bilgisayarlarda bile kullanabilirsiniz.
Aşağıdaki komut, Server01 bilgisayarında bir iş başlatmak için
Invoke-Commandparametresini kullanır. İş, Olayları Sistem günlüğünde alan birGet-Eventlogkomutu çalıştırır. jobName parametresini kullanarak işe bir görünen ad atayabilirsiniz.Invoke-Command -ComputerName Server01 -ScriptBlock { Get-EventLog System} -AsJobKomutun sonuçları aşağıdaki örnek çıkışa benzer.
SessionId Name State HasMoreData Location Command --------- ---- ----- ----------- -------- ------- 1 Job1 Running True Server01 Get-EventLog SystemAsJob parametresi kullanıldığında,
Invoke-CommandStart-Jobdöndürdüğü aynı iş nesnesi türünü döndürür. İş nesnesini bir değişkene kaydedebilir veya işi almak için birGet-Jobkomutu kullanabilirsiniz.Location özelliğinin değerinin işin Server01 bilgisayarında çalıştığını gösterdiğini unutmayın.
cmdlet'in
Invoke-Commandparametresini kullanarak başlatılan bir işi yönetmek için İş cmdlet'lerini kullanın. Uzak işi temsil eden iş nesnesi yerel bilgisayarda olduğundan, işi yönetmek için uzak komutları çalıştırmanız gerekmez.İşin tamamlanıp tamamlanmadığını belirlemek için bir
Get-Jobkomutu kullanın. Aşağıdaki komut geçerli oturumda başlatılan tüm işleri alır.Get-JobUzak iş geçerli oturumda başlatıldığından, yerel bir
Get-Jobkomutu işi alır. İş nesnesinin State özelliği komutun başarıyla tamamlandığını gösterir.SessionId Name State HasMoreData Location Command --------- ---- ----- ----------- -------- ------- 1 Job1 Completed True Server01 Get-EventLog Systemİşin sonuçlarını almak için
Receive-Jobcmdlet'ini kullanın. İş sonuçları, iş nesnesinin bulunduğu bilgisayara otomatik olarak döndürüldüğünden, sonuçları yerel birReceive-Jobkomutuyla alabilirsiniz.Aşağıdaki komut, işin sonuçlarını almak için
Receive-Jobcmdlet'ini kullanır. İşi tanımlamak için oturum kimliğini kullanır. Bu komut, iş sonuçlarını $results değişkenine kaydeder. Sonuçları bir dosyaya da yönlendirebilirsiniz.$results = Receive-Job -Id 1
Sonuçları uzak bilgisayarda tutan bir uzak iş başlatma
Uzak bilgisayarda komut sonuçlarını saklayan bir işi başlatmak için, uzak bilgisayarda Invoke-Command komutu çalıştırmak için Start-Job cmdlet'ini kullanın. Birden çok bilgisayarda iş çalıştırmak için bu yöntemi kullanabilirsiniz.
Uzaktan bir Start-Job komutu çalıştırdığınızda, uzak bilgisayarda iş nesnesi oluşturulur ve iş sonuçları uzak bilgisayarda tutulur.
İşin perspektifinden bakıldığında, tüm işlemler yereldir. Uzak bilgisayardaki yerel bir işi yönetmek için komutları uzaktan çalıştıracaksınız.
uzak bilgisayarda
Invoke-Commandkomutu çalıştırmak içinStart-Jobcmdlet'ini kullanın.Bu komut pssession (kalıcı bir bağlantı) gerektirir. Geçici bağlantı kurmak için
Invoke-CommandComputerName parametresini kullanırsanız, iş nesnesi döndürüldüğündeInvoke-Commandkomutu tamamlanmış olarak kabul edilir. Sonuç olarak, geçici bağlantı kapatılır ve iş iptal edilir.Aşağıdaki komut, Server01 bilgisayarına bağlı bir PSSession oluşturmak için
New-PSSessioncmdlet'ini kullanır. komutu PSSession'ı$sdeğişkenine kaydeder.$s = New-PSSession -ComputerName Server01Sonraki komut, PSSession'da bir
Invoke-Commandkomutu çalıştırmak içinStart-Jobcmdlet'ini kullanır.Start-Jobkomutu veGet-Eventlogkomutu ayraç içine alınır.Invoke-Command -Session $s -ScriptBlock { Start-Job -ScriptBlock {Get-EventLog System}}Sonuçlar aşağıdaki örnek çıktıya benzer.
Id Name State HasMoreData Location Command -- ---- ----- ----------- -------- ------- 2 Job2 Running True Localhost Get-EventLog SystemStart-Jobkomutunu uzaktan çalıştırdığınızdaInvoke-Command,Start-Jobdöndürdüğü iş nesnesinin türünü döndürür. İş nesnesini bir değişkene kaydedebilir veya işi almak için birGet-Jobkomutu kullanabilirsiniz.Konum özelliğinin değerinin, işin Server01 bilgisayarında çalıştırılsa bile işin "LocalHost" olarak bilinen yerel bilgisayarda çalıştığını gösterdiğini unutmayın. İş nesnesi Server01 bilgisayarında oluşturulduğundan ve iş aynı bilgisayarda çalıştığından, yerel bir arka plan işi olarak kabul edilir.
Uzak işi yönetmek için İşi cmdlet'lerini kullanın. İş nesnesi uzak bilgisayarda olduğundan, iş sonuçlarını almak, durdurmak, beklemek veya almak için uzak komutları çalıştırmanız gerekir.
İşin tamamlandığını görmek için
Invoke-Commandkomutunu kullanarak Server01 bilgisayarına bağlı PSSession'da birGet-Jobkomutu çalıştırın.Invoke-Command -Session $s -ScriptBlock {Get-Job}komutu bir iş nesnesi döndürür. İş nesnesinin State özelliği komutun başarıyla tamamlandığını gösterir.
SessionId Name State HasMoreData Location Command --------- ---- ----- ----------- -------- ------- 2 Job2 Completed True LocalHost Get-EventLog Systemİşin sonuçlarını almak için
Invoke-Commandcmdlet'ini kullanarak Server01 bilgisayarına bağlı PSSession'da birReceive-Jobkomutu çalıştırın.Aşağıdaki komut, işin sonuçlarını almak için
Receive-Jobcmdlet'ini kullanır. İşi tanımlamak için oturum kimliğini kullanır. Bu komut, iş sonuçlarını$resultsdeğişkenine kaydeder. Uzak bilgisayardaki iş önbelleğinde sonucu tutmak içinReceive-JobKeep parametresini kullanır.$results = Invoke-Command -Session $s -ScriptBlock { Receive-Job -SessionId 2 -Keep }Ayrıca sonuçları yerel veya uzak bilgisayardaki bir dosyaya yeniden yönlendirebilirsiniz. Aşağıdaki komut, sonuçları Server01 bilgisayarındaki bir dosyaya kaydetmek için yeniden yönlendirme işlecini kullanır.
Invoke-Command -Session $s -Command { Receive-Job -SessionId 2 > C:\logs\pslog.txt }
Ayrılmış işlem olarak çalıştırma
Daha önce belirtildiği gibi, üst oturum sonlandırıldığında, çalışan tüm alt işler kendi alt işlemleriyle birlikte sonlandırılır. Geçerli PowerShell oturumuna bağlı olmayan işleri çalıştırmak için yerel makinede uzaktan iletişim özelliğini kullanabilirsiniz.
Yerel makinede yeni bir PowerShell oturumu oluşturun. Bu oturumda bir iş başlatmak için Invoke-Command kullanma.
Invoke-Command uzak oturumun bağlantısını kesmenize ve üst oturumu sonlandırmanıza olanak tanır. Daha sonra yeni bir PowerShell oturumu başlatabilir ve işi izlemeye devam etmek için daha önce bağlantısı kesilmiş olan oturuma bağlanabilirsiniz. Ancak, özgün PowerShell oturumuna döndürülen tüm veriler, bu oturum sonlandırıldığında kaybolur. Yalnızca bağlantı kesildikten sonra oluşturulan yeni veri nesneleri yeniden bağlandığında döndürülür.
# Create remote session on local machine
PS> $session = New-PSSession -Cn localhost
# Start remote job
PS> $job = Invoke-Command -Session $session -ScriptBlock { 1..60 | % { sleep 1; "Output $_" } } -AsJob
PS> $job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 RemoteJob Running True localhost 1..60 | % { sleep 1; ...
# Disconnect the job session
PS> Disconnect-PSSession $session
Id Name Transport ComputerName ComputerType State ConfigurationName Availability
-- ---- --------- ------------ ------------ ----- ----------------- ------------
1 Runspace1 WSMan localhost RemoteMachine Disconnected Microsoft.PowerShell None
PS> $job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 RemoteJob Disconnected True localhost 1..60 | % { sleep 1;
# Reconnect the session to a new job object
PS> $jobNew = Receive-PSSession -Session $session -OutTarget Job
PS> $job | Wait-Job | Receive-Job
Output 9
Output 10
Output 11
...
Bu örnekte işler yine de bir üst PowerShell oturumuna eklenmiştir.
Ancak üst oturum, Invoke-Command çalıştırıldığı özgün PowerShell oturumu değildir.
Ayrıca bakınız
- about_Jobs
- about_Job_Details
- about_Remote
- about_Remote_Variables
- Invoke-Command
- get-job
- İşi Kaldırma
- Başlangıç İşi
- İş Durdurma
- bekleme işi
- Enter-PSSession
- çıkış-PSSession
- New-PSSession
PowerShell