Start-Job

Bir PowerShell arka plan işi başlatır.

Sözdizimi

Start-Job
     [-Name <String>]
     [-ScriptBlock] <ScriptBlock>
     [-Credential <PSCredential>]
     [-Authentication <AuthenticationMechanism>]
     [[-InitializationScript] <ScriptBlock>]
     [-WorkingDirectory <String>]
     [-RunAs32]
     [-PSVersion <Version>]
     [-InputObject <PSObject>]
     [-ArgumentList <Object[]>]
     [<CommonParameters>]
Start-Job
     [-DefinitionName] <String>
     [[-DefinitionPath] <String>]
     [[-Type] <String>]
     [-WorkingDirectory <String>]
     [<CommonParameters>]
Start-Job
     [-Name <String>]
     [-Credential <PSCredential>]
     [-FilePath] <String>
     [-Authentication <AuthenticationMechanism>]
     [[-InitializationScript] <ScriptBlock>]
     [-WorkingDirectory <String>]
     [-RunAs32]
     [-PSVersion <Version>]
     [-InputObject <PSObject>]
     [-ArgumentList <Object[]>]
     [<CommonParameters>]
Start-Job
     [-Name <String>]
     [-Credential <PSCredential>]
     -LiteralPath <String>
     [-Authentication <AuthenticationMechanism>]
     [[-InitializationScript] <ScriptBlock>]
     [-WorkingDirectory <String>]
     [-RunAs32]
     [-PSVersion <Version>]
     [-InputObject <PSObject>]
     [-ArgumentList <Object[]>]
     [<CommonParameters>]

Description

Start-Job Cmdlet, yerel bilgisayarda bir PowerShell arka plan işi başlatır.

PowerShell arka plan işi, geçerli oturumla etkileşim kurmadan bir komut çalıştırır. Bir arka plan işi başlattığınızda, işin tamamlanması uzun sürse bile iş nesnesi hemen geri döner. İş çalışırken oturumda kesintisiz olarak çalışmaya devam edebilirsiniz.

İş nesnesi iş hakkında yararlı bilgiler içerir, ancak iş sonuçlarını içermez. İş tamamlandığında, işin sonuçlarını almak için cmdlet'ini kullanın Receive-Job . Arka plan işleri hakkında daha fazla bilgi için bkz . about_Jobs.

Uzak bir bilgisayarda arka plan işi çalıştırmak için, birçok cmdlet'te kullanılabilen AsJob parametresini kullanın veya cmdlet'ini kullanarak Invoke-Command uzak bilgisayarda bir Start-Job komut çalıştırın. Daha fazla bilgi için bkz . about_Remote_Jobs.

PowerShell 3.0'dan başlayarak, Start-Job zamanlanmış işler gibi özel iş türlerinin örneklerini başlatabilirsiniz. İşleri özel türlerle başlatmak için kullanma Start-Job hakkında bilgi için iş türü özelliğinin yardım belgelerine bakın.

PowerShell 6.0'da başlayarak ve işareti (&) arka plan işlecini kullanarak işleri başlatabilirsiniz. Arka plan işlecinin işlevselliği ile Start-Jobbenzerdir. bir işi başlatmak için her iki yöntem de psRemotingJob iş nesnesi oluşturur. ve işareti ()& kullanma hakkında daha fazla bilgi için bkz . about_Operators.

PowerShell 7, bir arka plan işinin ilk çalışma dizinini belirten WorkingDirectory parametresini kullanıma sunar. Parametresi belirtilmezse, Start-Job varsayılan olarak işi başlatan çağıranın geçerli çalışma dizinine geçer.

Not

ile Start-Job işlem dışı arka plan işi oluşturma, PowerShell'in PowerShell Azure İşlevleri gibi diğer uygulamalarda barındırıldığı senaryoda desteklenmez.

Bunun tasarımı gereğidir çünkü Start-Job işlem dışı bir arka plan işi başlatmak için altında kullanılabilecek $PSHOME yürütülebilir dosyaya bağlıdırpwsh, ancak bir uygulama PowerShell'i barındırırken doğrudan PowerShell NuGet SDK paketlerini kullanıyordur ve birlikte gönderilmezpwsh.

