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


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

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

System.String or PSObject

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

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

PSObject

Возвращает выходные данные, созданные вызванной командой (значение параметра Command ).

Примечания

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