Поиск по сайту:

Start-Process (Microsoft.PowerShell.Management)


Start-Process

Модуль:
Microsoft.PowerShell.Management

Запускает один или несколько процессов на локальном компьютере.

Синтаксис

Start-Process
     [-FilePath] <string>
     [[-ArgumentList] <string[]>]
     [-Credential <pscredential>]
     [-WorkingDirectory <string>]
     [-LoadUserProfile]
     [-NoNewWindow]
     [-PassThru]
     [-RedirectStandardError <string>]
     [-RedirectStandardInput <string>]
     [-RedirectStandardOutput <string>]
     [-WindowStyle <ProcessWindowStyle>]
     [-Wait]
     [-UseNewEnvironment]
     [-Environment <hashtable>]
     [-WhatIf]
     [-Confirm]
     [<CommonParameters>]
Start-Process
     [-FilePath] <string>
     [[-ArgumentList] <string[]>]
     [-WorkingDirectory <string>]
     [-PassThru]
     [-Verb <string>]
     [-WindowStyle <ProcessWindowStyle>]
     [-Wait]
     [-Environment <hashtable>]
     [-WhatIf]
     [-Confirm]
     [<CommonParameters>]

Описание

Командлет Start-Process запускает один или несколько процессов на локальном компьютере. По умолчанию Start-Process создает новый процесс, который наследует все переменные среды, определенные в текущем процессе.

Чтобы указать программу, которая запускается в процессе, введите исполняемый файл, файл сценария или файл, который можно открыть с помощью программы на компьютере. Если вы укажете неисполняемый файл, Start-Process запустит программу, связанную с этим файлом, аналогично командлету Invoke-Item.

Вы можете использовать параметры Start-Process, чтобы указать такие параметры, как загрузка профиля пользователя, запуск процесса в новом окне или использование альтернативных учетных данных.

Примеры

Пример 1. Запуск процесса, использующего значения по умолчанию.

В этом примере запускается процесс, использующий файл Sort.exe в текущей папке. Команда использует все значения по умолчанию, включая стиль окна по умолчанию, рабочую папку и учетные данные.

Start-Process -FilePath "sort.exe"

Пример 2. Печать текстового файла

В этом примере запускается процесс, который печатает файл C:\PS-Test\MyFile.txt.

Start-Process -FilePath "myfile.txt" -WorkingDirectory "C:\PS-Test" -Verb Print

Пример 3. Запуск процесса сортировки элементов в новый файл

В этом примере запускается процесс, который сортирует элементы в файле TestSort.txt и возвращает отсортированные элементы в файлах Sorted.txt. Любые ошибки записываются в файл SortError.txt. Параметр UseNewEnvironment указывает, что процесс выполняется со своими собственными переменными среды.

$processOptions = @{
    FilePath = "sort.exe"
    RedirectStandardInput = "TestSort.txt"
    RedirectStandardOutput = "Sorted.txt"
    RedirectStandardError = "SortError.txt"
    UseNewEnvironment = $true
}
Start-Process @processOptions

В этом примере используется сплаттинг для передачи параметров командлету. Для получения дополнительной информации см. about_Splatting.

Пример 4. Запуск процесса в развернутом окне

В этом примере запускается процесс Notepad.exe. Он максимизирует окно и сохраняет его до завершения процесса.

Start-Process -FilePath "notepad" -Wait -WindowStyle Maximized

Пример 5. Запустите PowerShell от имени администратора.

В этом примере PowerShell запускается с использованием параметра Запуск от имени администратора.

Start-Process -FilePath "powershell" -Verb RunAs

Пример 6. Использование разных глаголов для запуска процесса

В этом примере показано, как найти глаголы, которые можно использовать при запуске процесса. Доступные команды определяются расширением имени файла, который выполняется в процессе.

$startExe = New-Object System.Diagnostics.ProcessStartInfo -Args powershell.exe
$startExe.verbs

open
runas
runasuser