Bu senaryodaki Start-ThreadJob yerine ThreadJob modülü kullanılır.

Örnekler

Örnek 1: Arka plan işi başlatma

Bu örnek, yerel bilgisayarda çalışan bir arka plan işi başlatır.

Start-Job -ScriptBlock { Get-Process -Name pwsh }

Id  Name   PSJobTypeName   State     HasMoreData   Location    Command
--  ----   -------------   -----     -----------   --------    -------
1   Job1   BackgroundJob   Running   True          localhost   Get-Process -Name pwsh

Start-Job, arka plan işi olarak çalıştırmak Get-Process için ScriptBlock parametresini kullanır. Name parametresi, PowerShell işlemlerini pwshbulmak için öğesini belirtir. İş bilgileri görüntülenir ve iş arka planda çalışırken PowerShell bir istem döndürür.

İşin çıkışını görüntülemek için cmdlet'ini Receive-Job kullanın. Örneğin, Receive-Job -Id 1.

Örnek 2: Arka plan işini başlatmak için arka plan işlecini kullanma

Bu örnekte, yerel bilgisayarda bir arka plan işi başlatmak için ve işareti (&) arka plan işleci kullanılır. İş, Örnek 1 ile aynı sonucu Start-Job alır.

Get-Process -Name pwsh &

Id    Name   PSJobTypeName   State       HasMoreData     Location      Command
--    ----   -------------   -----       -----------     --------      -------
5     Job5   BackgroundJob   Running     True            localhost     Microsoft.PowerShell.Man...

Get-Process, PowerShell işlemlerini pwshbelirtmek için Name parametresini kullanır. ve işareti (&) komutu arka plan işi olarak çalıştırır. İş bilgileri görüntülenir ve iş arka planda çalışırken PowerShell bir istem döndürür.

İşin çıkışını görüntülemek için cmdlet'ini Receive-Job kullanın. Örneğin, Receive-Job -Id 5.

Örnek 3: Invoke-Command kullanarak bir iş başlatma

Bu örnek, birden çok bilgisayarda bir iş çalıştırır. İş bir değişkende depolanır ve PowerShell komut satırındaki değişken adı kullanılarak yürütülür.

$jobWRM = Invoke-Command -ComputerName (Get-Content -Path C:\Servers.txt) -ScriptBlock {
   Get-Service -Name WinRM } -JobName WinRM -ThrottleLimit 16 -AsJob

kullanan Invoke-Command bir iş oluşturulur ve değişkende $jobWRM depolanır. Invoke-Command, işin çalıştırıldığı bilgisayarları belirtmek için ComputerName parametresini kullanır. Get-Content dosyadan C:\Servers.txt sunucu adlarını alır.

ScriptBlock parametresi, WinRM hizmetini alan bir komut Get-Service belirtir. JobName parametresi, iş için WinRM adlı kolay bir ad belirtir. ThrottleLimit parametresi eşzamanlı komut sayısını 16 ile sınırlar. AsJob parametresi, sunucularda komutunu çalıştıran bir arka plan işi başlatır.

Örnek 4: İş bilgilerini alma

Bu örnek, bir iş hakkında bilgi alır ve yerel bilgisayarda çalıştırılan tamamlanmış bir işin sonuçlarını görüntüler.

$j = Start-Job -ScriptBlock { Get-WinEvent -Log System } -Credential Domain01\User01
$j | Select-Object -Property *

State         : Completed
HasMoreData   : True
StatusMessage :
Location      : localhost
Command       : Get-WinEvent -Log System
JobStateInfo  : Completed
Finished      : System.Threading.ManualResetEvent
InstanceId    : 27ce3fd9-40ed-488a-99e5-679cd91b9dd3
Id            : 18
Name          : Job18
ChildJobs     : {Job19}
PSBeginTime   : 8/8/2019 14:41:57
PSEndTime     : 8/8/2019 14:42:07
PSJobTypeName : BackgroundJob
Output        : {}
Error         : {}
Progress      : {}
Verbose       : {}
Debug         : {}
Warning       : {}
Information   : {}

