Invoke-Expression

Ejecuta comandos o expresiones en el equipo local.

Syntax

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 .

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

Entradas

String

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 .

PSObject

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.