about_PowerShell_exe

Descripción breve

Explica cómo usar la interfaz de powershell.exe la línea de comandos. Muestra los parámetros de la línea de comandos y describe la sintaxis.

Descripción larga

Para obtener información sobre las opciones de línea de comandos para PowerShell 7, consulte about_Pwsh.

SINTAXIS

PowerShell[.exe]
    [-PSConsoleFile <file> | -Version <version>]
    [-NoLogo]
    [-NoExit]
    [-Sta]
    [-Mta]
    [-NoProfile]
    [-NonInteractive]
    [-InputFormat {Text | XML}]
    [-OutputFormat {Text | XML}]
    [-WindowStyle <style>]
    [-EncodedArguments <Base64EncodedArguments>]
    [-EncodedCommand <Base64EncodedCommand>]
    [-ConfigurationName <string>]
    [-File - | <filePath> <args>]
    [-ExecutionPolicy <ExecutionPolicy>]
    [-Command - | { <script-block> [-args <arg-array>] }
                | { <string> [<CommandParameters>] } ]

PowerShell[.exe] -Help | -? | /?

Parámetros

-Command

Ejecuta los comandos especificados (y los parámetros) como si se hubieran escrito en el símbolo del sistema de PowerShell y, a continuación, se cierra, a menos que se especifique el NoExit parámetro.

El valor de Command puede ser -, un bloque de script o una cadena. Si el valor de Command es -, el texto del comando se lee de la entrada estándar.

El parámetro Command solo acepta un bloque de script para su ejecución cuando puede reconocer el valor pasado a Command como un tipo ScriptBlock . Esto solo es posible cuando se ejecuta powershell.exe desde otro host de PowerShell. El tipo ScriptBlock puede estar contenido en una variable existente, devuelta desde una expresión o analizada por el host de PowerShell como un bloque de script literal entre llaves ({}), antes de pasarse a powershell.exe.

powershell -Command {Get-WinEvent -LogName security}

En cmd.exe, no hay nada como un bloque de script (o un tipo ScriptBlock), por lo que el valor pasado a Command siempre será una cadena. Puede escribir un bloque de script dentro de la cadena, pero en lugar de ejecutarse, se comportará exactamente como si lo hubiera escrito en una solicitud de PowerShell típica, devolviéndole los contenidos impresos del bloque de script.

Una cadena pasada a Command se sigue ejecutando como código de PowerShell, por lo que las llaves del bloque de script a menudo no son necesarias en primer lugar cuando se ejecuta desde cmd.exe. Para ejecutar un bloque de script alineado definido dentro de una cadena, se puede usar el operador de llamada&:

powershell.exe -Command "& {Get-WinEvent -LogName security}"

Si el valor de Command es una cadena, Command debe ser el último parámetro para pwsh, ya que todos los argumentos siguientes se interpretan como parte del comando que se va a ejecutar.

Cuando se llama desde una sesión de PowerShell existente, los resultados se devuelven al shell primario como objetos XML deserializados, no objetos dinámicos. Para otros shells, los resultados se devuelven como cadenas.

Si el valor de Command es -, el texto del comando se lee de la entrada estándar. Debe redirigir la entrada estándar al usar el parámetro Command con entrada estándar. Por ejemplo:

@'
"in"

"hi" |
  % { "$_ there" }

"out"
'@ | powershell -NoProfile -Command -

Este ejemplo produce el siguiente resultado:

in
hi there
out

El código de salida del proceso viene determinado por el estado del último comando (ejecutado) dentro del bloque de script. El código de salida es 0 cuando $? es $true o 1 cuando $? es $false. Si el último comando es un programa externo o un script de PowerShell que establece explícitamente un código de salida distinto de 0 o 1, ese código de salida se convierte en 1 para el código de salida del proceso. Para conservar el código de salida específico, agregue exit $LASTEXITCODE a la cadena de comandos o al bloque de script.

Para obtener más información, consulte $LASTEXITCODE en about_Automatic_Variables.