В примере New-Object используется для создания объекта System.Diagnostics.ProcessStartInfo для powershell.exe, файла, который запускается в процессе PowerShell. Свойство Verbs объекта ProcessStartInfo показывает, что вы можете использовать глаголы Open и RunAs с powershell. .exe или любой процесс, запускающий файл .exe.

Пример 7: Указание аргументов процесса

Обе команды запускают интерпретатор команд Windows, выполняя команду dir для папки Program Files. Поскольку имя папки содержит пробел, значение необходимо заключить в экранированные кавычки. Обратите внимание, что первая команда указывает строку как ArgumentList. Вторая команда представляет собой массив строк.

Start-Process -FilePath "$env:comspec" -ArgumentList "/c dir `"%SystemDrive%\Program Files`""
Start-Process -FilePath "$env:comspec" -ArgumentList "/c","dir","`"%SystemDrive%\Program Files`""

Пример 8. Создание отдельного процесса в Linux

В Windows Start-Process создает независимый процесс, который продолжает работать независимо от запускающей оболочки. На платформах, отличных от Windows, вновь запущенный процесс прикрепляется к запущенной оболочке. Если стартовая оболочка закрыта, дочерний процесс завершается.

Чтобы избежать завершения дочернего процесса на Unix-подобных платформах, вы можете объединить Start-Process с nohup. В следующем примере запускается фоновый экземпляр PowerShell в Linux, который остается активным даже после закрытия сеанса запуска. Команда nohup собирает выходные данные в файл nohup.out в текущем каталоге.

# Runs for 2 minutes and appends output to ./nohup.out
Start-Process nohup 'pwsh -noprofile -c "1..120 | % { Write-Host . -NoNewline; sleep 1 }"'

В этом примере Start-Process запускает команду Linux nohup, которая запускает pwsh как отдельный процесс. Для получения дополнительной информации см. статью nohup в Википедии.

Пример 9. Переопределение переменной среды для процесса

По умолчанию, когда вы используете Start-Process, новый процесс создается с теми же переменными среды, что и текущий сеанс. Вы можете использовать параметр Environment, чтобы переопределить значения этих переменных.

В этом примере переменная среды FOO добавляется в сеанс со значением foo.

В примере Start-Process выполняется три раза, каждый раз возвращая значение FOO. Первая команда не переопределяет переменную среды. Во второй команде для FOO установлено значение bar. В третьей команде для FOO установлено значение $null, что удаляет его.

$env:FOO = 'foo'
Start-Process pwsh -NoNewWindow -ArgumentList '-c', '$env:FOO'
Start-Process pwsh -NoNewWindow -ArgumentList '-c', '$env:FOO' -Environment @{
    FOO  = 'bar'
}
Start-Process pwsh -NoNewWindow -ArgumentList '-c', '$env:FOO' -Environment @{
    FOO  = $null
}

foo
bar

Параметры

-ArgumentList

Указывает параметры или значения параметров, которые будут использоваться при запуске процесса этим командлетом. Аргументы могут приниматься как одна строка, разделенная пробелами, или как массив строк, разделенных запятыми. Командлет объединяет массив в одну строку, где каждый элемент массива отделяется одним пробелом.

Внешние кавычки строк PowerShell не включаются, когда значения ArgumentList передаются новому процессу. Если параметры или значения параметров содержат пробел или кавычки, их необходимо заключить в экранированные двойные кавычки. Дополнительные сведения см. в разделе about_Quoting_Rules.

Для достижения наилучших результатов используйте одно значение ArgumentList, содержащее все аргументы и все необходимые символы кавычек.

Тип :

String[]

Псевдонимы:

Args

Позиция:

1

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-Confirm

Запрашивает подтверждение перед запуском командлета.

Тип :

SwitchParameter

Псевдонимы:

cf

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-Credential

Указывает учетную запись пользователя, имеющую разрешение на выполнение этого действия. По умолчанию командлет использует учетные данные текущего пользователя.

Введите имя пользователя, например User01 или Domain01\User01, или введите объект PSCredential, созданный с помощью Get-Credential командлет. Если вы введете имя пользователя, вам будет предложено ввести пароль.

