Dela via


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.

Försiktighet

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 värdet Get-Process (en sträng) till variabeln $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 parametern Command för att ange vilket kommando 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 hjälpavsnittet Get-EventLog cmdlet.

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.

Not

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. Parametern Kommando krävs.

Typ:String
Position:0
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:True
Godkänn jokertecken:False

Indata

String

Du kan skicka en sträng som representerar uttrycket som ska anropas till den här cmdleten. Använd den $Input automatiska variabeln för att representera indataobjekten i kommandot.

PSObject

Du kan skicka ett objekt som representerar uttrycket som ska anropas till den här cmdleten. Använd den $Input automatiska variabeln för att representera indataobjekten i kommandot.

Utdata

None

Den här cmdleten returnerar inga egna utdata, men det anropade kommandot kan returnera utdata.

Kommentarer

PowerShell innehåller följande alias för Invoke-Expression:

  • Alla plattformar:
    • iex

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.