다음을 통해 공유


Start-Job

PowerShell 백그라운드 작업을 시작합니다.

Syntax

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

Description

cmdlet은 Start-Job 로컬 컴퓨터에서 PowerShell 백그라운드 작업을 시작합니다.

PowerShell 백그라운드 작업은 현재 세션과 상호 작용하지 않고 명령을 실행합니다. 백그라운드 작업을 시작하면 작업이 완료되는 데 시간이 오래 걸리는 경우에도 작업 개체가 즉시 반환됩니다. 작업이 실행되는 동안 중단 없이 세션에서 작업을 계속할 수 있습니다.

작업 개체에는 작업에 대한 유용한 정보가 포함되어 있지만 작업 결과는 포함되지 않습니다. 작업이 완료되면 cmdlet을 Receive-Job 사용하여 작업 결과를 가져옵니다. 백그라운드 작업에 대한 자세한 내용은 about_Jobs를 참조하세요.

원격 컴퓨터에서 백그라운드 작업을 실행하려면 많은 cmdlet에서 사용할 수 있는 AsJob 매개 변수를 사용하거나 cmdlet을 사용하여 Invoke-Command 원격 컴퓨터에서 명령을 실행 Start-Job 합니다. 자세한 내용은 about_Remote_Jobs 참조하세요.

PowerShell 3.0 Start-Job 부터 예약된 작업과 같은 사용자 지정 작업 유형의 인스턴스를 시작할 수 있습니다. 를 사용하여 Start-Job 사용자 지정 형식으로 작업을 시작하는 방법에 대한 자세한 내용은 작업 유형 기능에 대한 도움말 문서를 참조하세요.

예제

예제 1: 백그라운드 작업 시작

다음은 로컬 컴퓨터의 백그라운드에서 실행되는 작업을 시작하는 예제입니다.

Start-Job -ScriptBlock {Get-Process}

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

Start-JobScriptBlock 매개 변수를 사용하여 백그라운드 작업으로 실행됩니다 Get-Process . 작업이 백그라운드에서 실행되는 동안 작업 정보가 표시되고 PowerShell이 프롬프트로 돌아갑니다.

예제 2: Invoke-Command 사용하여 작업 시작

이 예제에서는 여러 컴퓨터에서 작업을 실행합니다. 작업은 변수에 저장되고 PowerShell 명령줄의 변수 이름을 사용하여 실행됩니다.

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

를 사용하는 Invoke-Command 작업이 만들어지고 변수에 $jobWRM 저장됩니다. Invoke-CommandComputerName 매개 변수를 사용하여 작업이 실행되는 컴퓨터를 지정합니다. Get-Content 는 파일에서 서버 이름을 가져옵니다 C:\Servers.txt .

ScriptBlock 매개 변수는 WinRM 서비스를 가져오는 명령을 Get-Service 지정합니다. JobName 매개 변수는 작업 WinRM의 이름을 지정합니다. ThrottleLimit 매개 변수는 동시 명령 수를 16개로 제한합니다. AsJob 매개 변수는 서버에서 명령을 실행하는 백그라운드 작업을 시작합니다.

예제 3: 작업 정보 가져오기

이 예제에서는 작업에 대한 정보를 가져오고 로컬 컴퓨터에서 실행된 완료된 작업의 결과를 표시합니다.

$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에서는 ScriptBlock 매개 변수를 사용하여 시스템 로그를 가져오기 위해 를 지정하는 명령을 실행합니다Get-WinEvent. Credential 매개 변수는 컴퓨터에서 작업을 실행할 수 있는 권한이 있는 도메인 사용자 계정을 지정합니다. 작업 개체는 변수에 $j 저장됩니다.

변수의 $j 개체는 파이프라인 Select-Object아래로 전송됩니다. Property 매개 변수는 모든 작업 개체의 속성을 표시하는 별표(*)를 지정합니다.

예제 4: 스크립트를 백그라운드 작업으로 실행

이 예제에서는 로컬 컴퓨터의 스크립트가 백그라운드 작업으로 실행됩니다.

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

Start-Job 에서는 FilePath 매개 변수를 사용하여 로컬 컴퓨터에 저장된 스크립트 파일을 지정합니다.

예제 5: 백그라운드 작업을 사용하여 프로세스 가져오기

이 예제에서는 백그라운드 작업을 사용하여 지정된 프로세스를 이름으로 가져옵니다.

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

Start-Job 에서는 Name 매개 변수를 사용하여 친숙한 작업 이름 인 PShellJob을 지정합니다. ScriptBlock 매개 변수는 PowerShell이라는 이름의 프로세스를 가져오기 위해 지정 Get-Process 합니다.

예제 6: 백그라운드 작업을 사용하여 데이터 수집 및 저장