Start-Job, System günlüğünün alındığını belirten Get-WinEvent bir komut çalıştırmak için ScriptBlock parametresini kullanır. Credential parametresi, işi bilgisayarda çalıştırma izni olan bir etki alanı kullanıcı hesabı belirtir. İş nesnesi değişkeninde $j depolanır.

değişkenindeki $j nesnesi işlem hattına Select-Objectgönderilir. Property parametresi, tüm iş nesnesinin özelliklerini görüntülemek için bir yıldız işareti (*) belirtir.

Örnek 5: Arka plan işi olarak betik çalıştırma

Bu örnekte, yerel bilgisayardaki bir betik arka plan işi olarak çalıştırılır.

Start-Job -FilePath C:\Scripts\Sample.ps1

Start-Job, yerel bilgisayarda depolanan bir betik dosyasını belirtmek için FilePath parametresini kullanır.

Örnek 6: Arka plan işi kullanarak işlem alma

Bu örnek, belirtilen işlemi ada göre almak için bir arka plan işi kullanır.

Start-Job -Name PShellJob -ScriptBlock { Get-Process -Name PowerShell }

Start-JobKolay iş adı (PShellJob) belirtmek için Name parametresini kullanır. ScriptBlock parametresi, Işlemlerin PowerShell adıyla alınacak şekilde belirtmektedirGet-Process.

Örnek 7: Arka plan işi kullanarak veri toplama ve kaydetme

Bu örnek, büyük miktarda harita verisi toplayan ve sonra bir dosyaya kaydeden bir .tif iş başlatır.

Start-Job -Name GetMappingFiles -InitializationScript {Import-Module -Name MapFunctions} -ScriptBlock {
   Get-Map -Name * | Set-Content -Path D:\Maps.tif }

Start-JobKolay bir iş adı (GetMappingFiles) belirtmek için Name parametresini kullanır. InitializationScript parametresi MapFunctions modülünü içeri aktaran bir betik bloğu çalıştırır. ScriptBlock parametresi çalışır Get-Map ve Set-Content verileri Path parametresi tarafından belirtilen konuma kaydeder.

Örnek 8: Bir arka plan işine giriş geçirme

Bu örnekte, giriş nesnesini işlemek için otomatik değişken kullanılır $input . İşin çıkışını görüntülemek için kullanın Receive-Job .

Start-Job -ScriptBlock { Get-Content -Path $input } -InputObject "C:\Servers.txt"
Receive-Job -Name Job45 -Keep

Server01
Server02
Server03
Server04

Start-Jobotomatik değişkenle çalıştırmak Get-Content için ScriptBlock parametresini $input kullanır. değişkeni InputObject $input parametresinden nesneleri alır. Receive-Jobişi belirtmek için Name parametresini kullanır ve sonuçların çıkışını alır. Keep parametresi, powershell oturumu sırasında yeniden görüntülenebilmesi için iş çıkışını kaydeder.

Örnek 9: Arka plan işi için çalışma dizinini ayarlama

WorkingDirectory, betikleri çalıştırabileceğiniz veya dosyaları açabileceğiniz bir iş için alternatif bir dizin belirtmenize olanak tanır. Bu örnekte, arka plan işi geçerli dizin konumundan farklı bir çalışma dizini belirtir.

PS C:\Test> Start-Job -WorkingDirectory C:\Test\Scripts { $PWD } | Receive-Job -AutoRemoveJob -Wait

Path
----
C:\Test\Scripts

Bu örneğin geçerli çalışma dizinidir C:\Test. Start-Jobişin çalışma dizinini belirtmek için WorkingDirectory parametresini kullanır. ScriptBlock parametresi, işin çalışma dizinini görüntülemek için kullanır$PWD. Receive-Job arka plan işinin çıkışını görüntüler. AutoRemoveJob işi siler ve Wait tüm sonuçlar alınana kadar komut istemini gizler.

Örnek 10: Bir dizi belirtmek için ArgumentList parametresini kullanma

