Invoke-Expression (Microsoft.PowerShell.Utility)
Invoke-Expression
- Módulo:
- Microsoft.PowerShell.Utility
Ejecuta comandos o expresiones en la computadora local.
Sintaxis
Invoke-Expression
[-Command] <String>
[<CommonParameters>]Descripción
El cmdlet Invoke-Expression 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 comando se devuelve (se repite) sin cambios.
Las expresiones se evalúan y ejecutan en el ámbito actual. Para obtener más información, consulte about_Scopes.
Precaución
Tome precauciones razonables al utilizar el cmdlet Invoke-Expression en scripts. Cuando utilice Invoke-Expression para ejecutar un comando que ingresa el usuario, verifique que sea seguro ejecutar el comando antes de ejecutarlo. En general, es mejor diseñar su script con opciones de entrada predefinidas, en lugar de permitir entradas de forma libre.
Ejemplos
Ejemplo 1: evaluar 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
...
Este ejemplo demuestra 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 variable $Command.
El segundo comando muestra el efecto de escribir el nombre de la variable en la línea de comando. PowerShell hace eco de la cadena.
El tercer comando usa Invoke-Expression para evaluar la cadena.
Ejemplo 2: ejecutar un script en la computadora local
Invoke-Expression -Command "C:\ps-test\testscript.ps1"
"C:\ps-test\testscript.ps1" | Invoke-ExpressionEstos comandos utilizan Invoke-Expression para ejecutar un script, TestScript.ps1, en la computadora local. Los dos comandos son equivalentes. El primero utiliza el parámetro Command para especificar el comando a ejecutar. El segundo utiliza un operador de canalización (|) para enviar la cadena de comando a Invoke-Expression.
Ejemplo 3: ejecutar un comando en una variable
$Command = 'Get-Process | where {$_.cpu -gt 1000}'
Invoke-Expression $CommandEste ejemplo ejecuta una cadena de comando que se guarda en la variable $Command.
La cadena de comando está entre comillas simples porque incluye una variable, $_, que representa el objeto actual. Si estuviera entre comillas dobles, la variable $_ sería reemplazada por su valor antes de guardarse en la variable $Command.
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_codeEste comando recupera y ejecuta el primer ejemplo del tema de ayuda del cmdlet Get-EventLog.
Para ejecutar un ejemplo de un cmdlet diferente, cambie el valor de la variable $Cmdlet_name por el nombre del cmdlet. Y cambie la variable $Example_number al número de ejemplo que desea ejecutar. El comando falla si el número de ejemplo no es válido.
Nota
Si el código de ejemplo del archivo de ayuda tiene resultados en el ejemplo, PowerShell intenta ejecutar el resultado junto con el código y se generará un error.
Parámetros
-Command
Especifica el comando o expresión que se ejecutará. Escriba el comando o expresión o ingrese una variable que contenga el comando o expresión. El parámetro Comando es obligatorio.
- Tipo :
String
- Posición:
0
- Valor predeterminado:
None
- Requerido:
True
- Aceptar entrada de canalización:
True
- Aceptar caracteres comodín:
False
Entradas
Cadena
Puede canalizar una cadena que represente la expresión que se va a invocar a este cmdlet. Utilice la variable automática $Input para representar los objetos de entrada en el comando.
PSObjeto
Puede canalizar un objeto que represente la expresión que se va a invocar a este cmdlet. Utilice la variable automática $Input para representar los objetos de entrada en el comando.
Salidas
Ninguno
Este cmdlet no devuelve ningún resultado propio, pero el comando invocado puede devolver un resultado.
Notas
PowerShell incluye los siguientes alias para Invoke-Expression:
Todas las plataformas:
iex
En la mayoría de los casos, se invocan expresiones utilizando el operador de llamada de PowerShell y se obtienen los mismos resultados. La llamada al operador es un método más seguro. Para obtener más información, consulte about_Operadores.