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-Expression
returneras 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-Expression
skrivs 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.
Kommentar
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.
Typ: | String |
Position: | 0 |
Standardvärde: | None |
Obligatorisk: | True |
Godkänn pipeline-indata: | True |
Godkänn jokertecken: | False |
Indata
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.
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
Windows PowerShell innehåller följande alias för Invoke-Expression
:
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.