Invoke-Expression
Ejecuta comandos o expresiones en el equipo local.
Sintaxis
Invoke-Expression
[-Command] <String>
[<CommonParameters>]
Description
El Invoke-Expression
cmdlet evalúa o ejecuta una cadena especificada como un comando y devuelve los resultados de la expresión o comando. Sin Invoke-Expression
, una cadena enviada en la línea de comandos se devuelve (eco) sin cambios.
Las expresiones se evalúan y se ejecutan en el ámbito actual. Para obtener más información, consulte about_Scopes.
Precaución
Tome precauciones razonables al usar el Invoke-Expression
cmdlet en scripts. Cuando se usa Invoke-Expression
para ejecutar un comando que el usuario escribe, compruebe que el comando es seguro para ejecutarlo antes de ejecutarlo. En general, lo mejor es diseñar el script con opciones de entrada predefinidas, en lugar de permitir la entrada de forma libre.
Ejemplos
Ejemplo 1: Evaluación de una expresión
$Command = "Get-Process"
$Command
Get-Process
Invoke-Expression $Command
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
296 4 1572 1956 20 0.53 1348 AdtAgent
270 6 1328 800 34 0.06 2396 alg
67 2 620 484 20 0.22 716 ati2evxx
1060 15 12904 11840 74 11.48 892 CcmExec
1400 33 25280 37544 223 38.44 2564 communicator
...
En este ejemplo se muestra el uso de Invoke-Expression
para evaluar una expresión. Sin Invoke-Expression
, la expresión se imprime, pero no se evalúa.
El primer comando asigna un valor de Get-Process
(una cadena) a la $Command
variable .
El segundo comando muestra el efecto de escribir el nombre de variable en la línea de comandos. PowerShell devuelve la cadena.
El tercer comando usa Invoke-Expression
para evaluar la cadena.
Ejemplo 2: Ejecución de un script en el equipo local
Invoke-Expression -Command "C:\ps-test\testscript.ps1"
"C:\ps-test\testscript.ps1" | Invoke-Expression
Estos comandos usan Invoke-Expression
para ejecutar un script, TestScript.ps1, en el equipo local. Ambos comandos son equivalentes. El primero usa el parámetro Command para especificar el comando que se va a ejecutar.
El segundo usa un operador de canalización (|
) para enviar la cadena de comandos a Invoke-Expression
.
Ejemplo 3: Ejecutar un comando en una variable
$Command = 'Get-Process | where {$_.cpu -gt 1000}'
Invoke-Expression $Command
En este ejemplo se ejecuta una cadena de comandos que se guarda en la $Command
variable .
La cadena de comando se incluye entre comillas simples porque incluye una variable, $_
, que representa el objeto actual. Si estuviera entre comillas dobles, la $_
variable se reemplazaría por su valor antes de guardarla en la $Command
variable.
Ejemplo 4: Obtener y ejecutar un ejemplo de ayuda de cmdlet
$Cmdlet_name = "Get-ComputerInfo"
$Example_number = 1
$Example_code = (Get-Help $Cmdlet_name).examples.example[($Example_number-1)].code
Invoke-Expression $Example_code
Este comando recupera y ejecuta el primer ejemplo del tema ayuda del Get-EventLog
cmdlet .
Para ejecutar un ejemplo de un cmdlet diferente, cambie el valor de la $Cmdlet_name
variable por el nombre del cmdlet. Además, cambie la $Example_number
variable al número de ejemplo que desea ejecutar. Se produce un error en el comando si el número de ejemplo no es válido.
Nota:
Si el código de ejemplo del archivo de ayuda tiene salida en el ejemplo, PowerShell intenta ejecutar la salida junto con el código y se producirá un error.
Parámetros
-Command
Especifica el comando o la expresión que se va a ejecutar. Escriba el comando o la expresión o especifique una variable que contenga el comando o la expresión. Se requiere el parámetro Command .
Tipo: | String |
Posición: | 0 |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | False |
Entradas
Puede canalizar una cadena que representa la expresión que se va a invocar a este cmdlet. Use la $Input
variable automática para representar los objetos de entrada en el comando .
Puede canalizar un objeto que representa la expresión que se va a invocar a este cmdlet. Use la $Input
variable automática para representar los objetos de entrada en el comando .
Salidas
None
Este cmdlet no devuelve ninguna salida propia, pero el comando invocado puede devolver la salida.
Notas
PowerShell incluye los siguientes alias para Invoke-Expression
:
- Todas las plataformas:
iex
En la mayoría de los casos, se invocan expresiones mediante el operador de llamada de PowerShell y se obtienen los mismos resultados. El operador de llamada es un método más seguro. Para obtener más información, consulte about_Operators.