Учетные данные хранятся в объекте PSCredential, а пароль хранится в виде SecureString.

Примечание

Дополнительную информацию о защите данных SecureString см. в разделе Насколько безопасен SecureString?.

Тип :

PSCredential

Псевдонимы:

RunAs

Позиция:

Именованный

Значение по умолчанию:

Текущий пользователь

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-Environment

Указывает одну или несколько переменных среды, которые необходимо переопределить для процесса, в виде хеш-таблицы. Укажите имя переменной среды в качестве ключа в хеш-таблице и желаемое значение. Чтобы отключить переменную среды, укажите ее значение как $null.

Указанные переменные заменяются в процессе. Когда вы указываете переменную среды PATH, она заменяется значением $PSHOME, за которым следует указанное значение из этого параметра. В Windows команда добавляет значения для PATH в областях «Компьютер» и «Пользователь» после нового значения.

Этот параметр был добавлен в PowerShell 7.4.

Тип :

Хэш-таблица

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-FilePath

Указывает необязательный путь и имя файла программы, запускаемой в процессе. Введите имя исполняемого файла или документа, например файла .txt или .doc, связанного с программой на компьютере. Этот параметр является обязательным.

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

Тип :

String

Псевдонимы:

PSPath, Path

Позиция:

0

Значение по умолчанию:

None

Необходимый:

True

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-LoadUserProfile

Указывает, что этот командлет загружает профиль пользователя Windows, хранящийся в разделе реестра HKEY_USERS для текущего пользователя. Этот параметр не применяется к системам, отличным от Windows.

Этот параметр не влияет на профили PowerShell. Дополнительные сведения см. в разделе about_Profiles.

Тип :

SwitchParameter

Псевдонимы:

Lup

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-NoNewWindow

Запустите новый процесс в текущем окне консоли. По умолчанию в Windows PowerShell открывает новое окно. В системах, отличных от Windows, вы никогда не получите новое окно.

Вы не можете использовать параметры NoNewWindow и WindowStyle в одной команде.

Этот параметр не применяется к системам, отличным от Windows.

Тип :

SwitchParameter

Псевдонимы:

nnw

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-PassThru

Возвращает объект процесса для каждого процесса, запущенного командлетом. По умолчанию этот командлет не генерирует никаких выходных данных.

Тип :

SwitchParameter

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-RedirectStandardError

Указывает файл. Этот командлет отправляет все ошибки, сгенерированные процессом, в указанный вами файл. Введите путь и имя файла. По умолчанию ошибки отображаются в консоли.

Тип :

String

Псевдонимы:

RSE

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-RedirectStandardInput

Указывает файл. Этот командлет считывает входные данные из указанного файла. Введите путь и имя входного файла. По умолчанию процесс получает данные с клавиатуры.

Тип :

String

Псевдонимы:

RSI

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-RedirectStandardOutput

Указывает файл. Этот командлет отправляет выходные данные, созданные процессом, в указанный вами файл. Введите путь и имя файла. По умолчанию вывод отображается в консоли.

Тип :

String

Псевдонимы:

RSO

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-UseNewEnvironment

Указывает, что этот командлет использует новые переменные среды, указанные для процесса. По умолчанию запущенный процесс запускается с переменными среды, унаследованными от родительского процесса.

В Windows при использовании UseNewEnvironment новый процесс запускается только с переменными среды по умолчанию, определенными для области Машина. Это имеет побочный эффект: для $env:USERNAME установлено значение SYSTEM. Ни одна из переменных из области Пользователь не включена.

Тип :

SwitchParameter

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-Verb

Указывает глагол, который будет использоваться, когда этот командлет запускает процесс. Доступные команды определяются расширением имени файла, который выполняется в процессе.

В следующей таблице показаны команды для некоторых распространенных типов файлов процессов.

.cmd

Изменить, Открыть, Печать, Запустить от имени, Запустить от имени

.exe

Открыть, Запустить от имени, Запустить от имени

.txt

Открыть, Печать, Напечатать

