Invoke-Expression (Microsoft.PowerShell.Utility)
Invoke-Expression
- Модуль:
- Microsoft.PowerShell.Utility
Запускает команды или выражения на локальном компьютере.
Синтаксис
Invoke-Expression
[-Command] <String>
[<CommonParameters>]Описание
Командлет Invoke-Expression оценивает или запускает указанную строку как команду и возвращает результаты выражения или команды. Без Invoke-Expression строка, отправленная в командную строку, возвращается (отображается) без изменений.
Выражения оцениваются и выполняются в текущей области. Дополнительные сведения см. в разделе about_Scopes.
Осторожность
Примите разумные меры предосторожности при использовании командлета Invoke-Expression в сценариях. При использовании Invoke-Expression для запуска команды, которую вводит пользователь, убедитесь, что команда безопасна для запуска, прежде чем запускать ее. В общем, лучше всего разрабатывать сценарий с предопределенными параметрами ввода, а не с возможностью произвольного ввода.
Примеры
Пример 1. Вычисление выражения
$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
...В этом примере показано использование Invoke-Expression для вычисления выражения. Без Invoke-Expression выражение печатается, но не оценивается.
Первая команда присваивает значение Get-Process (строку) переменной $Command.
Вторая команда показывает эффект ввода имени переменной в командной строке. PowerShell выводит строку.
Третья команда использует Invoke-Expression для оценки строки.
Пример 2. Запуск сценария на локальном компьютере
Invoke-Expression -Command "C:\ps-test\testscript.ps1"
"C:\ps-test\testscript.ps1" | Invoke-ExpressionЭти команды используют Invoke-Expression для запуска сценария TestScript.ps1 на локальном компьютере. Эти две команды эквивалентны. Первый использует параметр Command для указания команды для запуска. Второй использует оператор конвейера (|) для отправки командной строки в Invoke-Expression.
Пример 3. Запуск команды в переменной
$Command = 'Get-Process | where {$_.cpu -gt 1000}'
Invoke-Expression $CommandВ этом примере выполняется командная строка, сохраненная в переменной $Command.
Командная строка заключена в одинарные кавычки, поскольку она включает переменную $_, которая представляет текущий объект. Если бы она была заключена в двойные кавычки, переменная $_ была бы заменена ее значением до ее сохранения в переменной $Command.
Пример 4. Получение и запуск командлета. Пример справки.
$Cmdlet_name = "Get-ComputerInfo"
$Example_number = 1
$Example_code = (Get-Help $Cmdlet_name).examples.example[($Example_number-1)].code
Invoke-Expression $Example_codeЭта команда извлекает и запускает первый пример из раздела справки по командлету Get-EventLog.
Чтобы запустить пример другого командлета, измените значение переменной $Cmdlet_name на имя командлета. И измените переменную $Example_number на номер примера, который вы хотите запустить. Команда не выполняется, если номер примера недействителен.
Примечание
Если в примере кода из файла справки есть выходные данные, PowerShell попытается выполнить выходные данные вместе с кодом, и будет выдано сообщение об ошибке.
Параметры
-Command
Указывает команду или выражение для запуска. Введите команду или выражение или введите переменную, содержащую команду или выражение. Параметр Command является обязательным.
- Тип :
String
- Позиция:
0
- Значение по умолчанию:
None
- Необходимый:
True
- Примите ввод конвейера:
True
- Принимайте подстановочные знаки:
False
Входы
Строка
Вы можете передать строку, представляющую выражение для вызова, в этот командлет. Используйте автоматическую переменную $Input для представления объектов ввода в команде.
PSObject
Вы можете передать объект, представляющий выражение для вызова, в этот командлет. Используйте автоматическую переменную $Input для представления объектов ввода в команде.
Выходы
Нет
Этот командлет не возвращает собственных выходных данных, но вызванная команда может возвращать выходные данные.
Примечания
PowerShell включает следующие псевдонимы для Invoke-Expression:
Все платформы:
iex
В большинстве случаев вы вызываете выражения с помощью оператора вызова PowerShell и достигаете тех же результатов. Оператор вызова является более безопасным методом. Дополнительные сведения см. в разделе about_Operators.