Start-Process

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

Синтаксис

Start-Process
     [-FilePath] <String>
     [[-ArgumentList] <String[]>]
     [-Credential <PSCredential>]
     [-WorkingDirectory <String>]
     [-LoadUserProfile]
     [-NoNewWindow]
     [-PassThru]
     [-RedirectStandardError <String>]
     [-RedirectStandardInput <String>]
     [-RedirectStandardOutput <String>]
     [-WindowStyle <ProcessWindowStyle>]
     [-Wait]
     [-UseNewEnvironment]
     [-WhatIf]
     [-Confirm]
     [<CommonParameters>]
Start-Process
     [-FilePath] <String>
     [[-ArgumentList] <String[]>]
     [-WorkingDirectory <String>]
     [-PassThru]
     [-Verb <String>]
     [-WindowStyle <ProcessWindowStyle>]
     [-Wait]
     [-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

В этом примере используется splatting для передачи параметров командлету. Дополнительные сведения см. в 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 verbs with 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-Processnohup. В следующем примере запускается фоновый экземпляр 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 в Википедии.

Параметры

-ArgumentList

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

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

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

Type:String[]
Aliases:Args
Position:1
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Confirm

Запрос подтверждения перед выполнением командлета.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Credential

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

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

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

Примечание.

Дополнительные сведения о защите данных SecureString см. в разделе "Как безопасна Защита SecureString?".

Type:PSCredential
Aliases:RunAs
Position:Named
Default value:Current user
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FilePath

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

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

Type:String
Aliases:PSPath, Path
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-LoadUserProfile

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

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

Type:SwitchParameter
Aliases:Lup
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-NoNewWindow

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

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

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

Type:SwitchParameter
Aliases:nnw
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-PassThru

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

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-RedirectStandardError

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

Type:String
Aliases:RSE
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-RedirectStandardInput

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

Type:String
Aliases:RSI
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-RedirectStandardOutput

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

Type:String
Aliases:RSO
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UseNewEnvironment

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

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

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Verb

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

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

Тип файла Команды
.cmd Edit, , OpenPrint, RunAsRunAsUser
.exe Open, , RunAsRunAsUser
.txt Open, , PrintPrintTo
.Wav Open, Play

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

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

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Wait

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

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

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

Этот параметр появился в PowerShell 6.0.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WindowStyle

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

  • Normal
  • Hidden
  • Minimized
  • Maximized

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

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

Type:ProcessWindowStyle
Accepted values:Normal, Hidden, Minimized, Maximized
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WorkingDirectory

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

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

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

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Входные данные

None

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

Выходные данные

None

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

Process

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

Примечания

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

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

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

Start-Process полезно для запуска программ графического интерфейса на платформах, отличных от Windows. Например, запустите Start-Proces gedit , чтобы запустить графический текстовый редактор, распространенный в средах РАБОЧЕГО стола GNOME.

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

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

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

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

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

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