Поделиться через


Invoke-Expression

Выполняет команды или выражения на локальном компьютере.

Синтаксис

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на локальном компьютере. Две команды эквивалентны. Первый использует параметр команды, чтобы указать команду для выполнения. Второй использует оператор конвейера (|) для отправки командной строки в 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

Указывает команду или выражение для выполнения. Введите команду или выражение или введите переменную, содержащую команду или выражение. Требуется параметр команды.

Тип:String
Position:0
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

Входные данные

String

Можно передать строку, представляющую выражение для вызова этого командлета. Используйте $Input автоматическую переменную для представления входных объектов в команде.

PSObject

Объект, представляющий выражение для вызова этого командлета. Используйте $Input автоматическую переменную для представления входных объектов в команде.

Выходные данные

None

Этот командлет не возвращает собственные выходные данные, но вызываемая команда может возвращать выходные данные.

Примечания

PowerShell включает следующие псевдонимы для Invoke-Expression:

  • Все платформы:
    • iex

В большинстве случаев вы вызываете выражения с помощью оператора вызова PowerShell и достигает тех же результатов. Оператор вызова является более безопасным методом. Дополнительные сведения см. в разделе about_Operators.