Del mismo modo, el valor 1 se devuelve cuando se produce un error de terminación de script (ejecución de terminación del espacio de ejecución), como o throw-ErrorAction Stop, o cuando se interrumpe la ejecución con Ctrl+C.

-ConfigurationName <string>

Especifica un punto de conexión de configuración en el que se ejecuta PowerShell. Puede ser cualquier punto de conexión registrado en la máquina local, incluidos los puntos de conexión remoto de PowerShell predeterminados o un punto de conexión personalizado que tenga funcionalidades específicas de rol de usuario.

-EncodedArguments Base64EncodedArguments <>

Acepta argumentos de comando de versión de cadena codificados en Base64. Use este parámetro para enviar argumentos que requieren comillas complejas y anidadas. La representación base64 debe ser una cadena codificada con UTF-16LE.

-EncodedCommand <Base64EncodedCommand>

Acepta una versión de cadena con codificación Base 64 de un comando. Use este parámetro para enviar comandos a PowerShell que requieran comillas complejas o llaves. La cadena debe tener formato mediante codificación de caracteres UTF-16LE.

-ExecutionPolicy <ExecutionPolicy>

Establece la directiva de ejecución predeterminada para la sesión actual y la guarda en la variable de $env:PSExecutionPolicyPreference entorno. Este parámetro no cambia la directiva de ejecución de PowerShell establecida en el Registro. Para obtener más información sobre las directivas de ejecución de PowerShell, incluida una lista de los valores válidos, vea about_Execution_Policies.

-File - | <Filepath><Args>

Si el valor de File es -, el texto del comando se lee de la entrada estándar. La ejecución powershell -File - sin la entrada estándar redirigida inicia una sesión normal. Esto es lo mismo que no especificar el parámetro File en absoluto.

Si el valor de File es una ruta de acceso a archivos, el script se ejecuta en el ámbito local ("dot-sourced") de la nueva sesión, de modo que las funciones y variables que crea el script estén disponibles en esa nueva sesión. Escriba la ruta de acceso de archivo de script y los parámetros. File debe ser el último parámetro del comando. Todos los valores que se escriben después del parámetro File se interpretan como la ruta de acceso de archivo de script y los parámetros pasados a ese script.

Los parámetros que se pasan al script lo hacen como cadenas literales (una vez interpretados por el shell actual). Por ejemplo, si está en cmd.exe y desea pasar un valor de variable de entorno, usaría la sintaxis cmd.exe : powershell.exe -File .\test.ps1 -TestParam %windir%

En cambio, la ejecución powershell.exe -File .\test.ps1 -TestParam $env:windir en cmd.exe da como resultado que el script reciba la cadena $env:windir literal porque no tiene ningún significado especial para el shell de cmd.exe actual. El $env:windir estilo de referencia de variable de entorno se puede usar dentro de un parámetro Command , ya que se interpretará como código de PowerShell.

Del mismo modo, si desea ejecutar el mismo comando desde un script de Batch, usaría %~dp0 en lugar de o $PSScriptRoot para representar el directorio de .\ ejecución actual: powershell.exe -File %~dp0test.ps1 -TestParam %windir%. Si en su lugar usa .\test.ps1, PowerShell producirá un error porque no encuentra la ruta de acceso literal. .\test.ps1

Cuando el valor de File es una ruta de acceso a archivos, Filedebe ser el último parámetro del comando porque los caracteres que se escriben después del nombre del parámetro File se interpretan como la ruta de acceso del archivo de script seguida de los parámetros de script.

Puede incluir los parámetros y valores del script en el valor del parámetro File . Por ejemplo: -File .\Get-Script.ps1 -Domain Central

Normalmente, los parámetros de modificador de un script se incluyen o se omiten. Por ejemplo, el siguiente comando usa el parámetro All del Get-Script.ps1 archivo de script: -File .\Get-Script.ps1 -All

En raras ocasiones, es posible que tenga que proporcionar un valor booleano para un parámetro. No es posible pasar un valor booleano explícito para un parámetro switch al ejecutar un script de esta manera. Esta limitación se quitó en PowerShell 6 (pwsh.exe).

