Invoke-Expression

Kör kommandon eller uttryck på den lokala datorn.

Syntax

Invoke-Expression
      [-Command] <String>
      [<CommonParameters>]

Description

Cmdleten Invoke-Expression utvärderar eller kör en angiven sträng som ett kommando och returnerar resultatet av uttrycket eller kommandot. Utan Invoke-Expressionreturneras en sträng som skickas på kommandoraden (ekon) oförändrad.

Uttryck utvärderas och körs i det aktuella omfånget. Mer information finns i about_Scopes.

Varning

Vidta rimliga försiktighetsåtgärder när du använder cmdleten Invoke-Expression i skript. När du använder Invoke-Expression för att köra ett kommando som användaren anger kontrollerar du att kommandot är säkert att köra innan du kör det. I allmänhet är det bäst att utforma skriptet med fördefinierade indataalternativ i stället för att tillåta freeform-indata.

Exempel

Exempel 1: Utvärdera ett uttryck

$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
...

Det här exemplet visar användningen av Invoke-Expression för att utvärdera ett uttryck. Utan Invoke-Expressionskrivs uttrycket ut, men utvärderas inte.

Det första kommandot tilldelar variabeln Get-Process värdet (en sträng).$Command

Det andra kommandot visar effekten av att skriva variabelnamnet på kommandoraden. PowerShell ekar strängen.

Det tredje kommandot använder Invoke-Expression för att utvärdera strängen.

Exempel 2: Kör ett skript på den lokala datorn

Invoke-Expression -Command "C:\ps-test\testscript.ps1"
"C:\ps-test\testscript.ps1" | Invoke-Expression

Dessa kommandon använder Invoke-Expression för att köra ett skript, TestScript.ps1, på den lokala datorn. De två kommandona är likvärdiga. Den första använder kommandoparametern för att ange kommandot som ska köras. Den andra använder en pipelineoperator (|) för att skicka kommandosträngen till Invoke-Expression.

Exempel 3: Kör ett kommando i en variabel

$Command = 'Get-Process | where {$_.cpu -gt 1000}'
Invoke-Expression $Command

Det här exemplet kör en kommandosträng som sparas i variabeln $Command .

Kommandosträngen omges av enkla citattecken eftersom den innehåller en variabel, $_, som representerar det aktuella objektet. Om den omges av dubbla citattecken skulle variabeln $_ ersättas med dess värde innan den sparades i variabeln $Command .

Exempel 4: Hämta och kör ett cmdlet-hjälpexempel

$Cmdlet_name = "Get-ComputerInfo"
$Example_number = 1
$Example_code = (Get-Help $Cmdlet_name).examples.example[($Example_number-1)].code
Invoke-Expression $Example_code

Det här kommandot hämtar och kör det första exemplet i cmdlet-hjälpavsnittet Get-EventLog .

Om du vill köra ett exempel på en annan cmdlet ändrar du värdet för variabeln $Cmdlet_name till namnet på cmdleten. Och ändra variabeln $Example_number till det exempelnummer som du vill köra. Kommandot misslyckas om exempelnumret inte är giltigt.

Anteckning

Om exempelkoden från hjälpfilen har utdata i exemplet försöker PowerShell köra utdata tillsammans med koden och ett fel utlöses.

Parametrar

-Command

Anger vilket kommando eller uttryck som ska köras. Skriv kommandot eller uttrycket eller ange en variabel som innehåller kommandot eller uttrycket. Kommandoparametern krävs.

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

Indata

System.String or PSObject

Du kan skicka ett objekt som representerar kommandot till Invoke-Expression. Använd den $Input automatiska variabeln för att representera indataobjekten i kommandot.

Utdata

PSObject

Returnerar utdata som genereras av det anropade kommandot (värdet för kommandoparametern ).

Kommentarer

I de flesta fall anropar du uttryck med hjälp av PowerShells anropsoperator och uppnår samma resultat. Samtalsoperatorn är en säkrare metod. Mer information finns i about_Operators.