Start-Process
Inicia um ou mais processos no computador local.
Sintaxe
Start-Process
[-FilePath] <string>
[[-ArgumentList] <string[]>]
[-Credential <pscredential>]
[-WorkingDirectory <string>]
[-LoadUserProfile]
[-NoNewWindow]
[-PassThru]
[-RedirectStandardError <string>]
[-RedirectStandardInput <string>]
[-RedirectStandardOutput <string>]
[-WindowStyle <ProcessWindowStyle>]
[-Wait]
[-UseNewEnvironment]
[-Environment <hashtable>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
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 executado no processo, insira um arquivo executável ou um arquivo 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 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 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 arquivo 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 para um novo arquivo
Este exemplo inicia um processo que classifica itens no arquivo TestSort.txt
e retorna os itens classificados nos arquivos Sorted.txt
. Todos os 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 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 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 o Abrir e RunAs
verbos com powershell.exe
ou 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 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: Criar 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 que não são do 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 o encerramento do 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 de você fechar a sessão de inicialização. O comando nohup
coleta a saída no nohup.out
de arquivo 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 obter mais informações, consulte o artigo sobre a 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 que a 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
, o 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â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 os parâmetros ou valores de parâmetro contiverem um espaço ou aspas, eles precisarão 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.
Tipo: | String[] |
Aliases: | Args |
Cargo: | 1 |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-Confirm
Solicita a confirmação antes de executar o cmdlet.
Tipo: | SwitchParameter |
Aliases: | cf |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | 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 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 um SecureString.
Nota
Para obter mais informações sobre proteção de dados SecureString, consulte Quão seguro é SecureString?.
Tipo: | PSCredential |
Aliases: | RunAs |
Cargo: | Named |
Valor padrão: | Current user |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-Environment
Especifica uma ou mais variáveis de ambiente a serem substituídas pelo 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 desaconsinar 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 do Computador e do Usuário após o novo valor.
Esse parâmetro foi adicionado no PowerShell 7.4.
Tipo: | Hashtable |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | 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. Esse parâmetro é necessário.
Se você especificar apenas um nome de arquivo que não corresponde a um comando do sistema, use o parâmetro WorkingDirectory para especificar o caminho.
Tipo: | String |
Aliases: | PSPath, Path |
Cargo: | 0 |
Valor padrão: | None |
Obrigatório: | True |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | 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 são do Windows.
Esse parâmetro não afeta os perfis do PowerShell. Para obter mais informações, consulte about_Profiles.
Tipo: | SwitchParameter |
Aliases: | Lup |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | 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.
Você não pode usar os parâmetros NoNewWindow e WindowStyle no mesmo comando.
O parâmetro não se aplica a sistemas que não são do Windows.
Tipo: | SwitchParameter |
Aliases: | nnw |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-PassThru
Retorna um objeto de processo para cada processo iniciado pelo cmdlet. Por padrão, esse cmdlet não gera nenhuma saída.
Tipo: | SwitchParameter |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | 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.
Tipo: | String |
Aliases: | RSE |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | 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.
Tipo: | String |
Aliases: | RSI |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | 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.
Tipo: | String |
Aliases: | RSO |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | 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 apenas contendo as variáveis de ambiente padrão definidas para o escopo Machine. Isso tem o efeito colateral de que o $env:USERNAME
está definido como SYSTEM. Nenhuma das variáveis do escopo de de usuário está incluída.
Tipo: | SwitchParameter |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | 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 de alguns tipos de arquivo de processo comuns.
Tipo de arquivo | 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 executado em um processo, use o cmdlet New-Object
para criar um objeto System.Diagnostics.ProcessStartInfo para o arquivo. Os verbos disponíveis estão na propriedade Verbos do objeto ProcessStartInfo. Para obter detalhes, consulte os exemplos.
O parâmetro não se aplica a sistemas que não são do Windows.
Tipo: | String |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | 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 mantém a janela até que os processos sejam concluídos.
Tipo: | SwitchParameter |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | 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.
Tipo: | SwitchParameter |
Aliases: | wi |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-WindowStyle
Especifica o estado da janela usada para o novo processo. O valor padrão é Normal
.
Os valores aceitáveis para este parâmetro são:
Normal
Hidden
Minimized
Maximized
Você não pode usar os parâmetros WindowStyle e NoNewWindow no mesmo comando.
O parâmetro não se aplica a sistemas que não são do Windows. Ao usar sistemas que não são do Windows, você nunca obtém uma nova janela.
Tipo: | ProcessWindowStyle |
Valores aceitos: | Normal, Hidden, Minimized, Maximized |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-WorkingDirectory
Especifica o local em que o novo processo deve ser iniciado.
Quando não especificado, o cmdlet usa como padrão o local totalmente qualificado especificado no parâmetro FilePath. Se o valor do parâmetro FilePath não for totalmente qualificado, ele usará 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.
Tipo: | String |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
Entradas
None
Você não pode redirecionar objetos para este cmdlet.
Saídas
None
Por padrão, esse cmdlet não retorna nenhuma saída.
Quando você usa o parâmetro PassThru, esse cmdlet retorna um objeto Process.
Observações
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 em 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 de GUI em plataformas não Windows. Por exemplo, execute Start-Process gedit
para iniciar o editor de texto gráfico comum dos ambientes da Área de Trabalho 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 iniciado continua 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 usarStart-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 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. 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.