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]
[-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
В этом примере используется 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-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[] |
Aliases: | Args |
Position: | 1 |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Confirm
Запрос подтверждения перед выполнением командлета.
Тип: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Credential
Указывает учетную запись пользователя с разрешением на выполнение этого действия. По умолчанию командлет использует учетные данные текущего пользователя.
Введите имя пользователя, например User01 или Domain01\User01, или введите объект PSCredential, созданный командлетомGet-Credential
. Если ввести имя пользователя, вам будет предложено ввести пароль.
Учетные данные хранятся в объекте PSCredential , а пароль хранится как SecureString.
Примечание.
Дополнительные сведения о защите данных SecureString см. в разделе "Как безопасна Защита SecureString?".
Тип: | PSCredential |
Aliases: | RunAs |
Position: | Named |
Default value: | Current user |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Environment
Указывает одну или несколько переменных среды для переопределения процесса в виде хэш-таблицы. Укажите имя переменной среды в качестве ключа в хэш-таблице и требуемое значение. Чтобы отменить настройку переменной среды, укажите его значение как $null
.
Указанные переменные заменяются в процессе. При указании переменной PATH
среды она заменена значением $PSHOME
, за которым следует указанное значение из этого параметра. В Windows команда добавляет значения PATH
в области "Компьютер" и "Пользователь" после нового значения.
Этот параметр добавлен в PowerShell 7.4.
Тип: | Hashtable |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-FilePath
Указывает необязательный путь и имя файла программы, которая выполняется в процессе. Введите имя исполняемого файла или документа, например .txt
файла или .doc
файла, связанного с программой на компьютере. Этот параметр является обязательным.
Если указать только имя файла, которое не соответствует системной команде, используйте параметр WorkingDirectory , чтобы указать путь.
Тип: | String |
Aliases: | PSPath, Path |
Position: | 0 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-LoadUserProfile
Указывает, что этот командлет загружает профиль пользователя Windows, хранящийся в HKEY_USERS
разделе реестра для текущего пользователя. Параметр не применяется к системам, отличным от Windows.
Этот параметр не влияет на профили PowerShell. Дополнительные сведения см. в разделе about_Profiles.
Тип: | SwitchParameter |
Aliases: | Lup |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-NoNewWindow
Предотвращает запуск процесса в новом окне. По умолчанию в Windows PowerShell открывается новое окно. В системах, отличных от Windows, вы никогда не получаете новое окно.
Параметры NoNewWindow и WindowStyle нельзя использовать в той же команде.
Параметр не применяется к системам, отличным от Windows.
Тип: | SwitchParameter |
Aliases: | nnw |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-PassThru
Возвращает объект процесса для каждого запущенного командлетом процесса По умолчанию этот командлет не создает выходные данные.
Тип: | SwitchParameter |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-RedirectStandardError
Указывает файл. Этот командлет отправляет все ошибки, созданные процессом, в указанный файл. Введите путь и имя файла. По умолчанию все ошибки отображаются в консоли.
Тип: | String |
Aliases: | RSE |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-RedirectStandardInput
Указывает файл. Этот командлет считывает входные данные из указанного файла. Введите путь и имя файла входного файла. По умолчанию процесс получает входные данные с клавиатуры.
Тип: | String |
Aliases: | RSI |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-RedirectStandardOutput
Указывает файл. Этот командлет отправляет выходные данные, созданные процессом, в указанный файл. Введите путь и имя файла. По умолчанию выходные данные отображаются в консоли.
Тип: | String |
Aliases: | RSO |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-UseNewEnvironment
Указывает, что этот командлет использует новые переменные среды, указанные для процесса. По умолчанию запущенный процесс выполняется с переменными среды, унаследованными от родительского процесса.
В Windows при использовании UseNewEnvironment новый процесс начинается только с переменными среды по умолчанию, определенными для области компьютера . Это имеет побочный эффект, установленный $env:USERNAME
для SYSTEM. Никакие переменные из области пользователя не включены.
Тип: | SwitchParameter |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Verb
Указывает команду, используемую при запуске этого командлета. Доступные команды определяются расширением имени файла, который выполняется в процессе.
В приведенной ниже таблице показаны команды, доступные для некоторых распространенных типов файлов.
Тип файла | Команды |
---|---|
.cmd | Edit , , Open Print , RunAs RunAsUser |
.exe | Open , , RunAs RunAsUser |
.txt | Open , , Print PrintTo |
.wav | Open , Play |
Чтобы найти команды, которые можно использовать с файлом, выполняющимся в процессе, используйте New-Object
командлет для создания объекта System.Diagnostics.ProcessStartInfo для файла. Доступные команды находятся в свойстве Verbs объекта ProcessStartInfo. Дополнительные сведения см. в примерах.
Параметр не применяется к системам, отличным от Windows.
Тип: | String |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Wait
Указывает, что этот командлет ожидает завершения указанного процесса и его потомков перед принятием дополнительных входных данных. Этот параметр подавляет командную строку или сохраняет окно до завершения процессов.
Тип: | SwitchParameter |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-WhatIf
Показывает, что произойдет при запуске командлета. Командлет не выполняется.
Этот параметр появился в PowerShell 6.0.
Тип: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-WindowStyle
Указывает состояние окна, используемого для нового процесса. Значение по умолчанию — Normal
.
Допустимые значения для этого параметра:
Normal
Hidden
Minimized
Maximized
Параметры WindowStyle и NoNewWindow нельзя использовать в той же команде.
Параметр не применяется к системам, отличным от Windows. При использовании в системах, отличных от Windows, вы никогда не получаете новое окно.
Тип: | ProcessWindowStyle |
Допустимые значения: | Normal, Hidden, Minimized, Maximized |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-WorkingDirectory
Указывает расположение, в котором должен начинаться новый процесс.
Если этот командлет не указан, по умолчанию используется полное расположение, указанное в параметре FilePath . Если значение параметра FilePath не является полным, по умолчанию используется текущий рабочий каталог вызывающего процесса.
Подстановочные знаки не поддерживаются. Путь не должен содержать символы, которые будут интерпретироваться как подстановочные знаки.
Тип: | String |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
Входные данные
None
Невозможно передать объекты в этот командлет.
Выходные данные
None
По умолчанию этот командлет не возвращает выходные данные.
При использовании параметра 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 . Кроме того, можно использовать другие методы для создания нового процесса в удаленной системе.
При использовании параметра Start-Process
Wait ожидает завершения дерева обработки (процесса и всех его потомков) перед возвратом элемента управления. Это отличается от поведения командлета Wait-Process
, который ожидает завершения указанных процессов.
В Windows наиболее распространенным вариантом Start-Process
использования является использование параметра Wait для блокировки хода выполнения до завершения нового процесса. В системе, отличной от Windows, это редко требуется, так как поведение по умолчанию для приложений командной строки эквивалентно Start-Process -Wait
.
Этот командлет реализуется с помощью метода Start класса System.Diagnostics.Process. Дополнительные сведения об этом методе см. в разделе Process.Start Method.
Связанные ссылки
PowerShell