Nota:

El parámetro File no puede admitir scripts mediante un parámetro que espera una matriz de valores de argumento. Esto, desafortunadamente, es una limitación de cómo un comando nativo obtiene los valores de argumento. Cuando se llama a un ejecutable nativo (como powershell o pwsh), no sabe qué hacer con una matriz, por lo que se pasa como una cadena.

Cuando el archivo de script finaliza con un exit comando, el código de salida del proceso se establece en el argumento numérico usado con el exit comando . Con la terminación normal, el código de salida siempre 0es .

Para obtener más información, consulte $LASTEXITCODE en about_Automatic_Variables.

-InputFormat {Text | XML}

Describe el formato de los datos que se envían a PowerShell. Los valores válidos son Text (cadenas de texto) o XML (formato CLIXML serializado).

-Mta

Inicia PowerShell con un contenedor multiproceso. Este parámetro se incorporó en PowerShell 3.0. En PowerShell 2.0, el valor predeterminado es el contenedor multiproceso (MTA). En PowerShell 3.0, el valor predeterminado es el contenedor uniproceso (STA).

-NoExit

No se cierra después de ejecutar comandos de inicio.

-NonInteractive

Este modificador se usa para crear sesiones que no deben requerir la entrada del usuario. Esto es útil para los scripts que se ejecutan en tareas programadas o canalizaciones de CI/CD. Cualquier intento de usar características interactivas, como Read-Host o avisos de confirmación, da como resultado errores de terminación de instrucciones en lugar de colgar.

Oculta la pancarta de copyright al inicio.

-NoProfile

No carga el perfil de PowerShell.

-OutputFormat {Text | XML}

Determina cómo se formatea la salida de PowerShell. Los valores válidos son Text (cadenas de texto) o XML (formato CLIXML serializado).

-PSConsoleFile <FilePath>

Carga el archivo de consola de PowerShell especificado. Escriba la ruta de acceso y el nombre del archivo de consola. Para crear un archivo de consola, use el cmdlet Export-Console en PowerShell.

-Sta

Inicia PowerShell con un contenedor uniproceso. En Windows PowerShell 2.0, el valor predeterminado es el contenedor multiproceso (MTA). En Windows PowerShell 3.0, el valor predeterminado es el contenedor uniproceso (STA).

-Versión <de PowerShell>

Inicia la versión especificada de PowerShell. Los valores válidos son 2.0 y 3.0. La versión que especifique debe estar instalada en el sistema. Si Windows PowerShell 3.0 está instalado en el equipo, "3.0" es la versión predeterminada. De lo contrario, "2.0" es la versión predeterminada. Para obtener más información, consulte Instalación de PowerShell.

-Estilo de ventana WindowStyle <>

Establece el estilo de ventana de la sesión. Los valores válidos son Normal, Minimized, Maximized y Hidden.

-Help, -?, /?

Muestra ayuda para PowerShell.exe. Si escribe un PowerShell.exe comando en una sesión de PowerShell, anteponga los parámetros de comando con un guión (-), no una barra diagonal (/). Puede usar un guión o una barra diagonal en cmd.exe.

COMENTARIOS

Nota de solución de problemas: En PowerShell 2.0, al iniciar algunos programas desde la consola de PowerShell se produce un error con un LastExitCode de 0xc0000142.

EJEMPLOS

# Create a new PowerShell session and load a saved console file
PowerShell -PSConsoleFile sqlsnapin.psc1

# Create a new PowerShell V2 session with text input, XML output, and no logo
PowerShell -Version 2.0 -NoLogo -InputFormat text -OutputFormat XML

# Execute a PowerShell Command in a session
PowerShell -Command "Get-EventLog -LogName security"

# Run a script block in a session
PowerShell -Command {Get-EventLog -LogName security}

# An alternate way to run a command in a new session
PowerShell -Command "& {Get-EventLog -LogName security}"

# To use the -EncodedCommand parameter:
$command = "dir 'c:\program files' "
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
powershell.exe -encodedCommand $encodedCommand