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


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 является обязательным.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

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

String

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

PSObject

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

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

None

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

Примечания

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

  • Для всех платформ.
    • iex

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