.wav

Открыть, Воспроизвести

Чтобы найти глаголы, которые можно использовать с файлом, выполняющимся в процессе, используйте командлет New-Object, чтобы создать объект System.Diagnostics.ProcessStartInfo для файла. Доступные глаголы находятся в свойстве Verbs объекта ProcessStartInfo. Подробности смотрите в примерах.

Этот параметр не применяется к системам, отличным от Windows.

Тип :

String

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-Wait

Указывает, что этот командлет ожидает завершения указанного процесса и его потомков, прежде чем принимать дополнительные входные данные. Этот параметр подавляет командную строку или сохраняет окно до завершения процессов.

Тип :

SwitchParameter

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-WhatIf

Показывает, что произойдет, если командлет запустится. Командлет не запускается.

Этот параметр был введен в PowerShell 6.0.

Тип :

SwitchParameter

Псевдонимы:

wi

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-WindowStyle

Указывает состояние окна, используемого для нового процесса. Значение по умолчанию — Нормальный. Допустимые значения этого параметра:

    Normal
    Hidden
    Minimized
    Maximized

Вы не можете использовать параметры WindowStyle и NoNewWindow в одной команде.

Этот параметр не применяется к системам, отличным от Windows. При использовании в системах, отличных от Windows, вы никогда не получите новое окно.

Тип :

Процессвиндовстиле

Принятые значения:

Обычный, Скрытый, Минимизированный, Максимизированный

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-WorkingDirectory

Указывает место, в котором должен запуститься новый процесс.

Если этот параметр не указан, командлет по умолчанию использует полное расположение, указанное в параметре FilePath. Если значение параметра FilePath не является полным, по умолчанию используется текущий рабочий каталог вызывающего процесса.

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

Тип :

String

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

Входы

Нет

Вы не можете передавать объекты в этот командлет.

Выходы

Нет

По умолчанию этот командлет не возвращает никаких результатов.

Процесс

При использовании параметра PassThru этот командлет возвращает объект Process.

Примечания

PowerShell включает следующие псевдонимы для Start-Process:

  • Все платформы

      saps
  • Windows

      start

Нативные команды — это исполняемые файлы, установленные в операционной системе. Эти исполняемые файлы можно запускать из любой оболочки командной строки, например PowerShell. Обычно вы запускаете команду точно так же, как в bash или cmd.exe. Командлет Start-Process можно использовать для запуска любых собственных команд, но его следует использовать только в том случае, если вам необходимо контролировать выполнение команды.

Start-Process полезен для запуска программ с графическим интерфейсом на платформах, отличных от Windows. Например, запустите Start-Process gedit, чтобы запустить графический текстовый редактор, общий для среды рабочего стола GNOME.

По умолчанию Start-Process запускает процесс асинхронно. Управление мгновенно возвращается PowerShell, даже если новый процесс все еще работает.

  • В локальной системе запущенный процесс существует независимо от вызывающего процесса.
  • В удаленной системе новый процесс завершается после завершения удаленного сеанса сразу после команды Start-Process. Таким образом, вы не можете использовать Start-Process в удаленном сеансе, ожидая, что запущенный процесс переживет этот сеанс.

Если вам все же необходимо использовать Start-Process в удаленном сеансе, вызовите его с параметром Wait. Или вы можете использовать другие методы для создания нового процесса в удаленной системе.

При использовании параметра Wait Start-Process ожидает выхода дерева процессов (процесса и всех его потомков), прежде чем вернуть управление. Это отличается от поведения командлета Wait-Process, который ожидает завершения только указанных процессов.

В Windows наиболее распространенным вариантом использования Start-Process является использование параметра Wait, чтобы заблокировать ход выполнения до тех пор, пока новый процесс не завершится. В системах, отличных от Windows, это требуется редко, поскольку поведение по умолчанию для приложений командной строки эквивалентно Start-Process-Wait.

Этот командлет реализован с помощью метода Start класса System.Diagnostics.Process. Дополнительные сведения об этом методе см. в разделе Метод Process.Start.