Partilhar via


Start-Process

Inicia um ou mais processos no computador local.

Sintaxe

UseShellExecute

Start-Process
    [-FilePath] <string>
    [[-ArgumentList] <string[]>]
    [-WorkingDirectory <string>]
    [-PassThru]
    [-Verb <string>]
    [-WindowStyle <ProcessWindowStyle>]
    [-Wait]
    [-Environment <hashtable>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

Description

O cmdlet Start-Process 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 de script ou um arquivo que possa 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 cmdlet Invoke-Item.

Você pode usar os parâmetros do 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 arquivo Sort.exe 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 ficheiro de texto

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

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 arquivo TestSort.txt e retorna os itens classificados nos arquivos Sorted.txt. Quaisquer erros são gravados no arquivo SortError.txt. 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 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 processo de Notepad.exe. Ele maximiza a janela e reté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 encontrar os verbos que podem ser usados ao iniciar um processo. Os verbos disponíveis são determinados pela extensão do nome 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 que é executado no processo do PowerShell. A propriedade Verbs do objeto ProcessStartInfo mostra que você pode usar os verbos Open e RunAs com powershell.exeou com qualquer processo que execute um arquivo .exe.

Exemplo 7: Especificando argumentos para o processo

Ambos os comandos iniciam o interpretador de comandos do Windows, emitindo um comando dir na pasta Program Files. Como esse nome de pasta contém um espaço, o valor precisa ser cercado por aspas com 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: Criar um processo separado no Linux

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

Para evitar encerrar o processo filho em plataformas Unix-like, 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 de fechar a sessão de inicialização. O comando nohup 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 Linux nohup, que inicia pwsh como um processo desanexado. Para mais informações, consulte o artigo nohup na Wikipédia.

Exemplo 9: Substituindo uma variável de ambiente para um processo

Por padrão, quando você usa Start-Process, o novo processo é criado com as mesmas variáveis de ambiente da sessão atual. Você pode usar o parâmetro Environment para substituir os valores dessas variáveis.

Neste exemplo, a variável de ambiente FOO é adicionada à sessão com foo como o valor.

O exemplo é executado Start-Process três vezes, retornando o valor de FOO cada vez. O primeiro comando não substitui a variável de ambiente. No segundo comando, FOO é definido como bar. No terceiro comando, FOO é definido como $null, que o remove.

$Env:FOO = 'foo'
Start-Process pwsh -NoNewWindow -ArgumentList '-c', '$Env:FOO'
Start-Process pwsh -NoNewWindow -ArgumentList '-c', '$Env:FOO' -Environment @{
    FOO  = 'bar'
}
Start-Process pwsh -NoNewWindow -ArgumentList '-c', '$Env:FOO' -Environment @{
    FOO  = $null
}
foo
bar

Parâmetros

-ArgumentList

Especifica parâmetros ou valores de parâmetros a serem usados quando esse cmdlet inicia 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âmetros contiverem um espaço ou aspas, eles precisam ser cercados por 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 todos os caracteres de aspas necessários.

Propriedades dos parâmetros

Tipo:

String[]

Default value:None
Suporta carateres universais:False
NãoMostrar:False
Aliases:Argumentos

Conjuntos de parâmetros

(All)
Position:1
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos:False

-Confirm

Solicita confirmação antes de executar o cmdlet.

Propriedades dos parâmetros

Tipo:SwitchParameter
Default value:None
Suporta carateres universais:False
NãoMostrar:False
Aliases:Cf.

Conjuntos de parâmetros

(All)
Position:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos:False

-Credential

Especifica uma conta de usuário que tem permissão para executar essa 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 cmdlet Get-Credential. Se escrever um nome de utilizador, ser-lhe-á pedido que introduza a palavra-passe.

As credenciais são armazenadas num objeto PSCredential e a palavra-passe é armazenada como uma SecureString.

Observação

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

Propriedades dos parâmetros

Tipo:PSCredential
Default value:Current user
Suporta carateres universais:False
NãoMostrar:False
Aliases:RunAs

Conjuntos de parâmetros

Default
Position:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos:False

-Environment

Especifica uma ou mais variáveis de ambiente para substituir o processo como uma tabela de hash. Especifique o nome de uma variável de ambiente como uma chave na tabela de hash e o valor desejado. Para desdefinir uma variável de ambiente, especifique seu valor como $null.

As variáveis especificadas são substituídas no processo. Quando você especifica a variável de ambiente PATH, ela é substituída pelo valor de $PSHOME seguido pelo valor especificado desse parâmetro. No Windows, o comando acrescenta os valores para PATH nos escopos Máquina e Usuário após o novo valor.

Esse parâmetro foi adicionado no PowerShell 7.4.

Propriedades dos parâmetros

Tipo:Hashtable
Default value:None
Suporta carateres universais:False
NãoMostrar:False

Conjuntos de parâmetros

(All)
Position:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos: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 arquivo .txt ou .doc, associado a um programa no computador. Este parâmetro é obrigatório.

Se você especificar apenas um nome de arquivo que não corresponda a um comando do sistema, use o parâmetro WorkingDirectory para especificar o caminho.

Propriedades dos parâmetros

Tipo:String
Default value:None
Suporta carateres universais:False
NãoMostrar:False
Aliases:PSPath, Caminho

Conjuntos de parâmetros

(All)
Position:0
Obrigatório:True
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos:False

-LoadUserProfile

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

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

Propriedades dos parâmetros

Tipo:SwitchParameter
Default value:None
Suporta carateres universais:False
NãoMostrar:False
Aliases:Lup

Conjuntos de parâmetros

Default
Position:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos:False

-NoNewWindow

Inicie o novo processo na janela do console atual. Por padrão no Windows, o PowerShell abre uma nova janela. Em sistemas que não sejam Windows, você nunca recebe 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 que não sejam Windows.

Propriedades dos parâmetros

Tipo:SwitchParameter
Default value:None
Suporta carateres universais:False
NãoMostrar:False
Aliases:NNW

Conjuntos de parâmetros

Default
Position:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos:False

-PassThru

Retorna um objeto de processo para cada processo iniciado pelo cmdlet. Por padrão, esse cmdlet não gera nenhuma saída.

Propriedades dos parâmetros

Tipo:SwitchParameter
Default value:None
Suporta carateres universais:False
NãoMostrar:False

Conjuntos de parâmetros

(All)
Position:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos:False

-RedirectStandardError

Especifica um arquivo. Este 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.

Propriedades dos parâmetros

Tipo:String
Default value:None
Suporta carateres universais:False
NãoMostrar:False
Aliases:RES

Conjuntos de parâmetros

Default
Position:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos:False

-RedirectStandardInput

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

Propriedades dos parâmetros

Tipo:String
Default value:None
Suporta carateres universais:False
NãoMostrar:False
Aliases:LER

Conjuntos de parâmetros

Default
Position:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos:False

-RedirectStandardOutput

Especifica um arquivo. Este 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.

Propriedades dos parâmetros

Tipo:String
Default value:None
Suporta carateres universais:False
NãoMostrar:False
Aliases:RSO

Conjuntos de parâmetros

Default
Position:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos: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 Machine. Isso tem o efeito colateral de que o $Env:USERNAME está definido para SYSTEM. Nenhuma das variáveis do escopo Usuário está incluída.

Propriedades dos parâmetros

Tipo:SwitchParameter
Default value:None
Suporta carateres universais:False
NãoMostrar:False

Conjuntos de parâmetros

Default
Position:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos:False

-Verb

Especifica um verbo a ser usado quando esse cmdlet iniciar o processo. Os verbos disponíveis são determinados pela extensão do nome do arquivo que é executado no processo.

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

Tipo de ficheiro Verbos
.cmd Edit, Open, Print, RunAs, RunAsUser
.exe Open, RunAs, RunAsUser
.txt Open, Print, PrintTo
.wav Open, Play

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

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

Propriedades dos parâmetros

Tipo:String
Default value:None
Suporta carateres universais:False
NãoMostrar:False

Conjuntos de parâmetros

UseShellExecute
Position:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos:False

-Wait

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

Propriedades dos parâmetros

Tipo:SwitchParameter
Default value:None
Suporta carateres universais:False
NãoMostrar:False

Conjuntos de parâmetros

(All)
Position:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos: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.

Propriedades dos parâmetros

Tipo:SwitchParameter
Default value:None
Suporta carateres universais:False
NãoMostrar:False
Aliases:Wi

Conjuntos de parâmetros

(All)
Position:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos:False

-WindowStyle

Especifica o estado da janela usada para o novo processo. O valor predefinido é Normal. Os valores aceitáveis para este parâmetro são:

  • Normal
  • Hidden
  • Minimized
  • Maximized

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

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

Propriedades dos parâmetros

Tipo:ProcessWindowStyle
Default value:None
Valores aceites:Normal, Hidden, Minimized, Maximized
Suporta carateres universais:False
NãoMostrar:False

Conjuntos de parâmetros

(All)
Position:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos:False

-WorkingDirectory

Especifica o local em que o novo processo deve ser iniciado.

Quando não especificado, o cmdlet assume como padrão o local totalmente qualificado especificado no parâmetro FilePath. Se o valor do parâmetro FilePath não estiver totalmente qualificado, ele assumirá como padrão o diretório de trabalho atual do processo de chamada.

Não há suporte para curingas. O caminho não deve conter caracteres que seriam interpretados como curingas.

Propriedades dos parâmetros

Tipo:String
Default value:None
Suporta carateres universais:False
NãoMostrar:False

Conjuntos de parâmetros

(All)
Position:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos:False

CommonParameters

Este cmdlet suporta os parâmetros comuns: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Para obter mais informações, consulte about_CommonParameters.

Entradas

None

Não é possível canalizar objetos para este cmdlet.

Saídas

None

Por padrão, esse cmdlet não retorna nenhuma saída.

Process

Quando você usa o parâmetro PassThru, esse cmdlet retorna um Process objeto.

Notas

O PowerShell inclui os seguintes aliases para Start-Process:

  • Todas as plataformas
    • saps
  • Windows
    • start

Os comandos nativos são arquivos executáveis instalados no sistema operacional. Esses executáveis podem ser executados a partir de qualquer shell de linha de comando, como o PowerShell. Normalmente, você executa o comando exatamente como faria em bash ou cmd.exe. O cmdlet Start-Process pode ser usado para executar quaisquer comandos nativos, mas só deve ser usado quando você precisar controlar como o comando é executado.

Start-Process é útil para executar programas GUI em plataformas não-Windows. Por exemplo, execute Start-Process gedit para iniciar o editor de texto gráfico comum aos ambientes de desktop do GNOME.

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 lançado vive independente do processo de chamada.
  • Em um sistema remoto, o novo processo é encerrado quando a sessão remota termina, imediatamente após o comando Start-Process. 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-o 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 que a árvore de processo (o processo e todos os seus descendentes) saia antes de retornar o controle. Isso é diferente do comportamento do cmdlet Wait-Process, 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. Em sistemas que não sejam Windows, isso raramente é necessário, pois o comportamento padrão para aplicativos de linha de comando é equivalente a Start-Process -Wait.

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