Compartilhar via


Start-Process

Inicia um ou mais processos no computador local.

Syntax

Start-Process
     [-FilePath] <String>
     [[-ArgumentList] <String[]>]
     [-Credential <PSCredential>]
     [-WorkingDirectory <String>]
     [-LoadUserProfile]
     [-NoNewWindow]
     [-PassThru]
     [-RedirectStandardError <String>]
     [-RedirectStandardInput <String>]
     [-RedirectStandardOutput <String>]
     [-WindowStyle <ProcessWindowStyle>]
     [-Wait]
     [-UseNewEnvironment]
     [-WhatIf]
     [-Confirm]
     [<CommonParameters>]
Start-Process
     [-FilePath] <String>
     [[-ArgumentList] <String[]>]
     [-WorkingDirectory <String>]
     [-PassThru]
     [-Verb <String>]
     [-WindowStyle <ProcessWindowStyle>]
     [-Wait]
     [-WhatIf]
     [-Confirm]
     [<CommonParameters>]

Description

O Start-Process cmdlet inicia um ou mais processos no computador local. Por padrão, Start-Process cria um novo processo que herda todas as variáveis de ambiente definidas no processo atual.

Para especificar o programa que é executado no processo, insira um arquivo executável ou arquivo de script, ou um arquivo que pode ser aberto usando um programa no computador. Se você especificar um arquivo não executável, Start-Process iniciará o programa associado ao arquivo, semelhante ao Invoke-Item cmdlet .

Você pode usar os parâmetros de Start-Process para especificar opções, como carregar um perfil de usuário, iniciar o processo em uma nova janela ou usar credenciais alternativas.

Exemplos

Exemplo 1: iniciar um processo que usa valores padrão

Este exemplo inicia um processo que usa o Sort.exe arquivo na pasta atual. O comando usa todos os valores padrão, incluindo o estilo de janela padrão, a pasta de trabalho e as credenciais.

Start-Process -FilePath "sort.exe"

Exemplo 2: Imprimir um arquivo de texto

Este exemplo inicia um processo que imprime o C:\PS-Test\MyFile.txt arquivo.

Start-Process -FilePath "myfile.txt" -WorkingDirectory "C:\PS-Test" -Verb Print

Exemplo 3: iniciar um processo para classificar itens em um novo arquivo

Este exemplo inicia um processo que classifica os itens no Testsort.txt arquivo e retorna os itens classificados nos Sorted.txt arquivos. Todos os erros são gravados no SortError.txt arquivo. O parâmetro UseNewEnvironment especifica que o processo é executado com suas próprias variáveis de ambiente.

$processOptions = @{
    FilePath = "sort.exe"
    RedirectStandardInput = "TestSort.txt"
    RedirectStandardOutput = "Sorted.txt"
    RedirectStandardError = "SortError.txt"
    UseNewEnvironment = $true
}
Start-Process @processOptions

Este exemplo usa o splatting para passar parâmetros para o cmdlet . Para obter mais informações, consulte about_Splatting.

Exemplo 4: Iniciar um processo em uma janela maximizada

Este exemplo inicia o Notepad.exe processo. Ele maximiza a janela e mantém a janela até que o processo seja concluído.

Start-Process -FilePath "notepad" -Wait -WindowStyle Maximized

Exemplo 5: Iniciar o PowerShell como administrador

Este exemplo inicia o PowerShell usando a opção Executar como administrador .

Start-Process -FilePath "powershell" -Verb RunAs

Exemplo 6: Usando verbos diferentes para iniciar um processo

Este exemplo mostra como localizar os verbos que podem ser usados ao iniciar um processo. Os verbos disponíveis são determinados pela extensão de nome de arquivo do arquivo que é executado no processo.

$startExe = New-Object System.Diagnostics.ProcessStartInfo -Args PowerShell.exe
$startExe.verbs

open
runas
runasuser

O exemplo usa New-Object para criar um objeto System.Diagnostics.ProcessStartInfo para PowerShell.exe, o arquivo executado no processo do PowerShell. A propriedade Verbos do objeto ProcessStartInfo mostra que você pode usar os verbos Open e RunAs com PowerShell.exeou com qualquer processo que execute um .exe arquivo.

Exemplo 7: Especificando argumentos para o processo

Ambos os comandos iniciam o interpretador de comandos do Windows, emitindo um dir comando na Program Files pasta . Como esse nome de pasta contém um espaço, o valor precisa estar entre aspas de escape. Observe que o primeiro comando especifica uma cadeia de caracteres como ArgumentList. O segundo comando é uma matriz de cadeia de caracteres.

