Invoke-Expression
Runs commands or expressions on the local computer.
Syntax
Default (Default)
Invoke-Expression
[-Command] <String>
[<CommonParameters>]
Description
The Invoke-Expression cmdlet evaluates or runs a specified string as a command and returns the results of the expression or command. Without Invoke-Expression, a string submitted at the command line would be returned (echoed) unchanged.
Examples
Example 1
PS> $command = "Get-Process"
PS> $command
Get-Process
PS> 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
...
This example demonstrates the use of Invoke-Expression to evaluate an expression. Without Invoke-Expression, the expression is printed, but not evaluated.
The first command assigns a value of "Get-Process" (a string) to the $command variable.
The second command shows the effect of typing the variable name at the command line. Windows PowerShell echoes the string.
The third command uses Invoke-Expression to evaluate the string.
Example 2
Invoke-Expression -Command "C:\ps-test\testscript.ps1"
"C:\ps-test\testscript.ps1" | invoke-expression
These commands use Invoke-Expression to run a script, TestScript.ps1, on the local computer. The two commands are equivalent. The first uses the Command parameter to specify the command to run. The second uses a pipeline operator (|) to send the command string to Invoke-Expression.
Example 3
$Command = 'Get-Process | where {$_.cpu -gt 1000}'
Invoke-Expression $Command
This example runs a command string that is saved in the $Command variable.
The command string is enclosed in single quotation marks because it includes a variable, $_, which represents the current object.
If it were enclosed in double quotation marks, the $_ variable would be replaced by its value before it was saved in the $Command variable.
Example 4
$cmdlet_name = "get-eventlog"
$example_number = 1
$example_code = (Get-Help $cmdlet_name).examples.example[($example_number-1)].code
Invoke-Expression $example_code
This command retrieves and runs the first example in the Get-EventLog cmdlet help topic.
To run an example of a different cmdlet, change the value of the $cmdlet_name variable to the name of the cmdlet. And, change the $example_number variable to the example number you want to run. The command will fail if the example number is not valid.
Parameters
-Command
Specifies the command or expression to run. Type the command or expression or enter a variable that contains the command or expression. The Command parameter is required.
Parameter properties
| Type: | String |
| Default value: | None |
| Supports wildcards: | False |
| DontShow: | False |
Parameter sets
(All)
| Position: | 1 |
| Mandatory: | True |
| Value from pipeline: | True |
| Value from pipeline by property name: | False |
| Value from remaining arguments: | False |
CommonParameters
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction, and -WarningVariable. For more information, see about_CommonParameters.
Inputs
System.String or PSObject
You can pipe an object that represents the command to Invoke-Expression. Use the $input automatic variable to represent the input objects in the command.
Outputs
PSObject
Returns the output that is generated by the invoked command (the value of the Command parameter).
Notes
-
An expression is a statement that can be evaluated and produces a result, such as a Windows PowerShell command.
Take reasonable precautions when using the Invoke-Expression cmdlet in scripts. When using Invoke-Expression to run a command that the user enters, verify that the command is safe to run before running it.