Compartilhar via


Start-Job

Inicia um trabalho em segundo plano do Windows PowerShell.

Sintaxe

Start-Job [-ScriptBlock] <scriptblock> [[-InitializationScript] <scriptblock>] [-ArgumentList <Object[]>] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-Credential <PSCredential>] [-InputObject <psobject>] [-Name <string>] [-RunAs32] [<CommonParameters>]

Start-Job [[-FilePath] <string>] [[-InitializationScript] <scriptblock>] [-ArgumentList <Object[]>] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-Credential <PSCredential>] [-InputObject <psobject>] [-Name <string>] [-RunAs32] [<CommonParameters>]

Descrição

O cmdlet Start-Job inicia um trabalho em segundo plano do Windows PowerShell no computador local.

Um trabalho em segundo plano do Windows PowerShell executa um comando "em segundo plano" sem interagir com a sessão atual. Quando você inicia um trabalho em segundo plano, um objeto de trabalho é retornado imediatamente, mesmo que o trabalho leve um tempo longo para ser concluído. Você pode continuar a trabalhar na sessão sem interrupções enquanto o trabalho é executado.

O objeto de trabalho contém informações úteis sobre o trabalho, mas não contém os resultados do trabalho. Quando o trabalho for concluído, use o cmdlet Receive-Job para obter os resultados do trabalho. Para obter mais informações sobre trabalhos em segundo plano remotos, consulte about_Jobs.

Para executar um trabalho em segundo plano em um computador remoto, use o parâmetro AsJob que está disponível em muitos cmdlets ou use o cmdlet Invoke-Command para executar um comando Start-Job no computador remoto. Para obter mais informações, consulte about_Remote_Jobs.

Parâmetros

-ArgumentList <Object[]>

Especifica os argumentos (valores de parâmetros) para o script que é especificado pelo parâmetro FilePath.

Como todos os valores que seguem o nome de parâmetro ArgumentList são interpretados como sendo valores de ArgumentList, o parâmetro ArgumentList deve ser o último parâmetro no comando.

Necessário?

false

Posição?

named

Valor padrão

Aceitar entrada do pipeline?

false

Aceitar caracteres curinga?

false

-Authentication <AuthenticationMechanism>

Especifica o mecanismo usado para autenticar as credenciais do usuário. Os valores válidos são Default, Basic, Credssp, Digest, Kerberos, Negotiate e NegotiateWithImplicitCredential. O valor padrão é Default.

A autenticação CredSSP está disponível apenas no Windows Vista, no Windows Server 2008 e em versões mais recentes do Windows.

Para obter informações sobre os valores desse parâmetro, consulte a descrição da enumeração System.Management.Automation.Runspaces.AuthenticationMechanism no MSDN.

CUIDADO: a autenticação CredSSP (Credential Security Service Provider), na qual as credenciais do usuário são passadas para um computador remoto para serem autenticadas, foi projetada para comandos que exigem autenticação em mais de um recurso, como acessar um compartilhamento de rede remoto. Esse mecanismo aumenta o risco de segurança da operação remota. Se o computador remoto estiver comprometido, as credenciais passadas para ele poderão ser usadas para controlar a sessão de rede.

Necessário?

false

Posição?

named

Valor padrão

Aceitar entrada do pipeline?

false

Aceitar caracteres curinga?

false

-Credential <PSCredential>

Especifica uma conta de usuário com permissão para executar essa ação. O padrão é o usuário atual.

Digite um nome de usuário, como "User01" ou "Domain01\User01" ou insira um objeto PSCredential, como aquele do cmdlet Get-Credential.

Necessário?

false

Posição?

named

Valor padrão

Usuário atual

Aceitar entrada do pipeline?

false

Aceitar caracteres curinga?

false

-FilePath <string>

Executa o script local especificado como um trabalho em segundo plano. Insira o caminho e o nome de arquivo do script ou canalize um caminho de script para Start-Job. O script deve residir no computador local ou em um diretório que o computador local possa acessar.

