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-EventLog"
$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
переменную на число примера, который требуется запустить. Команда завершается ошибкой, если пример номера недопустим.
Параметры
-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.