Invoke-Expression
Spouští příkazy nebo výrazy v místním počítači.
Syntaxe
Invoke-Expression
[-Command] <String>
[<CommonParameters>]
Description
Rutina Invoke-Expression
vyhodnotí nebo spustí zadaný řetězec jako příkaz a vrátí výsledky výrazu nebo příkazu. Bez Invoke-Expression
, řetězec odeslaný na příkazovém řádku se vrátí (echoed) beze změny.
Výrazy se vyhodnocují a spouští v aktuálním oboru. Další informace najdete v tématu about_Scopes.
Upozornění
Při použití rutiny Invoke-Expression
ve skriptech proveďte rozumná opatření. Při použití Invoke-Expression
ke spuštění příkazu, který uživatel zadá, ověřte, zda je příkaz před spuštěním bezpečný. Obecně je nejlepší navrhnout skript s předdefinovanými možnostmi zadávání, a nikoli povolit volný vstup.
Příklady
Příklad 1: Vyhodnocení výrazu
$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
...
Tento příklad ukazuje použití Invoke-Expression
k vyhodnocení výrazu. Bez Invoke-Expression
výrazu se vytiskne, ale nevyhodnotí se.
První příkaz přiřadí proměnné hodnotu Get-Process
(řetězec $Command
).
Druhý příkaz ukazuje účinek zadávání názvu proměnné na příkazovém řádku. PowerShell vyzve řetězec.
Třetí příkaz používá Invoke-Expression
k vyhodnocení řetězce.
Příklad 2: Spuštění skriptu v místním počítači
Invoke-Expression -Command "C:\ps-test\testscript.ps1"
"C:\ps-test\testscript.ps1" | Invoke-Expression
Tyto příkazy slouží Invoke-Expression
ke spuštění skriptu TestScript.ps1 v místním počítači. Oba příkazy jsou ekvivalentní. První použije parametr Command k určení příkazu, který se má spustit.
Druhý používá operátor kanálu (|
) k odeslání příkazového řetězce do Invoke-Expression
.
Příklad 3: Spuštění příkazu v proměnné
$Command = 'Get-Process | where {$_.cpu -gt 1000}'
Invoke-Expression $Command
Tento příklad spustí příkazový řetězec, který je uložen v $Command
proměnné.
Řetězec příkazu je uzavřený v jednoduchých uvozovkách, protože obsahuje proměnnou, $_
která představuje aktuální objekt. Pokud by byla uzavřena do dvojitých uvozovek, $_
proměnná by byla nahrazena její hodnotou před uložením $Command
do proměnné.
Příklad 4: Získání a spuštění příkladu nápovědy rutiny
$Cmdlet_name = "Get-ComputerInfo"
$Example_number = 1
$Example_code = (Get-Help $Cmdlet_name).examples.example[($Example_number-1)].code
Invoke-Expression $Example_code
Tento příkaz načte a spustí první příklad v Get-EventLog
tématu nápovědy rutiny.
Pokud chcete spustit příklad jiné rutiny, změňte hodnotu $Cmdlet_name
proměnné na název rutiny. A změňte proměnnou $Example_number
na ukázkové číslo, které chcete spustit. Příkaz selže, pokud není číslo příkladu platné.
Poznámka:
Pokud ukázkový kód ze souboru nápovědy obsahuje výstup v příkladu, PowerShell se pokusí spustit výstup společně s kódem a vyvolá se chyba.
Parametry
-Command
Určuje příkaz nebo výraz, který se má spustit. Zadejte příkaz nebo výraz nebo zadejte proměnnou, která obsahuje příkaz nebo výraz. Parametr Command je povinný.
Typ: | String |
Position: | 0 |
Default value: | None |
Vyžadováno: | True |
Přijmout vstup kanálu: | True |
Přijmout zástupné znaky: | False |
Vstupy
Řetězec představující výraz, který se má vyvolat pro tuto rutinu, můžete volat řetězec. $Input
Pomocí automatické proměnné můžete znázorňovat vstupní objekty v příkazu.
Objekt představující výraz, který se má vyvolat pro tuto rutinu, můžete nasouvat svisle. $Input
Pomocí automatické proměnné můžete znázorňovat vstupní objekty v příkazu.
Výstupy
None
Tato rutina nevrací žádný vlastní výstup, ale vyvolaný příkaz může vrátit výstup.
Poznámky
PowerShell obsahuje následující aliasy pro Invoke-Expression
:
- Všechny platformy:
iex
Ve většině případů vyvoláte výrazy pomocí operátoru volání PowerShellu a dosáhnete stejných výsledků. Operátor volání je bezpečnější metoda. Další informace najdete v tématu about_Operators.