Quando você usa esse parâmetro, o Windows PowerShell converte o conteúdo do arquivo de script especificado em um bloco de scripts e executa o bloco de scripts como um trabalho em segundo plano.

Necessário?

false

Posição?

1

Valor padrão

Aceitar entrada do pipeline?

false

Aceitar caracteres curinga?

false

-InitializationScript <scriptblock>

Especifica comandos que são executados antes do início do trabalho. Coloque o comando entre chaves ( { } ) para criar um bloco de scripts.

Use esse parâmetro para preparar a sessão na qual o trabalho é executado. Por exemplo, você pode usá-lo para adicionar funções, snap-ins e módulos à sessão.

Necessário?

false

Posição?

2

Valor padrão

Nenhum

Aceitar entrada do pipeline?

false

Aceitar caracteres curinga?

false

-InputObject <psobject>

Especifica a entrada para o comando. Insira uma variável que contenha os objetos, ou digite um comando ou expressão que gere os objetos.

No valor do parâmetro ScriptBlock, use a variável automática $input para representar os objetos de entrada.

Necessário?

false

Posição?

named

Valor padrão

Aceitar entrada do pipeline?

true (ByValue)

Aceitar caracteres curinga?

false

-Name <string>

Especifica um nome amigável para o novo trabalho. Você pode usar o nome para identificar o trabalho para outros cmdlets de trabalho, como Stop-Job.

O nome amigável padrão é Job#, em que "#" é um número ordinal que é incrementado para cada trabalho.

Necessário?

false

Posição?

named

Valor padrão

Job<número>

Aceitar entrada do pipeline?

true (ByPropertyName)

Aceitar caracteres curinga?

false

-RunAs32

Executa o trabalho em um processo de 32 bits.

Use esse parâmetro para forçar a execução do trabalho em um processo de 32 bits em um sistema operacional de 64 bits.

Necessário?

false

Posição?

named

Valor padrão

False

Aceitar entrada do pipeline?

false

Aceitar caracteres curinga?

false

-ScriptBlock <scriptblock>

Especifica os comandos a serem executados no trabalho em segundo plano. Coloque o comando entre chaves ( { } ) para criar um bloco de scripts. Esse parâmetro é obrigatório.

Necessário?

true

Posição?

1

Valor padrão

Aceitar entrada do pipeline?

false

Aceitar caracteres curinga?

false

<CommonParameters>

Esse cmdlet oferece suporte aos parâmetros comuns: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer e -OutVariable. Para obter mais informações, consulte about_Commonparameters.

Entradas e saídas

O tipo de entrada é o tipo dos objetos que você pode canalizar para o cmdlet. O tipo de retorno é o tipo dos objetos que o cmdlet retorna.

Entradas

System.String

É possível canalizar um caminho de arquivo para Start-Job.

Saídas

System.Management.Automation.RemotingJob

Start-Job retorna um objeto que representa o trabalho que é iniciado.

Observações

Para executar em segundo plano, Start-Job executa sua própria sessão dentro da sessão atual. Quando você usa o cmdlet Invoke-Command para executar um comando Start-Job em uma sessão de um computador remoto, Start-Job é executado em uma sessão dentro da sessão remota.

Exemplo 1

C:\PS>start-job -scriptblock {get-process}

C:\PS> start-job -command "get-process"

Id    Name  State    HasMoreData  Location   Command
---   ----  -----    -----------  --------   -------
1     Job1  Running  True         localhost  get-process

Descrição
-----------
Esse comando inicia um trabalho em segundo plano que executa um comando Get-Process. O comando retorna um objeto de trabalho com informações sobre o trabalho. O prompt de comando retorna imediatamente de forma que você possa trabalhar na sessão enquanto o trabalho é executado em segundo plano.





Exemplo 2

C:\PS>$jobWRM = invoke-command -computerName (get-content servers.txt) -scriptblock {get-service winrm} -jobname WinRM -throttlelimit 16 -AsJob