Start-Process -FilePath "$env:comspec" -ArgumentList "/c dir `"%systemdrive%\program files`""
Start-Process -FilePath "$env:comspec" -ArgumentList "/c","dir","`"%systemdrive%\program files`""

Exemplo 8: Create um processo desanexado no Linux

No Windows, Start-Process cria um processo independente que permanece em execução independentemente do shell de inicialização. Em plataformas não Windows, o processo recém-iniciado é anexado ao shell que foi iniciado. Se o shell de inicialização for fechado, o processo filho será encerrado.

Para evitar encerrar o processo filho em plataformas semelhantes ao Unix, você pode combinar Start-Process com nohup. O exemplo a seguir inicia uma instância em segundo plano do PowerShell no Linux que permanece ativa mesmo depois que você fecha a sessão de inicialização. O nohup comando coleta a saída no arquivo nohup.out no diretório atual.

# Runs for 2 minutes and appends output to ./nohup.out
Start-Process nohup 'pwsh -noprofile -c "1..120 | % { Write-Host . -NoNewline; sleep 1 }"'

Neste exemplo, Start-Process está executando o comando do Linux nohup , que é iniciado como um processo desanexado pwsh . Para obter mais informações, consulte a página man para nohup.

Parâmetros

-ArgumentList

Especifica parâmetros ou valores de parâmetro a serem usados quando esse cmdlet iniciar o processo. Os argumentos podem ser aceitos como uma única cadeia de caracteres com os argumentos separados por espaços ou como uma matriz de cadeias de caracteres separadas por vírgulas. O cmdlet une a matriz em uma única cadeia de caracteres com cada elemento da matriz separado por um único espaço.

As aspas externas das cadeias de caracteres do PowerShell não são incluídas quando os valores ArgumentList são passados para o novo processo. Se parâmetros ou valores de parâmetro contiverem um espaço ou aspas, eles precisarão estar entre aspas duplas com escape. Para obter mais informações, consulte about_Quoting_Rules.

Para obter os melhores resultados, use um único valor ArgumentList contendo todos os argumentos e quaisquer caracteres de aspas necessários.

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

-Confirm

Solicita sua confirmação antes de executar o cmdlet.

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

-Credential

Especifica uma conta de usuário que tem permissão para executar esta ação. Por padrão, o cmdlet usa as credenciais do usuário atual.

Digite um nome de usuário, como User01 ou Domain01\User01, ou insira um objeto PSCredential gerado pelo Get-Credential cmdlet . Se você digitar um nome de usuário, será solicitado que você insira a senha.

As credenciais são armazenadas em um objeto PSCredential e a senha é armazenada como uma SecureString.

Observação

Para obter mais informações sobre a proteção de dados SecureString , consulte Quão seguro é SecureString?.

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

-FilePath

Especifica o caminho opcional e o nome do arquivo do programa que é executado no processo. Insira o nome de um arquivo executável ou de um documento, como um .txt arquivo ou .doc associado a um programa no computador. Este parâmetro é necessário.

Se você especificar apenas um nome de arquivo, use o parâmetro WorkingDirectory para especificar o caminho.

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

-LoadUserProfile

Indica que esse cmdlet carrega o perfil de usuário do Windows armazenado na chave do HKEY_USERS Registro do usuário atual. O parâmetro não se aplica a sistemas não Windows.

Esse parâmetro não afeta os perfis do PowerShell. Para obter mais informações, consulte about_Profiles.

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

-NoNewWindow

Inicie o novo processo na janela do console atual. Por padrão, no Windows, o PowerShell abre uma nova janela. Em sistemas não Windows, você nunca obtém uma nova janela.

Não é possível usar os parâmetros NoNewWindow e WindowStyle no mesmo comando.

O parâmetro não se aplica a sistemas não Windows.

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

-PassThru

Retorna um objeto de processo para cada processo que o cmdlet iniciou. Por padrão, este cmdlet não gera saída.

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

-RedirectStandardError

Especifica um arquivo. Esse cmdlet envia todos os erros gerados pelo processo para um arquivo que você especificar. Insira o caminho e o nome do arquivo. Por padrão, os erros são exibidos no console.

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

-RedirectStandardInput

Especifica um arquivo. Esse cmdlet lê a entrada do arquivo especificado. Insira o caminho e o nome do arquivo de entrada. Por padrão, o processo obtém sua entrada do teclado.

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

