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


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 на локальном компьютере. Команды эквивалентны. Первый использует параметр 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
Position:0
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

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

String

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

PSObject

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

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

None

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

Примечания

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

  • iex

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