Invoke-Expression
Voert opdrachten of expressies uit op de lokale computer.
Syntaxis
Invoke-Expression
[-Command] <String>
[<CommonParameters>]
Description
De Invoke-Expression
cmdlet evalueert of voert een opgegeven tekenreeks uit als een opdracht en retourneert de resultaten van de expressie of opdracht. Zonder Invoke-Expression
wordt een tekenreeks die is verzonden op de opdrachtregel, ongewijzigd geretourneerd (echoed).
Expressies worden geëvalueerd en uitgevoerd in het huidige bereik. Zie about_Scopesvoor meer informatie.
Voorzichtigheid
Neem redelijke voorzorgsmaatregelen bij het gebruik van de Invoke-Expression
cmdlet in scripts. Wanneer u Invoke-Expression
gebruikt om een opdracht uit te voeren die de gebruiker invoert, controleert u of de opdracht veilig kan worden uitgevoerd voordat u deze uitvoert. Over het algemeen is het raadzaam om uw script te ontwerpen met vooraf gedefinieerde invoeropties, in plaats van vrije-vorminvoer toe te staan.
Voorbeelden
Voorbeeld 1: Een expressie evalueren
$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
...
In dit voorbeeld ziet u het gebruik van Invoke-Expression
om een expressie te evalueren. Zonder Invoke-Expression
wordt de expressie afgedrukt, maar niet geëvalueerd.
Met de eerste opdracht wordt een waarde van Get-Process
(een tekenreeks) toegewezen aan de $Command
variabele.
De tweede opdracht toont het effect van het typen van de naam van de variabele op de opdrachtregel. PowerShell echot de tekenreeks.
De derde opdracht gebruikt Invoke-Expression
om de tekenreeks te evalueren.
Voorbeeld 2: Een script uitvoeren op de lokale computer
Invoke-Expression -Command "C:\ps-test\testscript.ps1"
"C:\ps-test\testscript.ps1" | Invoke-Expression
Deze opdrachten gebruiken Invoke-Expression
om een script, TestScript.ps1, uit te voeren op de lokale computer. De twee opdrachten zijn equivalent. De eerste maakt gebruik van de parameter Command om de opdracht op te geven die moet worden uitgevoerd.
De tweede maakt gebruik van een pijplijnoperator (|
) om de opdrachttekenreeks naar Invoke-Expression
te verzenden.
Voorbeeld 3: Een opdracht uitvoeren in een variabele
$Command = 'Get-Process | where {$_.cpu -gt 1000}'
Invoke-Expression $Command
In dit voorbeeld wordt een opdrachtreeks uitgevoerd die is opgeslagen in de variabele $Command
.
De opdrachtreeks staat tussen enkele aanhalingstekens omdat deze een variabele bevat, $_
, die het huidige object vertegenwoordigt. Als deze tussen dubbele aanhalingstekens staat, wordt de variabele $_
vervangen door de waarde voordat deze werd opgeslagen in de $Command
variabele.
Voorbeeld 4: Een Help-voorbeeld voor cmdlets ophalen en uitvoeren
$Cmdlet_name = "Get-ComputerInfo"
$Example_number = 1
$Example_code = (Get-Help $Cmdlet_name).examples.example[($Example_number-1)].code
Invoke-Expression $Example_code
Met deze opdracht wordt het eerste voorbeeld opgehaald en uitgevoerd in het Help-onderwerp van de Get-EventLog
cmdlet.
Als u een voorbeeld van een andere cmdlet wilt uitvoeren, wijzigt u de waarde van de variabele $Cmdlet_name
in de naam van de cmdlet. En wijzig de $Example_number
variabele in het voorbeeldnummer dat u wilt uitvoeren. De opdracht mislukt als het voorbeeldnummer ongeldig is.
Notitie
Als de voorbeeldcode uit het Help-bestand uitvoer in het voorbeeld bevat, probeert PowerShell de uitvoer uit te voeren, samen met de code en wordt er een fout gegenereerd.
Parameters
-Command
Hiermee geeft u de opdracht of expressie die moet worden uitgevoerd. Typ de opdracht of expressie of voer een variabele in die de opdracht of expressie bevat. De parameter Command is vereist.
Type: | String |
Position: | 0 |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | False |
Invoerwaarden
U kunt een tekenreeks doorsluisen die de expressie aanroept naar deze cmdlet. Gebruik de $Input
automatische variabele om de invoerobjecten in de opdracht weer te geven.
U kunt een object doorsluisen dat de expressie aanroept naar deze cmdlet. Gebruik de $Input
automatische variabele om de invoerobjecten in de opdracht weer te geven.
Uitvoerwaarden
None
Deze cmdlet retourneert geen eigen uitvoer, maar de aangeroepen opdracht kan uitvoer retourneren.
Notities
PowerShell bevat de volgende aliassen voor Invoke-Expression
:
- Alle platforms:
iex
In de meeste gevallen roept u expressies aan met behulp van de aanroepoperator van PowerShell en krijgt u dezelfde resultaten. De aanroepoperator is een veiligere methode. Zie about_Operatorsvoor meer informatie.