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 | -? | /?

Параметры

-Command

Выполняет указанные команды (и все параметры), как будто они были вводимы в командной строке PowerShell, а затем завершает работу, если NoExit параметр не указан.

Значение команды может быть-, блок скрипта или строка. Если значение команды равно -, текст команды считывается из стандартных входных данных.

Параметр 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

Код выхода процесса определяется состоянием последней (выполненной) команды в блоке скрипта. Код выхода находится 0 в том случае, если $? это $true или 1 когда $? есть $false. Если последняя команда является внешней программой или скриптом PowerShell, который явно задает код выхода, отличный 0 от или 1, этот код выхода преобразуется в 1 код выхода процесса. Чтобы сохранить конкретный код выхода, добавьте exit $LASTEXITCODE в командную строку или блок скрипта.

Дополнительные сведения см $LASTEXITCODE . в about_Automatic_Variables.

Аналогичным образом, значение 1 возвращается при ошибке завершения скрипта (завершающегося пространством выполнения), например или throw-ErrorAction Stopпри прерывании выполнения с помощью CTRL+C.

-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.

-File — | <Filepath><Args>

Если значение файла равно-, текст команды считывается из стандартных входных данных. Выполнение powershell -File - без перенаправленных стандартных входных данных запускает обычный сеанс. Это то же самое, что и не указание параметра File вообще.

Если значение filepath является файлом, скрипт запускается в локальной область ("dot-sourced") нового сеанса, чтобы функции и переменные, создаваемые скриптом, были доступны в этом новом сеансе. Введите путь к файлу скрипта и все параметры. File должен быть последним параметром в команде. Все значения, типизированные после параметра File , интерпретируются как файловый путь скрипта и параметры, передаваемые в этот скрипт.

Передаваемые в скрипт параметры имеют вид строк литералов (после интерпретации текущей оболочкой). Например, если вы находитесь в 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 представить текущий каталог выполнения: powershell.exe -File %~dp0test.ps1 -TestParam %windir% Если вы вместо этого использовали .\test.ps1, PowerShell вызовет ошибку, так как не удается найти литеральный путь .\test.ps1

Если значение filepath является файлом, файлдолжен быть последним параметром команды, так как все символы, типизированные после имени параметра файла файла, интерпретируются как путь к файлу скрипта, за которым следуют параметры скрипта.

Параметры и значения скрипта можно включить в значение параметра File . Например: -File .\Get-Script.ps1 -Domain Central

Обычно параметры-переключатели сценария включаются или опускаются. Например, следующая команда использует параметр All файла скрипта Get-Script.ps1 : -File .\Get-Script.ps1 -All

В редких случаях может потребоваться указать логическое значение для параметра. Невозможно передать явное логическое значение для параметра switch при выполнении скрипта таким образом. Это ограничение было удалено в PowerShell 6 (pwsh.exe).

Примечание.

Параметр File не может поддерживать скрипты с помощью параметра, который ожидает массив значений аргументов. К сожалению, это ограничение того, как собственная команда получает значения аргументов. При вызове собственного исполняемого файла (например powershell , или pwsh) он не знает, что делать с массивом, поэтому он передается в виде строки.

Когда файл скрипта завершается с exit помощью команды, код выхода процесса задается числовым аргументом, используемым с командой exit . При обычном завершении код выхода всегда 0.

Дополнительные сведения см $LASTEXITCODE . в about_Automatic_Variables.

-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 или запросы подтверждения, приводят к прекращению ошибок инструкции, а не зависания.

Скрывает баннер авторских прав при запуске программы.

-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