다음은 많은 양의 지도 데이터를 수집한 다음 파일에 저장하는 작업을 시작하는 예제입니다 .tif .

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

Start-Job 에서는 Name 매개 변수를 사용하여 친숙한 작업 이름 GetMappingFiles를 지정합니다. InitializationScript 매개 변수는 MapFunctions 모듈을 가져오는 스크립트 블록을 실행합니다. ScriptBlock 매개 변수는 를 실행하고 Get-MapSet-ContentPath 매개 변수로 지정된 위치에 데이터를 저장합니다. RunAs32 매개 변수는 64비트 운영 체제에서도 프로세스를 32비트로 실행합니다.

예제 7: 백그라운드 작업에 입력 전달

이 예제에서는 자동 변수를 $input 사용하여 입력 개체를 처리합니다. 를 사용하여 Receive-Job 작업의 출력을 봅니다.

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

Server01
Server02
Server03
Server04

Start-Job 에서는 ScriptBlock 매개 변수를 사용하여 자동 변수를 실행 Get-Content 합니다 $input . 변수는 $inputInputObject 매개 변수에서 개체를 가져옵니다. Receive-Job 에서는 Name 매개 변수를 사용하여 작업을 지정하고 결과를 출력합니다. Keep 매개 변수는 PowerShell 세션 중에 다시 볼 수 있도록 작업 출력을 저장합니다.

매개 변수

-ArgumentList

FilePath 매개 변수로 지정된 스크립트에 대한 인수 또는 매개 변수 값의 배열을 지정합니다.

ArgumentList 매개 변수 이름 뒤에 오는 모든 값은 ArgumentList 값으로 해석되므로 이 매개 변수를 명령의 마지막 매개 변수로 지정합니다.

Type:Object[]
Aliases:Args
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Authentication

사용자 자격 증명을 인증하는 데 사용되는 메커니즘을 지정합니다.

이 매개 변수에 허용되는 값은 다음과 같습니다.

  • Default
  • 기본
  • Credssp
  • 다이제스트
  • Kerberos
  • Negotiate
  • NegotiateWithImplicitCredential

기본값은 Default입니다.

CredSSP 인증은 Windows Vista, Windows Server 2008 이상 버전의 Windows 운영 체제에서만 사용할 수 있습니다.

이 매개 변수의 값에 대한 자세한 내용은 AuthenticationMechanism을 참조하세요.

주의

사용자의 자격 증명이 인증을 위해 원격 컴퓨터로 전달되는 CredSSP(자격 증명 보안 지원 공급자) 인증은 둘 이상의 리소스에서 인증이 필요한 명령(예: 원격 네트워크 공유 액세스)에 사용됩니다. 이렇게 하면 원격 작업의 보안 위험이 커집니다. 원격 컴퓨터가 손상된 경우 이 컴퓨터로 전달된 자격 증명을 사용하여 네트워크 세션을 제어할 수 있습니다.

Type:AuthenticationMechanism
Accepted values:Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos
Position:Named
Default value:Default
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Credential

이 작업을 수행할 권한이 있는 사용자 계정을 지정합니다. Credential 매개 변수를 지정하지 않으면 명령은 현재 사용자의 자격 증명을 사용합니다.

User01 또는 Domain01\User01과 같은 사용자 이름을 입력하거나 cmdlet의 것과 같은 PSCredential 개체를 Get-Credential 입력합니다.

Type:PSCredential
Position:Named
Default value:Current user
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DefinitionName

이 cmdlet이 시작하는 작업의 정의 이름을 지정합니다. 이 매개 변수를 사용하여 예약된 작업과 같이 정의 이름이 있는 사용자 지정 작업 유형을 시작합니다.

를 사용하여 Start-Job 예약된 작업의 instance 시작하면 작업 트리거 또는 작업 옵션에 관계없이 작업이 즉시 시작됩니다. 결과 작업 instance 예약된 작업이지만 트리거된 예약된 작업처럼 디스크에 저장되지 않습니다. 의 Start-JobArgumentList 매개 변수를 사용하여 예약된 작업에서 실행되는 스크립트의 매개 변수에 대한 값을 제공할 수 없습니다. 자세한 내용은 about_Scheduled_Jobs 참조하세요.

이 매개 변수는 PowerShell 3.0에서 도입되었습니다.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-DefinitionPath

이 cmdlet이 시작하는 작업에 대한 정의 경로를 지정합니다. 정의 경로를 입력합니다. DefinitionPathDefinitionName 매개 변수 값의 연결은 작업 정의의 정규화된 경로입니다. 이 매개 변수를 사용하여 예약된 작업과 같이 정의 경로가 있는 사용자 지정 작업 유형을 시작합니다.

예약된 작업의 경우 DefinitionPath 매개 변수의 값은 입니다 $home\AppData\Local\Windows\PowerShell\ScheduledJob.

