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


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

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

-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