Start-Process
Inicia uno o varios procesos en el equipo local.
Sintaxis
UseShellExecute
Start-Process
[-FilePath] <string>
[[-ArgumentList] <string[]>]
[-WorkingDirectory <string>]
[-PassThru]
[-Verb <string>]
[-WindowStyle <ProcessWindowStyle>]
[-Wait]
[-Environment <hashtable>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Description
El cmdlet Start-Process inicia uno o varios procesos en el equipo local. De forma predeterminada, Start-Process crea un nuevo proceso que hereda todas las variables de entorno definidas en el proceso actual.
Para especificar el programa que se ejecuta en el proceso, escriba un archivo ejecutable o un archivo de script, o un archivo que se pueda abrir mediante un programa en el equipo. Si especifica un archivo no ejecutable, Start-Process inicia el programa asociado al archivo, similar al cmdlet Invoke-Item.
Puede usar los parámetros de Start-Process para especificar opciones, como cargar un perfil de usuario, iniciar el proceso en una nueva ventana o usar credenciales alternativas.
Ejemplos
Ejemplo 1: Iniciar un proceso que use valores predeterminados
En este ejemplo se inicia un proceso que usa el archivo Sort.exe en la carpeta actual. El comando usa todos los valores predeterminados, incluido el estilo de ventana predeterminado, la carpeta de trabajo y las credenciales.
Start-Process -FilePath "sort.exe"
Ejemplo 2: Imprimir un archivo de texto
En este ejemplo se inicia un proceso que imprime el archivo C:\PS-Test\MyFile.txt.
Start-Process -FilePath "myfile.txt" -WorkingDirectory "C:\PS-Test" -Verb Print
Ejemplo 3: Iniciar un proceso para ordenar elementos a un nuevo archivo
En este ejemplo se inicia un proceso que ordena los elementos del archivo TestSort.txt y devuelve los elementos ordenados en los archivos Sorted.txt. Los errores se escriben en el archivo SortError.txt. El parámetro UseNewEnvironment especifica que el proceso se ejecuta con sus propias variables de entorno.
$processOptions = @{
FilePath = "sort.exe"
RedirectStandardInput = "TestSort.txt"
RedirectStandardOutput = "Sorted.txt"
RedirectStandardError = "SortError.txt"
UseNewEnvironment = $true
}
Start-Process @processOptions
En este ejemplo se usa la expansión para pasar parámetros al cmdlet . Para obtener más información, consulte about_Splatting.
Ejemplo 4: Iniciar un proceso en una ventana maximizada
En este ejemplo se inicia el proceso de Notepad.exe. Maximiza la ventana y conserva la ventana hasta que se completa el proceso.
Start-Process -FilePath "notepad" -Wait -WindowStyle Maximized
Ejemplo 5: Iniciar PowerShell como administrador
En este ejemplo se inicia PowerShell mediante la opción Ejecutar como administrador.
Start-Process -FilePath "powershell" -Verb RunAs
Ejemplo 6: Uso de verbos diferentes para iniciar un proceso
En este ejemplo se muestra cómo buscar los verbos que se pueden usar al iniciar un proceso. Los verbos disponibles están determinados por la extensión de nombre de archivo del archivo que se ejecuta en el proceso.
$startExe = New-Object System.Diagnostics.ProcessStartInfo -Args powershell.exe
$startExe.Verbs
open
runas
runasuser
En el ejemplo se usa New-Object para crear un objeto System.Diagnostics.ProcessStartInfo para powershell.exe, el archivo que se ejecuta en el proceso de PowerShell. La propiedad Verbs del objeto ProcessStartInfo muestra que puede usar el Open y RunAs verbos con powershell.exeo con cualquier proceso que ejecute un archivo .exe.
Ejemplo 7: Especificar argumentos para el proceso
Ambos comandos inician el intérprete de comandos de Windows, emitiendo un comando dir en la carpeta Program Files. Dado que este nombredecarpeta contiene un espacio, el valor necesita rodeado de comillas con escape.
Tenga en cuenta que el primer comando especifica una cadena como ArgumentList. El segundo comando es una matriz de cadenas.
Start-Process -FilePath "$Env:ComSpec" -ArgumentList "/c dir `"%SystemDrive%\Program Files`""
Start-Process -FilePath "$Env:ComSpec" -ArgumentList "/c","dir","`"%SystemDrive%\Program Files`""
Ejemplo 8: Creación de un proceso desasociado en Linux
En Windows, Start-Process crea un proceso independiente que permanece ejecutándose independientemente del shell de inicio. En plataformas que no son de Windows, el proceso recién iniciado se adjunta al shell que se inició. Si se cierra el shell de inicio, se finaliza el proceso secundario.
Para evitar terminar el proceso secundario en plataformas similares a Unix, puede combinar Start-Process con nohup. En el ejemplo siguiente se inicia una instancia en segundo plano de PowerShell en Linux que permanece activa incluso después de cerrar la sesión de inicio. El comando nohup recopila la salida del archivo nohup.out en el directorio actual.
# Runs for 2 minutes and appends output to ./nohup.out
Start-Process nohup 'pwsh -NoProfile -c "1..120 | % { Write-Host . -NoNewline; sleep 1 }"'
En este ejemplo, Start-Process ejecuta el comando nohup de Linux, que inicia pwsh como un proceso desasociado. Para obtener más información, consulte el artículo en Wikipedia.
Ejemplo 9: Invalidación de una variable de entorno para un proceso
De forma predeterminada, cuando se usa Start-Process, el nuevo proceso se crea con las mismas variables de entorno que la sesión actual. Puede usar el parámetro Environment para invalidar los valores de esas variables.
En este ejemplo, la variable de entorno FOO se agrega a la sesión con foo como valor.
El ejemplo se ejecuta Start-Process tres veces y devuelve el valor de FOO cada vez. El primer comando no invalida la variable de entorno. En el segundo comando, FOO se establece en bar. En el tercer comando, FOO se establece en $null, que lo quita.
$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 o valores de parámetro que se van a usar cuando este cmdlet inicia el proceso. Los argumentos se pueden aceptar como una sola cadena con los argumentos separados por espacios o como una matriz de cadenas separadas por comas. El cmdlet combina la matriz en una sola cadena con cada elemento de la matriz separada por un solo espacio.
Las comillas externas de las cadenas de PowerShell no se incluyen cuando los valores ArgumentList se pasan al nuevo proceso. Si los parámetros o los valores de parámetro contienen un espacio o comillas, deben estar rodeados con comillas dobles con escape. Para obtener más información, consulte sobre_las_normas_de_citación.
Para obtener los mejores resultados, use un solo valor ArgumentList que contenga todos los argumentos y los caracteres de comillas necesarios.
Propiedades del parámetro
| Tipo: | String[] |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
| Alias: | Argumentos |
Conjuntos de parámetros
(All)
| Posición: | 1 |
| Mandatory: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-Confirm
Le pide confirmación antes de ejecutar el cmdlet.
Propiedades del parámetro
| Tipo: | SwitchParameter |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
| Alias: | cf |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Mandatory: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-Credential
Especifica una cuenta de usuario que tiene permiso para realizar esta acción. De forma predeterminada, el cmdlet usa las credenciales del usuario actual.
Escriba un nombre de usuario, como User01 o Domain01\User01, o escriba un objeto de PSCredential generado por el cmdlet Get-Credential. Si escribe un nombre de usuario, se le pedirá que escriba la contraseña.
Las credenciales se almacenan en un objeto PSCredential y la contraseña se almacena como SecureString.
Nota:
Para obtener más información sobre la protección de datos de SecureString, consulte ¿Qué tan segura es SecureString?.
Propiedades del parámetro
| Tipo: | PSCredential |
| Valor predeterminado: | Current user |
| Admite caracteres comodín: | False |
| DontShow: | False |
| Alias: | RunAs |
Conjuntos de parámetros
Default
| Posición: | Named |
| Mandatory: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-Environment
Especifica una o varias variables de entorno que se van a invalidar para el proceso como una tabla hash. Especifique el nombre de una variable de entorno como clave en la tabla hash y el valor deseado. Para anular el conjunto de una variable de entorno, especifique su valor como $null.
Las variables especificadas se reemplazan en el proceso. Al especificar la variable de entorno PATH, se reemplaza por el valor de $PSHOME seguido del valor especificado de este parámetro. En Windows, el comando anexa los valores de PATH en los ámbitos Equipo y Usuario después del nuevo valor.
Este parámetro se agregó en PowerShell 7.4.
Propiedades del parámetro
| Tipo: | Hashtable |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Mandatory: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-FilePath
Especifica la ruta de acceso opcional y el nombre de archivo del programa que se ejecuta en el proceso. Escriba el nombre de un archivo ejecutable o de un documento, como un archivo .txt o .doc, asociado a un programa en el equipo. Este parámetro es obligatorio.
Si especifica solo un nombre de archivo que no corresponde a un comando del sistema, use el parámetro WorkingDirectory para especificar la ruta de acceso.
Propiedades del parámetro
| Tipo: | String |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
| Alias: | PSPath, Ruta |
Conjuntos de parámetros
(All)
| Posición: | 0 |
| Mandatory: | True |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-LoadUserProfile
Indica que este cmdlet carga el perfil de usuario de Windows almacenado en la clave del Registro de HKEY_USERS para el usuario actual. El parámetro no se aplica a sistemas que no son de Windows.
Este parámetro no afecta a los perfiles de PowerShell. Para obtener más información, vea about_Profiles.
Propiedades del parámetro
| Tipo: | SwitchParameter |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
| Alias: | Lup |
Conjuntos de parámetros
Default
| Posición: | Named |
| Mandatory: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-NoNewWindow
Inicie el nuevo proceso en la ventana de la consola actual. De forma predeterminada en Windows, PowerShell abre una nueva ventana. En sistemas que no son windows, nunca se obtiene una nueva ventana.
No puede usar los parámetros NoNewWindow y WindowStyle en el mismo comando.
El parámetro no se aplica a sistemas que no son de Windows.
Propiedades del parámetro
| Tipo: | SwitchParameter |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
| Alias: | Nno |
Conjuntos de parámetros
Default
| Posición: | Named |
| Mandatory: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-PassThru
Devuelve un objeto de proceso para cada proceso que inició el cmdlet. De forma predeterminada, este cmdlet no genera ninguna salida.
Propiedades del parámetro
| Tipo: | SwitchParameter |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Mandatory: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-RedirectStandardError
Especifica un archivo. Este cmdlet envía los errores generados por el proceso a un archivo que especifique. Escriba la ruta de acceso y el nombre de archivo. De forma predeterminada, los errores se muestran en la consola.
Propiedades del parámetro
| Tipo: | String |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
| Alias: | RSE |
Conjuntos de parámetros
Default
| Posición: | Named |
| Mandatory: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-RedirectStandardInput
Especifica un archivo. Este cmdlet lee la entrada del archivo especificado. Escriba la ruta de acceso y el nombre de archivo del archivo de entrada. De forma predeterminada, el proceso obtiene su entrada desde el teclado.
Propiedades del parámetro
| Tipo: | String |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
| Alias: | RSI |
Conjuntos de parámetros
Default
| Posición: | Named |
| Mandatory: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-RedirectStandardOutput
Especifica un archivo. Este cmdlet envía la salida generada por el proceso a un archivo que especifique. Escriba la ruta de acceso y el nombre de archivo. De forma predeterminada, la salida se muestra en la consola.
Propiedades del parámetro
| Tipo: | String |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
| Alias: | RSO |
Conjuntos de parámetros
Default
| Posición: | Named |
| Mandatory: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-UseNewEnvironment
Indica que este cmdlet usa nuevas variables de entorno especificadas para el proceso. De forma predeterminada, el proceso iniciado se ejecuta con las variables de entorno heredadas del proceso primario.
En Windows, cuando se usa UseNewEnvironment, el nuevo proceso solo comienza con las variables de entorno predeterminadas definidas para el ámbito de Machine de. Esto tiene el efecto secundario de que el $Env:USERNAME está establecido en SYSTEM. No se incluye ninguna de las variables del ámbito de usuario de.
Propiedades del parámetro
| Tipo: | SwitchParameter |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
Default
| Posición: | Named |
| Mandatory: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-Verb
Especifica un verbo que se va a usar cuando este cmdlet inicia el proceso. Los verbos disponibles están determinados por la extensión de nombre de archivo del archivo que se ejecuta en el proceso.
En la tabla siguiente se muestran los verbos de algunos tipos de archivo de proceso comunes.
| Tipo de archivo | Verbos |
|---|---|
| .cmd |
Edit, Open, Print, , RunAs, RunAsUser |
| .exe |
Open, , RunAs, RunAsUser |
| .txt |
Open, , Print, PrintTo |
| .wav |
Open, Play |
Para buscar los verbos que se pueden usar con el archivo que se ejecuta en un proceso, use el cmdlet New-Object para crear un objeto System.Diagnostics.ProcessStartInfo para el archivo. Los verbos disponibles se encuentran en la propiedad verbs
El parámetro no se aplica a sistemas que no son de Windows.
Propiedades del parámetro
| Tipo: | String |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
UseShellExecute
| Posición: | Named |
| Mandatory: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-Wait
Indica que este cmdlet espera a que se complete el proceso especificado y sus descendientes antes de aceptar más entradas. Este parámetro suprime el símbolo del sistema o conserva la ventana hasta que finalicen los procesos.
Propiedades del parámetro
| Tipo: | SwitchParameter |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Mandatory: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-WhatIf
Muestra lo que sucedería si el cmdlet se ejecuta. El cmdlet no se ejecuta.
Este parámetro se introdujo en PowerShell 6.0.
Propiedades del parámetro
| Tipo: | SwitchParameter |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
| Alias: | Wi |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Mandatory: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-WindowStyle
Especifica el estado de la ventana que se usa para el nuevo proceso. El valor predeterminado es Normal.
Los valores aceptables para este parámetro son:
NormalHiddenMinimizedMaximized
No puede usar los parámetros WindowStyle y NoNewWindow en el mismo comando.
El parámetro no se aplica a sistemas que no son de Windows. Cuando se usa en sistemas que no son windows, nunca se obtiene una nueva ventana.
Propiedades del parámetro
| Tipo: | ProcessWindowStyle |
| Valor predeterminado: | None |
| Valores aceptados: | Normal, Hidden, Minimized, Maximized |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Mandatory: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-WorkingDirectory
Especifica la ubicación en la que debe iniciarse el nuevo proceso.
Cuando no se especifica, el cmdlet tiene como valor predeterminado la ubicación completa especificada en el parámetro FilePath. Si el valor del parámetro FilePath no está completo, el valor predeterminado es el directorio de trabajo actual del proceso de llamada.
No se admiten los caracteres comodín. La ruta de acceso no debe contener caracteres que se interpretarían como caracteres comodín.
Propiedades del parámetro
| Tipo: | String |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Mandatory: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
CommonParameters
Este cmdlet admite los parámetros comunes: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction y -WarningVariable. Para obtener más información, vea about_CommonParameters.
Entradas
None
No se pueden canalizar objetos a este cmdlet.
Salidas
None
De forma predeterminada, este cmdlet no devuelve ninguna salida.
Process
Cuando se usa el parámetro PassThru, este cmdlet devuelve un objeto Process.
Notas
PowerShell incluye los siguientes alias para Start-Process:
- Todas las plataformas
saps
- Windows
start
Los comandos nativos son archivos ejecutables instalados en el sistema operativo. Estos ejecutables se pueden ejecutar desde cualquier shell de línea de comandos, como PowerShell. Normalmente, ejecuta el comando exactamente como lo haría en bash o cmd.exe. El cmdlet Start-Process se puede usar para ejecutar cualquier comando nativo, pero solo debe usarse cuando necesite controlar cómo se ejecuta el comando.
Start-Process es útil para ejecutar programas de GUI en plataformas que no son de Windows. Por ejemplo, ejecute Start-Process gedit para iniciar el editor gráfico de texto común de los entornos de escritorio GNOME.
De forma predeterminada, Start-Process inicia un proceso de forma asincrónica. El control se devuelve instantáneamente a PowerShell incluso si el nuevo proceso todavía se está ejecutando.
- En el sistema local, el proceso iniciado reside en independiente del proceso de llamada.
- En un sistema remoto, el nuevo proceso finaliza cuando finaliza la sesión remota, inmediatamente después del comando
Start-Process. Por lo tanto, no puede usarStart-Processen una sesión remota que espera que el proceso iniciado pueda sobrevivir a la sesión.
Si necesita usar Start-Process en una sesión remota, invoquelo con el parámetro Wait . O bien, podría usar otros métodos para crear un nuevo proceso en el sistema remoto.
Al usar el parámetro wait , Start-Process espera a que el árbol de procesos (el proceso y todos sus descendientes) salgan antes de devolver el control. Esto es diferente del comportamiento del cmdlet Wait-Process, que solo espera a que se cierren los procesos especificados.
En Windows, el caso de uso más común de Start-Process es usar el parámetro wait para bloquear el progreso hasta que se cierre el nuevo proceso. En el sistema que no es windows, esto rara vez es necesario, ya que el comportamiento predeterminado para las aplicaciones de línea de comandos es equivalente a Start-Process -Wait.
Este cmdlet se implementa mediante el método Start de la clase System.Diagnostics.Process. Para obtener más información sobre este método, vea Método Process.Start.