-RedirectStandardOutput

Especifica um arquivo. Esse cmdlet envia a saída gerada pelo processo para um arquivo que você especificar. Insira o caminho e o nome do arquivo. Por padrão, a saída é exibida no console.

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

-UseNewEnvironment

Indica que esse cmdlet usa novas variáveis de ambiente especificadas para o processo. Por padrão, o processo iniciado é executado com as variáveis de ambiente herdadas do processo pai.

No Windows, quando você usa UseNewEnvironment, o novo processo começa a conter apenas as variáveis de ambiente padrão definidas para o escopo do Computador . Isso tem o efeito lateral de que o $env:USERNAME está definido como SYSTEM. Nenhuma das variáveis do escopo usuário está incluída.

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

-Verb

Especifica um verbo a ser usado quando este cmdlet inicia o processo. Os verbos disponíveis são determinados pela extensão de nome de arquivo do arquivo executado no processo.

A tabela a seguir mostra os verbos para alguns tipos de arquivos comuns do processo.

Tipo de arquivo Verbos
.cmd Editar, Abrir, Imprimir, ExecutarAs, RunAsUser
.exe Open, RunAs, RunAsUser
.txt Abrir, Imprimir, ImprimirPara
.wav Abrir, Reproduzir

Para localizar os verbos que podem ser usados com o arquivo executado em um processo, use o New-Object cmdlet para criar um objeto System.Diagnostics.ProcessStartInfo para o arquivo. Os verbos disponíveis estão na propriedade Verbs do objeto ProcessStartInfo . Para obter detalhes, consulte os exemplos.

O parâmetro não se aplica a sistemas não Windows.

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

-Wait

Indica que esse cmdlet aguarda o processo especificado e seus descendentes serem concluídos antes de aceitar mais entradas. Esse parâmetro suprime o prompt de comando ou retém a janela até que os processos sejam concluídos.

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

-WhatIf

Mostra o que aconteceria se o cmdlet fosse executado. O cmdlet não é executado.

Esse parâmetro foi introduzido no PowerShell 6.0.

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

-WindowStyle

Especifica o estado da janela que é usada para o novo processo. Os valores aceitáveis para esse parâmetro são: Normal, Oculto, Minimizado e Maximizado. O valor padrão é Normal.

Não é possível usar os parâmetros WindowStyle e NoNewWindow no mesmo comando.

O parâmetro não se aplica a sistemas não Windows. Ao usar em sistemas não Windows, você nunca obtém uma nova janela.

Type:ProcessWindowStyle
Accepted values:Normal, Hidden, Minimized, Maximized
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WorkingDirectory

Especifica o local em que o novo processo deve começar. O padrão é o local do arquivo executável ou documento que está sendo iniciado. Não há suporte para caracteres curinga. O nome do caminho não deve conter caracteres que seriam interpretados como curingas.

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

Entradas

None

Não é possível redirecionar a entrada para este cmdlet.

Saídas

None, System.Diagnostics.Process

Esse cmdlet gerará um objeto System.Diagnostics.Process se você especificar o parâmetro PassThru . Caso contrário, este cmdlet não retorna nenhuma saída.

Observações

Por padrão, Start-Process inicia um processo de forma assíncrona. O controle é retornado instantaneamente ao PowerShell mesmo que o novo processo ainda esteja em execução.

  • No sistema local, o processo iniciado continua independentemente do processo de chamada.
  • Em um sistema remoto, o novo processo é encerrado quando a sessão remota termina, imediatamente após o Start-Process comando . Portanto, você não pode usar Start-Process em uma sessão remota esperando que o processo iniciado sobreviva à sessão.

Se você precisar usar Start-Process em uma sessão remota, invoque-a com o parâmetro Wait . Ou você pode usar outros métodos para criar um novo processo no sistema remoto.

Ao usar o parâmetro Wait , Start-Process aguarda a saída da árvore de processo (o processo e todos os seus descendentes) antes de retornar o controle. Isso é diferente do comportamento do Wait-Process cmdlet , que aguarda apenas a saída dos processos especificados.

No Windows, o caso de uso mais comum para Start-Process é usar o parâmetro Wait para bloquear o progresso até que o novo processo seja encerrado. No sistema não Windows, isso raramente é necessário, pois o comportamento padrão para aplicativos de linha de comando é equivalente a Start-Process -Wait.

Esse cmdlet é implementado usando o método Start da classe System.Diagnostics.Process . Para obter mais informações sobre esse método, consulte Método Process.Start.