Поиск по сайту:

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.