about_PowerShell_exe
Краткое описание
Объясняет, как использовать интерфейс командной powershell.exe
строки. Отображает параметры командной строки и описывает синтаксис.
Подробное описание
Сведения о параметрах командной строки для PowerShell 7 см. в about_Pwsh.
SYNTAX
PowerShell[.exe]
[-PSConsoleFile <file> | -Version <version>]
[-NoLogo]
[-NoExit]
[-Sta]
[-Mta]
[-NoProfile]
[-NonInteractive]
[-InputFormat {Text | XML}]
[-OutputFormat {Text | XML}]
[-WindowStyle <style>]
[-EncodedArguments <Base64EncodedArguments>]
[-EncodedCommand <Base64EncodedCommand>]
[-ConfigurationName <string>]
[-File - | <filePath> <args>]
[-ExecutionPolicy <ExecutionPolicy>]
[-Command - | { <script-block> [-args <arg-array>] }
| { <string> [<CommandParameters>] } ]
PowerShell[.exe] -Help | -? | /?
Параметры
Все параметры не учитывает регистр.
-File — | <filePath><args>
Значение файла может быть -
или файловый путь, а также необязательные параметры. Если значение файла равно -
, команды считываются из стандартных входных данных.
Если значение файла представляет собой файловый путь, скрипт выполняется в локальной области ("dot-sourced") нового сеанса, чтобы функции и переменные, создаваемые скриптом, были доступны в этом новом сеансе. Введите путь к файлу скрипта и все параметры. Файл должен быть последним параметром команды. Все значения, типизированные после параметра File , интерпретируются как файловый путь скрипта и параметры, передаваемые в этот скрипт. Например: -File .\Get-Script.ps1 -Domain Central
Обычно параметры-переключатели сценария включаются или опускаются.
Например, следующая команда использует параметр All файла скрипта Get-Script.ps1
: -File .\Get-Script.ps1 -All
В редких случаях может потребоваться указать логическое значение для параметра.
Невозможно передать явное логическое значение для параметра switch при выполнении скрипта таким образом. Это ограничение было удалено в PowerShell 6 (pwsh.exe
).
Передаваемые в скрипт параметры имеют вид строк литералов (после интерпретации текущей оболочкой). Например, если вы находитесь cmd.exe
и хотите передать значение переменной среды, используйте cmd.exe
синтаксис: powershell.exe -File .\test.ps1 -TestParam %windir%
В отличие от этого, выполнение powershell.exe -File .\test.ps1 -TestParam $env:windir
cmd.exe
в результате в скрипте получает литеральную строку $env:windir
, так как она не имеет особого значения для текущей cmd.exe
оболочки. Стиль $env:windir
ссылки на переменную среды можно использовать внутри параметра Command , так как он интерпретируется как код PowerShell.
Аналогичным образом, если вы хотите выполнить ту же команду из скрипта пакетной службы, вы будете использовать %~dp0
вместо .\
него или $PSScriptRoot
представить текущий каталог выполнения: pwsh -File %~dp0test.ps1 -TestParam %windir%
Если вы используете .\test.ps1
вместо этого, PowerShell выдает ошибку, так как не удается найти литеральный путь .\test.ps1
Примечание.
Параметр File не может поддерживать скрипты с помощью параметра, который ожидает массив значений аргументов. К сожалению, это ограничение того, как собственная команда получает значения аргументов. При вызове собственного исполняемого файла (например powershell
, или pwsh
) он не знает, что делать с массивом, поэтому он передается в виде строки.
Если значение файла равно -
, команды считываются из стандартных входных данных.
Выполнение powershell -File -
без перенаправленных стандартных входных данных запускает обычный сеанс. Это то же самое, что и не указание File
параметра вообще. При чтении из стандартного ввода входные инструкции выполняются по одному оператору за раз, как если бы они были вводимы в командной строке PowerShell. Если оператор не правильно анализируется, инструкция не выполняется. Код выхода процесса определяется состоянием последней (выполненной) команды. При успешном выполнении код выхода всегда 0
равен. Когда файл скрипта завершается с exit
помощью команды, код выхода процесса задается числовым аргументом, используемым с командой exit
.
-Command
Как и при возникновении ошибки завершения скрипта, код выхода имеет значение 1
. Однако в отличие от -Command
того, когда выполнение прерывается с помощью ctrl+C, код выхода имеет значение .0
Дополнительные сведения см $LASTEXITCODE
. в about_Automatic_Variables.
-Command
Значение команды может быть-
, блок скрипта или строка. Если значение команды равно -
, текст команды считывается из стандартных входных данных.
Параметр Command принимает только блок скрипта для выполнения, если он может распознать значение, переданное команде в качестве типа ScriptBlock . Это возможно только при запуске powershell.exe
из другого узла PowerShell. Тип ScriptBlock может содержаться в существующей переменной, возвращаемой из выражения, или анализироваться узлом PowerShell как блок литерального скрипта, заключенный в фигурные скобки ({}
), перед передачей в powershell.exe
.
powershell -Command {Get-WinEvent -LogName security}
В cmd.exe
ней отсутствует такая вещь, как блок скрипта (или тип ScriptBlock), поэтому значение, переданное команде, всегда является строкой. Вы можете написать блок скрипта внутри строки, но вместо выполнения он ведет себя точно так же, как если бы вы ввели его в типичном запросе PowerShell, распечатав содержимое блока скрипта обратно.
Строка, передаваемая команде , по-прежнему выполняется как код PowerShell, поэтому блок скрипта фигурные скобки часто не требуются в первую очередь при запуске из cmd.exe
. Чтобы выполнить встроенный блок скрипта, определенный внутри строки, можно использовать оператор &
вызова:
powershell.exe -Command "& {Get-WinEvent -LogName security}"
Если значение команды является строкой, команда должна быть последним параметром pwsh, так как все аргументы после него интерпретируются как часть выполняемой команды.
При вызове из существующего сеанса PowerShell результаты возвращаются в родительскую оболочку как десериализированные XML-объекты, а не динамические объекты. Для других оболочки результаты возвращаются в виде строк.
Если значение команды равно -
, команды считываются из стандартных входных данных. При использовании параметра command с стандартными входными данными необходимо перенаправить стандартные входные данные. Например:
@'
"in"
"hi" |
% { "$_ there" }
"out"
'@ | powershell -NoProfile -Command -
В примере получается следующий вывод.
in
hi there
out
При чтении из стандартных входных данных входные данные анализируются и выполняются один оператор за раз, как будто они были вводимы в командной строке PowerShell. Если входной код не правильно анализируется, инструкция не выполняется. Если вы не используете -NoExit
этот параметр, сеанс PowerShell завершает работу, если нет дополнительных входных данных для чтения из стандартных входных данных.
Код выхода процесса определяется состоянием последней (выполненной) команды в входных данных. Код выхода находится 0
в том случае, если $?
это $true
или 1
когда $?
есть $false
. Если последняя команда является внешней программой или скриптом PowerShell, который явно задает код выхода, отличный 0
от или 1
, этот код выхода преобразуется в 1
код выхода процесса. Аналогичным образом, значение 1 возвращается при ошибке завершения скрипта (завершающегося пространством выполнения), например или throw
-ErrorAction Stop
при прерывании выполнения с помощью CTRL+C.
Чтобы сохранить конкретный код выхода, добавьте exit $LASTEXITCODE
в командную строку или блок скрипта. Дополнительные сведения см $LASTEXITCODE
. в about_Automatic_Variables.
-ConfigurationName <string>
Указывает конечную точку конфигурации, в которой выполняется PowerShell. Это может быть любая конечная точка, зарегистрированная на локальном компьютере, включая конечные точки удаленного взаимодействия PowerShell по умолчанию или пользовательскую конечную точку с определенными возможностями роли пользователя.
-EncodedArguments Base64EncodedArguments <>
Принимает аргументы строковых команд в кодировке Base64. Используйте этот параметр для отправки аргументов, требующих сложного вложенного кавыка. Представление Base64 должно быть строкой в кодировке UTF-16LE.
-EncodedCommand Base64EncodedCommand <>
Принимает строковую версию команды в кодировке Base 64. Используйте этот параметр для отправки в PowerShell команд, требующих сложных кавычек или фигурных скобок. Строка должна быть отформатирована с помощью кодировки символов UTF-16LE.
-ExecutionPolicy ExecutionPolicy <>
Задает политику выполнения по умолчанию для текущего сеанса и сохраняет ее в переменной $env:PSExecutionPolicyPreference
среды. Этот параметр не изменяет политику выполнения PowerShell, установленную в реестре. Дополнительные сведения о политиках выполнения PowerShell, включая список допустимых значений, см. в статье about_Execution_Policies.
-InputFormat {Text | XML}
Описывает формат данных, отправляемых в PowerShell. Допустимые значения: Text
(текстовые строки) или XML
(сериализованный формат CLIXML).
-Mta
Запускает PowerShell с использованием многопотокового подразделения. Этот параметр впервые появился в PowerShell 3.0. В PowerShell 2.0 по умолчанию используется многопотоковое подразделение (MTA). В PowerShell 3.0 по умолчанию используется однопотоковое подразделение (STA).
-NoExit
Не завершает работу после выполнения команд запуска.
-NonInteractive
Этот параметр используется для создания сеансов, которые не должны требовать ввода пользователем. Это полезно для сценариев, выполняемых в запланированных задачах или конвейерах CI/CD. Любые попытки использовать интерактивные функции, такие как Read-Host
или запросы подтверждения, приводят к прекращению ошибок инструкции, а не зависания.
-NoLogo
Скрывает баннер авторских прав при запуске программы.
-NoProfile
Не загружает профиль PowerShell.
-OutputFormat {Text | XML}
Определяет формат выходных данных PowerShell. Допустимые значения: Text
(текстовые строки) или XML
(сериализованный формат CLIXML).
-PSConsoleFile <FilePath>
Загружает указанный файл консоли PowerShell. Введите путь и имя файла консоли. Для создания файла консоли используйте командлет Export-Console в PowerShell.
-Sta
Запускает PowerShell с использованием многопотокового подразделения. В Windows PowerShell 2.0 по умолчанию используется многопотоковое подразделение (MTA). В Windows PowerShell 3.0 по умолчанию используется однопотоковое подразделение (STA).
-Версия PowerShell версии <>
Запускает заданную версию PowerShell. Допустимые значения: 2.0 и 3.0. Указанная версия должна быть установлена в системе. Если Windows PowerShell 3.0 установлен на компьютере, версия по умолчанию — 3.0. В противном случае версия 2.0 — это версия по умолчанию. Дополнительную информацию см. в разделе Установка PowerShell.
-Стиль окна WindowStyle <>
Задает стиль окна для сеанса. Допустимые значения: Normal
, Minimized
, Maximized
и Hidden
.
-Help, -?, /?
Отображает справку.PowerShell.exe
Если вы вводите PowerShell.exe
команду в сеансе PowerShell, добавьте параметры команды с дефисом (-
), а не косой чертой (/
). Вы можете использовать дефис или косую черту.cmd.exe
ПРИМЕЧАНИЯ
Примечание по устранению неполадок. В PowerShell 2.0 запуск некоторых программ из консоли PowerShell завершается сбоем с помощью LastExitCode 0xc0000142.
Примеры
# Create a new PowerShell session and load a saved console file
PowerShell -PSConsoleFile sqlsnapin.psc1
# Create a new PowerShell V2 session with text input, XML output, and no logo
PowerShell -Version 2.0 -NoLogo -InputFormat text -OutputFormat XML
# Execute a PowerShell Command in a session
PowerShell -Command "Get-EventLog -LogName security"
# Run a script block in a session
PowerShell -Command {Get-EventLog -LogName security}
# An alternate way to run a command in a new session
PowerShell -Command "& {Get-EventLog -LogName security}"
# To use the -EncodedCommand parameter:
$command = "dir 'c:\program files' "
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
powershell.exe -encodedCommand $encodedCommand
PowerShell