Выполняет команды или выражения на локальном компьютере.
Синтаксис
Invoke-Expression [-Command] <string> [<CommonParameters>]
Описание
Командлет Invoke-Expression обрабатывает или выполняет заданную строку в качестве команды и возвращает результаты выражения или команды. Без командлета Invoke-Expression строка, переданная в командную строку, будет возвращена без изменений.
Параметры
-Command <string>
Задает команду или выражение для выполнения. Введите команду или выражение или введите переменную, которая содержит команду или выражение. Параметр Command является обязательным.
Обязательно? |
true |
Позиция? |
1 |
Значение по умолчанию |
|
Принимать входные данные из конвейера? |
true (ByValue) |
Принимать подстановочные знаки? |
false |
<CommonParameters>
Данный командлет поддерживает общие параметры -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer и -OutVariable. Дополнительные сведения см. в разделе about_Commonparameters.
Ввод и вывод
Входным типом является тип объектов, которые можно передавать командлету по конвейеру. Возвращаемым типом является тип объектов, возвращаемых командлетом.
Входные данные |
System.String или PSObject Объект, представляющий команду, можно передать командлету Invoke-Expression с помощью конвейера. Для представления входных объектов команды следует использовать автоматическую переменную $input. |
Выходные данные |
PSObject Возвращает результат, созданный вызванной командой (значением параметра Command). |
Примечания
-- Выражение является инструкцией, которую можно обработать, чтобы получить результат, например командой Windows PowerShell.
-- При использовании командлета Invoke-Expression в скриптах необходимо принять соответствующие меры предосторожности. Если с помощью командлета Invoke-Expression выполняется команда, параметры которой задает пользователь, следует предварительно убедиться, что команда безопасна. В общем случае рекомендуется задавать параметры команд на этапе разработки скрипта, а не разрешать ввод этих параметров в свободной форме.
Пример 1
C:\PS>$command = "Get-Process" C:\PS> $command Get-Process C:\PS> 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 ... Описание ----------- В этом примере показано использование командлета Invoke-Expression для вычисления выражения. Без указания Invoke-Expression выражение выводится на экран, но не обрабатывается. Первая команда присваивает переменной $command значение "Get-Process" (строка). Вторая команда показывает результат ввода в командной строке имени переменной. Windows PowerShell повторяет эту строку в выводе. Третья команда использует командлет Invoke-Expression для обработки строки.
Пример 2
C:\PS>invoke-expression -command "C:\ps-test\testscript.ps1" C:\PS> "C:\ps-test\testscript.ps1" | invoke-expression Описание ----------- Эти команды используют Invoke-Expression для запуска на локальном компьютере скрипта TestScript.ps1. Две приведенные команды эквивалентны. Первая использует параметр Command для задания команды для выполнения. Во второй команде для передачи командлету Invoke-Expression командной строки используется оператор конвейера (|).
Пример 3
C:\PS>$cmd = 'get-process | where {$_.cpu -gt 1000}' C:\PS> iex $command Описание ----------- В этом примере выполняется командная строка, сохраненная в переменной $cmd. Командная строка заключена в одиночные кавычки, поскольку она включает переменную $_, представляющую текущий объект. Если бы она была заключена в двойные кавычки, перед сохранением команды в строке $command переменная $_ была бы заменена значением.
Пример 4
C:\PS>$cmdlet_name = "get-eventlog" C:\PS> $example_number = 1 C:\PS> $example_code = (get-help $cmdlet_name).examples.example[($example_number-1)].code C:\PS> invoke-expression $example_code Описание ----------- Эта команда извлекает и выполняет первый пример в разделе справки, посвященном командлету Get-EventLog. Чтобы выполнить пример другого командлета, присвойте переменной $cmdlet_name имя командлета. Затем присвойте переменной $example_number номер примера, который требуется выполнить. Если примера с указанным номером не существует, выполнение команды завершится сбоем.