Bu örnekte bağımsız değişken dizisi belirtmek için ArgumentList parametresi kullanılır. Dizi, işlem adlarının virgülle ayrılmış bir listesidir.

Start-Job -ScriptBlock { Get-Process -Name $args } -ArgumentList powershell, pwsh, notepad

Id     Name      PSJobTypeName   State       HasMoreData     Location     Command
--     ----      -------------   -----       -----------     --------     -------
1      Job1      BackgroundJob   Running     True            localhost    Get-Process -Name $args

cmdlet'i Start-Job komut çalıştırmak için ScriptBlock parametresini kullanır. Get-Processotomatik değişkenini $argsbelirtmek için Name parametresini kullanır. ArgumentList parametresi, işlem adları dizisini öğesine $argsgeçirir. PowerShell, pwsh ve not defteri işlem adları yerel bilgisayarda çalışan işlemlerdir.

İşin çıkışını görüntülemek için cmdlet'ini Receive-Job kullanın. Örneğin, Receive-Job -Id 1.

Örnek 11: Windows PowerShell 5.1'de iş çalıştırma

Bu örnekte, bir Windows PowerShell 5.1 oturumunda iş çalıştırmak için 5.1 değerine sahip PSVersion parametresi kullanılır.

$PSVersionTable.PSVersion

Major  Minor  Patch  PreReleaseLabel BuildLabel
-----  -----  -----  --------------- ----------
7      0      0      rc.1

$job = Start-Job -ScriptBlock { $PSVersionTable.PSVersion } -PSVersion 5.1
Receive-Job -Job $job

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      14393  3383

Parametreler

-ArgumentList

FilePath parametresi tarafından belirtilen betik veya ScriptBlock parametresiyle belirtilen bir komut için bir bağımsız değişken dizisini veya parametre değerlerini belirtir.

Bağımsız değişkenler Bağımsız Değişken Listesi'ne tek boyutlu dizi bağımsız değişkeni olarak geçirilmelidir. Örneğin, virgülle ayrılmış bir liste. ArgumentList'in davranışı hakkında daha fazla bilgi için bkz. about_Splatting.

Tür:Object[]
Diğer adlar:Args
Position:Named
Default value:None
Gerekli:False
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et:False

-Authentication

Kullanıcı kimlik bilgilerinin kimliğini doğrulamak için kullanılan mekanizmayı belirtir.

Bu parametre için kabul edilebilir değerler aşağıdaki gibidir:

  • Varsayılan
  • Temel
  • Credssp
  • Düzenlemek
  • Kerberos
  • Anlaşma
  • NegotiateWithImplicitCredential

Varsayılan değer Varsayılan'dır.

CredSSP kimlik doğrulaması yalnızca Windows Vista, Windows Server 2008 ve Windows işletim sisteminin sonraki sürümlerinde kullanılabilir.

Bu parametrenin değerleri hakkında daha fazla bilgi için bkz . AuthenticationMechanism.

Dikkat

Kullanıcının kimlik bilgilerinin kimlik doğrulaması için uzak bir bilgisayara geçirildiği Kimlik Bilgisi Güvenlik Destek Sağlayıcısı (CredSSP) kimlik doğrulaması, uzak ağ paylaşımına erişme gibi birden fazla kaynakta kimlik doğrulaması gerektiren komutlar için tasarlanmıştır. Bu mekanizma, uzak işlemin güvenlik riskini artırır. Uzak bilgisayarın güvenliği aşılırsa, bu bilgisayara geçirilen kimlik bilgileri ağ oturumunu denetlemek için kullanılabilir.

Tür:AuthenticationMechanism
Kabul edilen değerler:Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos
Position:Named
Default value:Default
Gerekli:False
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et:False

-Credential

Bu eylemi gerçekleştirme iznine sahip bir kullanıcı hesabı belirtir. Credential parametresi belirtilmezse, komut geçerli kullanıcının kimlik bilgilerini kullanır.

User01 veya Domain01\User01 gibi bir kullanıcı adı yazın veya cmdlet tarafından Get-Credential oluşturulan bir PSCredential nesnesi girin. Bir kullanıcı adı yazarsanız parolayı girmeniz istenir.