이 매개 변수는 PowerShell 3.0에서 도입되었습니다.

Type:String
Position:1
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FilePath

백그라운드 작업으로 실행되는 로컬 스크립트 Start-Job 를 지정합니다. 스크립트의 경로 및 파일 이름을 입력하거나 파이프라인을 사용하여 스크립트 경로를 로 Start-Job보냅니다. 스크립트는 로컬 컴퓨터 또는 로컬 컴퓨터에서 액세스할 수 있는 폴더에 있어야 합니다.

이 매개 변수를 사용하는 경우 PowerShell은 지정된 스크립트 파일의 내용을 스크립트 블록으로 변환하고 스크립트 블록을 백그라운드 작업으로 실행합니다.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-InitializationScript

작업을 시작하기 전에 실행되는 명령을 지정합니다. 스크립트 블록을 만들려면 명령을 중괄호({})로 묶습니다.

이 매개 변수를 사용하여 작업이 실행되는 세션을 준비할 수 있습니다. 예를 들어 이 매개 변수를 사용하여 함수, 스냅인 및 모듈을 세션에 추가할 수 있습니다.

Type:ScriptBlock
Position:1
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

명령에 대한 입력을 지정합니다. 개체가 포함된 변수를 입력하거나 개체를 생성하는 명령 또는 식을 입력하세요.

ScriptBlock 매개 변수 값에서 자동 변수를 $input 사용하여 입력 개체를 나타냅니다.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-LiteralPath

이 cmdlet이 백그라운드 작업으로 실행되는 로컬 스크립트를 지정합니다. 로컬 컴퓨터에서 스크립트의 경로를 입력합니다.

Start-JobLiteralPath 매개 변수의 값을 입력한 것과 정확히 동일하게 사용합니다. 어떠한 문자도 와일드카드 문자로 해석되지 않습니다. 이스케이프 문자가 포함된 경로는 작은따옴표로 묶으세요. 작은따옴표는 PowerShell에 문자를 이스케이프 시퀀스로 해석하지 않도록 지시합니다.

Type:String
Aliases:PSPath
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Name

새 작업의 이름을 지정합니다. 이름을 사용하여 cmdlet과 같은 다른 작업 cmdlet에 대한 작업을 식별할 Stop-Job 수 있습니다.

기본 식별 이름은 입니다 Job#. 여기서 # 는 각 작업에 대해 증가하는 서수입니다.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-PSVersion

버전을 지정합니다. Start-Job 는 PowerShell 버전을 사용하여 작업을 실행합니다. 이 매개 변수에 허용되는 값은 및 3.0입니다2.0.

이 매개 변수는 PowerShell 3.0에서 도입되었습니다.

Type:Version
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-RunAs32

32비트 프로세스에서 작업을 실행한다는 Start-Job 것을 나타냅니다. RunAs32 는 64비트 운영 체제에서도 32비트 프로세스에서 작업을 강제로 실행합니다.

64비트 버전의 Windows 7 및 Windows Server 2008 R2에서는 명령에 RunAs32 매개 변수가 포함된 경우 Start-JobCredential 매개 변수를 사용하여 다른 사용자의 자격 증명을 지정할 수 없습니다.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ScriptBlock

백그라운드 작업에서 실행할 명령을 지정합니다. 스크립트 블록을 만들려면 명령을 중괄호({})로 묶습니다. 자동 변수를 $input 사용하여 InputObject 매개 변수의 값에 액세스합니다. 이 매개 변수는 필수입니다.

Type:ScriptBlock
Aliases:Command
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Type

에서 시작한 작업에 대한 사용자 지정 형식을 Start-Job지정합니다. 사용자 지정 작업 유형 이름(예: 예약된 작업의 경우 PSScheduledJob 또는 워크플로 작업의 경우 PSWorkflowJob)을 입력합니다. 이 매개 변수는 표준 백그라운드 작업에 유효하지 않습니다.

이 매개 변수는 PowerShell 3.0에서 도입되었습니다.

Type:String
Position:2
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

입력

String

파이프라인을 사용하여 Name 속성이 있는 개체를 Name 매개 변수로 보낼 수 있습니다. 예를 들어 FileInfo 개체를 에서 Get-ChildItem 로 파이프라인할 Start-Job수 있습니다.

출력

System.Management.Automation.PSRemotingJob

Start-Job 는 시작한 작업을 나타내는 PSRemotingJob 개체를 반환합니다.

참고

백그라운드 Start-Job 에서 실행하려면 현재 세션의 자체 세션에서 를 실행합니다. cmdlet을 Invoke-Command 사용하여 원격 컴퓨터 Start-Job 의 세션에서 명령을 실행하는 Start-Job 경우 원격 세션의 세션에서 실행됩니다.