Descrição
-----------
Esse comando usa o cmdlet Invoke-Command e seu parâmetro AsJob para iniciar um trabalho em segundo plano que executa um comando "get-service winrm" em vários computadores. Como o comando está sendo executado em um servidor com tráfego de rede significativo, o comando usa o parâmetro ThrottleLimit de Invoke-Command para limitar o número de comandos simultâneos a 16. 

O comando usa o parâmetro ComputerName para especificar os computadores nos quais o trabalho é executado. O valor do parâmetro ComputerName é um comando Get-Content que obtém o texto no arquivo Servers.txt, um arquivo de nomes de computadores em um domínio. 

O comando usa o parâmetro ScriptBlock para especificar o comando e o parâmetro JobName para especificar um nome amigável para o trabalho.





Exemplo 3

C:\PS>$j = start-job -scriptblock {get-eventlog -log system} -credential domain01\user01

C:\PS> $j | format-list -property *

HasMoreData   : True
StatusMessage :
Location      : localhost
Command       : get-eventlog -log system
JobStateInfo  : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : 2d9d775f-63e0-4d48-b4bc-c05d0e177f34
Id            : 1
Name          : Job1
ChildJobs     : {Job2}
Output        : {}
Error         : {}
Progress      : {}
Verbose       : {}
Debug         : {}
Warning       : {}
StateChanged  :

C:\PS> $j.JobStateInfo.state
Completed

C:\PS> $results = receive-job -job $j

C:\PS> $results
Index Time          Type        Source                EventID Message
----- ----          ----        ------                ------- -------
84366 Feb 18 19:20  Information Service Control M...     7036 The description...
84365 Feb 18 19:16  Information Service Control M...     7036 The description...
84364 Feb 18 19:10  Information Service Control M...     7036 The description...
...

Descrição
-----------
Esses comandos gerenciam um trabalho em segundo plano que obtém todos os eventos do log do sistema no Visualizador de Eventos. O trabalho é executado no computador local.

O primeiro comando usa o cmdlet Start-Job para iniciar o trabalho. Ele usa o parâmetro Credential para especificar a conta de um usuário que tem permissão de executar o trabalho no computador. Em seguida, ele salva o objeto de trabalho que Start-Job retorna na variável $j.

Nesse momento, você pode continuar sua outra atividade enquanto o trabalho é concluído.

O segundo comando usa um operador de pipeline (|) para transmitir o objeto de trabalho em $j para o cmdlet Format-List. O comando Format-List usa o parâmetro Property com um valor igual a all (*) para exibir todas as propriedades do objeto de trabalho em uma lista.

O terceiro comando exibe o valor da propriedade JobStateInfo. Ele contém o status do trabalho.

O quarto comando utiliza o cmdlet Receive-Job para obter os resultados do trabalho. Ele armazena os resultados na variável $results.

O comando final exibe o conteúdo da variável $results.





Exemplo 4

C:\PS>start-job -filepath c:\scripts\sample.ps1

Descrição
-----------
Esse comando executa o script Sample.ps1 como um trabalho em segundo plano.





Exemplo 5

C:\PS>start-job -name WinRm -scriptblock {get-process winrm}

Descrição
-----------
Esse comando executa um trabalho em segundo plano que obtém o processo WinRM no computador local. O comando usa o parâmetro ScriptBlock para especificar o comando executado em segundo plano. Ele usa o parâmetro Name para especificar um nome amigável para o novo trabalho.





Exemplo 6

C:\PS>start-job -name GetMappingFiles -initializationScript {import-module MapFunctions} -scriptblock {Get-Map -name * | set-content D:\Maps.tif} -runAs32

Descrição
-----------
Esse comando inicia um trabalho que coleta uma grande quantidade de dados e salva-os em um arquivo .tif. O comando usa o parâmetro InitializationScript para executar um bloco de script que importa um módulo necessário. Ele também usa o parâmetro RunAs32 para executar o trabalho em um processo de 32 bits, mesmo que o computador tenha um sistema operacional de 64 bits.





Consulte também

Conceitos

about_Jobs
about_Job_Details
about_Remote_Jobs
Get-Job
Receive-Job
Wait-Job
Stop-Job
Remove-Job
Invoke-Command