Kimlik bilgileri bir PSCredential nesnesinde depolanır ve parola SecureString olarak depolanır.

Not

SecureString veri koruması hakkında daha fazla bilgi için bkz. SecureString ne kadar güvenli?.

Tür:PSCredential
Position:Named
Default value:Current user
Gerekli:False
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et:False

-DefinitionName

Bu cmdlet'in başlattığı işin tanım adını belirtir. Zamanlanmış işler gibi tanım adına sahip özel iş türlerini başlatmak için bu parametreyi kullanın.

Zamanlanmış bir işin örneğini başlatmak için kullandığınızda Start-Job , iş tetikleyicilerinden veya iş seçeneklerinden bağımsız olarak iş hemen başlar. Sonuçta elde edilen iş örneği zamanlanmış bir iştir, ancak tetiklenen zamanlanmış işler gibi diske kaydedilmez. ArgumentList parametresiniStart-Job, zamanlanmış bir işte çalışan betiklerin parametrelerine değer sağlamak için kullanamazsınız.

Bu parametre PowerShell 3.0'da kullanıma sunulmuştur.

Tür:String
Position:0
Default value:None
Gerekli:True
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et:False

-DefinitionPath

Bu cmdlet'in başlattığı işin tanımının yolunu belirtir. Tanım yolunu girin. DefinitionPath ve DefinitionName parametrelerinin değerlerinin birleştirilmiş olması, iş tanımının tam yoludur. Zamanlanmış işler gibi tanım yolu olan özel iş türlerini başlatmak için bu parametreyi kullanın.

Zamanlanmış işler için DefinitionPath parametresinin değeri şeklindedir$HOME\AppData\Local\Windows\PowerShell\ScheduledJob.

Bu parametre PowerShell 3.0'da kullanıma sunulmuştur.

Tür:String
Position:1
Default value:None
Gerekli:False
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et:False

-FilePath

Arka plan işi olarak çalışan yerel bir betik Start-Job belirtir. Betiğin yolunu ve dosya adını girin veya işlem hattını kullanarak öğesine Start-Jobbir betik yolu gönderin. Betik yerel bilgisayarda veya yerel bilgisayarın erişebileceği bir klasörde olmalıdır.

Bu parametreyi kullandığınızda PowerShell, belirtilen betik dosyasının içeriğini bir betik bloğuna dönüştürür ve betik bloğunu arka plan işi olarak çalıştırır.

Tür:String
Position:0
Default value:None
Gerekli:True
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et:False

-InitializationScript

İş başlamadan önce çalıştırılacak komutları belirtir. Betik bloğu oluşturmak için, komutları küme ayraçları ({} içine alın).

İşin çalıştığı oturumu hazırlamak için bu parametreyi kullanın. Örneğin, bunu kullanarak oturuma işlevler, ek bileşenler ve modüller ekleyebilirsiniz.

Tür:ScriptBlock
Position:1
Default value:None
Gerekli:False
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et:False

-InputObject

Komutun girişini belirtir. Nesneleri içeren bir değişken girin veya nesneleri oluşturan bir komut veya ifade yazın.

ScriptBlock parametresinin değerinde, giriş nesnelerini temsil etmek için otomatik değişkenini kullanın$input.

Tür:PSObject
Position:Named
Default value:None
Gerekli:False
İşlem hattı girişini kabul et:True
Joker karakterleri kabul et:False

-LiteralPath

Bu cmdlet'in arka plan işi olarak çalıştırıldığı yerel bir betik belirtir. Yerel bilgisayardaki bir betiğin yolunu girin.

Start-JobLiteralPath parametresinin değerini tam olarak yazıldığı gibi kullanır. Hiçbir karakter joker karakter olarak yorumlanmamıştır. Yol kaçış karakterleri içeriyorsa, tek tırnak içine alın. Tek tırnak işaretleri PowerShell'e hiçbir karakteri kaçış dizisi olarak yorumlamaması gerektiğini söyler.

Tür:String
Diğer adlar:PSPath, LP
Position:Named
Default value:None
Gerekli:True
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et:False

-Name

Yeni iş için kolay bir ad belirtir. cmdlet'i gibi Stop-Job diğer iş cmdlet'lerine işi tanımlamak için bu adı kullanabilirsiniz.

Varsayılan kolay ad , Job#burada # her iş için artırılan bir sıra numarasıdır.

Tür:String
Position:Named
Default value:None
Gerekli:False
İşlem hattı girişini kabul et:True
Joker karakterleri kabul et:False

-PSVersion

İşi çalıştırmak için kullanılacak PowerShell sürümünü belirtir. PSVersion değeri 5.1 olduğunda, iş bir Windows PowerShell 5.1 oturumunda çalıştırılır. Diğer tüm değerler için iş, PowerShell'in geçerli sürümü kullanılarak çalıştırılır.

Bu parametre PowerShell 7'ye eklendi ve yalnızca Windows'da çalışır.

Tür:Version
Position:Named
Default value:None
Gerekli:False
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et:False

-RunAs32

PowerShell 7'yi kullanmaya başlayarak RunAs32 parametresi 64 bit PowerShell (pwsh) üzerinde çalışmaz. 64 bit PowerShell'de RunAs32 belirtilirse, Start-Job sonlandırıcı bir özel durum hatası oluşturur. RunAs32 ile 32 bit PowerShell (pwsh) işlemi başlatmak için 32 bit PowerShell'in yüklü olması gerekir.

32 bit PowerShell'de RunAs32, işi 64 bit işletim sisteminde bile 32 bit bir işlemde çalışmaya zorlar.

Windows 7 ve Windows Server 2008 R2'nin 64 bit sürümlerinde, Start-Job komut RunAs32 parametresini içerdiğinde, başka bir kullanıcının kimlik bilgilerini belirtmek için Credential parametresini kullanamazsınız.

Tür:SwitchParameter
Position:Named
Default value:False
Gerekli:False
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et:False

-ScriptBlock

Arka plan işinde çalıştırılacak komutları belirtir. Betik bloğu oluşturmak için, komutları küme ayraçları ({} içine alın). $input InputObject parametresinin değerine erişmek için otomatik değişkenini kullanın. Bu parametre zorunludur.

Tür:ScriptBlock
Diğer adlar:Command
Position:0
Default value:None
Gerekli:True
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et:False

-Type

tarafından Start-Jobbaşlatılan işler için özel türü belirtir. Zamanlanmış işler için PSScheduledJob veya iş akışları işleri için PSWorkflowJob gibi özel bir iş türü adı girin. Bu parametre standart arka plan işleri için geçerli değildir.

Bu parametre PowerShell 3.0'da kullanıma sunulmuştur.

Tür:String
Position:2
Default value:None
Gerekli:False
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et:False

-WorkingDirectory

Arka plan işinin ilk çalışma dizinini belirtir. Parametre belirtilmezse, iş varsayılan konumdan çalışır. Varsayılan konum, işi başlatan çağıranın geçerli çalışma dizinidir.

Bu parametre PowerShell 7'de kullanıma sunulmuştur.

Tür:String
Position:Named
Default value:$HOME on Unix (macOS, Linux) and $HOME\Documents on Windows
Gerekli:False
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et:False

Girişler

String

Name özelliğine sahip bir nesneyi Bu cmdlet'e Name parametresine yöneltebilirsiniz. Örneğin, dosyasından bir FileInfo nesnesine Get-ChildItemkanal oluşturabilirsiniz.

Çıkışlar

System.Management.Automation.PSRemotingJob

Bu cmdlet, başlattığı işi temsil eden bir PSRemotingJob nesnesi döndürür.

Notlar

PowerShell için aşağıdaki diğer adları Start-Jobiçerir:

  • Tüm platformlar:
    • sajb

Arka planda çalıştırmak için, Start-Job geçerli oturumda kendi oturumunda çalışır. Cmdlet'ini Invoke-Command kullanarak uzak bilgisayardaki bir Start-Job oturumda komut çalıştırdığınızda, Start-Job uzak oturumdaki bir oturumda çalışır.