Start-Job
Запускает фоновое задание PowerShell.
Синтаксис
Start-Job
[-Name <String>]
[-ScriptBlock] <ScriptBlock>
[-Credential <PSCredential>]
[-Authentication <AuthenticationMechanism>]
[[-InitializationScript] <ScriptBlock>]
[-WorkingDirectory <String>]
[-RunAs32]
[-PSVersion <Version>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Start-Job
[-DefinitionName] <String>
[[-DefinitionPath] <String>]
[[-Type] <String>]
[-WorkingDirectory <String>]
[<CommonParameters>]
Start-Job
[-Name <String>]
[-Credential <PSCredential>]
[-FilePath] <String>
[-Authentication <AuthenticationMechanism>]
[[-InitializationScript] <ScriptBlock>]
[-WorkingDirectory <String>]
[-RunAs32]
[-PSVersion <Version>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Start-Job
[-Name <String>]
[-Credential <PSCredential>]
-LiteralPath <String>
[-Authentication <AuthenticationMechanism>]
[[-InitializationScript] <ScriptBlock>]
[-WorkingDirectory <String>]
[-RunAs32]
[-PSVersion <Version>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Описание
Командлет Start-Job
запускает фоновое задание PowerShell на локальном компьютере.
Фоновое задание PowerShell выполняет команду без взаимодействия с текущим сеансом. При запуске фонового задания объект задания возвращается немедленно, даже если для выполнения задания требуется более длительное время. Пока задание выполняется, можно продолжать работу с данным сеансом.
Объект job содержит полезные сведения о задании, но не содержит результаты задания.
По завершении задания используйте Receive-Job
командлет , чтобы получить результаты задания. Дополнительные сведения о фоновых заданиях см. в разделе about_Jobs.
Чтобы запустить фоновое задание на удаленном компьютере, используйте параметр AsJob , доступный во многих командлетах, или Invoke-Command
командлет для выполнения Start-Job
команды на удаленном компьютере. Дополнительные сведения см. в разделе about_Remote_Jobs.
Начиная с PowerShell 3.0, Start-Job
может запускать экземпляры пользовательских типов заданий, таких как запланированные задания. Сведения о том, как использовать Start-Job
для запуска заданий с пользовательскими типами, см. в справочных документах по функции типа задания.
Начиная с PowerShell 6.0 можно запускать задания с помощью фонового оператора амперсанд (&
). Функциональность фонового оператора аналогична Start-Job
функции . Оба метода запуска задания создают объект задания PSRemotingJob . Дополнительные сведения об использовании амперсанда (&
) см. в разделе about_Operators.
В PowerShell 7 появился параметр WorkingDirectory , указывающий начальный рабочий каталог фонового задания. Если параметр не указан, Start-Job
по умолчанию используется текущий рабочий каталог вызывающей стороны, которая запустила задание.
Примечание
Создание фонового задания вне процесса с помощью Start-Job
не поддерживается в сценарии, в котором PowerShell размещается в других приложениях, таких как Функции Azure PowerShell.
Это связано с тем, что Start-Job
для запуска фонового задания вне процесса зависит от pwsh
того, в котором будет доступен $PSHOME
исполняемый файл, но когда приложение размещает PowerShell, оно напрямую использует пакеты SDK NuGet для PowerShell и не pwsh
будет поставляться вместе.
Замена в этом сценарии выполняется Start-ThreadJob
из модуля ThreadJob.
Примеры
Пример 1. Запуск фонового задания
В этом примере запускается фоновое задание, которое выполняется на локальном компьютере.
Start-Job -ScriptBlock { Get-Process -Name pwsh }
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Running True localhost Get-Process -Name pwsh
Start-Job
использует параметр ScriptBlock для запуска Get-Process
в качестве фонового задания. Параметр Name указывает для поиска процессов PowerShell, pwsh
. Отобразятся сведения о задании, и PowerShell возвращается в запрос, пока задание выполняется в фоновом режиме.
Чтобы просмотреть выходные данные задания, используйте Receive-Job
командлет . Например, Receive-Job -Id 1
.
Пример 2. Использование фонового оператора для запуска фонового задания
В этом примере фоновый оператор амперсанда (&
) используется для запуска фонового задания на локальном компьютере. Задание получает тот же результат, что и Start-Job
в примере 1.
Get-Process -Name pwsh &
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
5 Job5 BackgroundJob Running True localhost Microsoft.PowerShell.Man...
Get-Process
использует параметр Name для указания процессов PowerShell, pwsh
. Амперсанд (&
) выполняет команду в качестве фонового задания. Отобразятся сведения о задании, и PowerShell возвращается в запрос, пока задание выполняется в фоновом режиме.
Чтобы просмотреть выходные данные задания, используйте Receive-Job
командлет . Например, Receive-Job -Id 5
.
Пример 3. Запуск задания с помощью Invoke-Command
В этом примере выполняется задание на нескольких компьютерах. Задание хранится в переменной и выполняется с помощью имени переменной в командной строке PowerShell.
$jobWRM = Invoke-Command -ComputerName (Get-Content -Path C:\Servers.txt) -ScriptBlock {
Get-Service -Name WinRM } -JobName WinRM -ThrottleLimit 16 -AsJob
Задание, использующее Invoke-Command
, создается и сохраняется в переменной $jobWRM
. Invoke-Command
использует параметр ComputerName , чтобы указать компьютеры, на которых выполняется задание. Get-Content
получает имена серверов из C:\Servers.txt
файла .
Параметр ScriptBlock указывает команду, которая Get-Service
получает службу WinRM . Параметр JobName указывает понятное имя задания — WinRM. Параметр ThrottleLimit ограничивает количество одновременных команд до 16. Параметр AsJob запускает фоновое задание, которое выполняет команду на серверах.
Пример 4. Получение сведений о задании
Этот пример получает сведения о задании и отображает результаты завершенного задания, которое было выполнено на локальном компьютере.
$j = Start-Job -ScriptBlock { Get-WinEvent -Log System } -Credential Domain01\User01
$j | Select-Object -Property *
State : Completed
HasMoreData : True
StatusMessage :
Location : localhost
Command : Get-WinEvent -Log System
JobStateInfo : Completed
Finished : System.Threading.ManualResetEvent
InstanceId : 27ce3fd9-40ed-488a-99e5-679cd91b9dd3
Id : 18
Name : Job18
ChildJobs : {Job19}
PSBeginTime : 8/8/2019 14:41:57
PSEndTime : 8/8/2019 14:42:07
PSJobTypeName : BackgroundJob
Output : {}
Error : {}
Progress : {}
Verbose : {}
Debug : {}
Warning : {}
Information : {}
Start-Job
использует параметр ScriptBlock для выполнения команды, указывающей Get-WinEvent
для получения системного журнала. Параметр Credential указывает учетную запись пользователя домена с разрешением на выполнение задания на компьютере. Объект задания хранится в переменной $j
.
Объект в переменной $j
отправляется по конвейеру в Select-Object
. Параметр Property указывает звездочку (*
) для отображения всех свойств объекта задания.
Пример 5. Запуск скрипта в качестве фонового задания
В этом примере скрипт на локальном компьютере выполняется в качестве фонового задания.
Start-Job -FilePath C:\Scripts\Sample.ps1
Start-Job
использует параметр FilePath для указания файла скрипта, хранящегося на локальном компьютере.
Пример 6. Получение процесса с помощью фонового задания
В этом примере используется фоновое задание для получения указанного процесса по имени.
Start-Job -Name PShellJob -ScriptBlock { Get-Process -Name PowerShell }
Start-Job
использует параметр Name , чтобы указать понятное имя задания PShellJob. Параметр ScriptBlock указывает Get-Process
для получения процессов с именем PowerShell.
Пример 7. Сбор и сохранение данных с помощью фонового задания
В этом примере запускается задание, которое собирает большой объем данных карты, а затем сохраняет их в .tif
файле.
Start-Job -Name GetMappingFiles -InitializationScript {Import-Module -Name MapFunctions} -ScriptBlock {
Get-Map -Name * | Set-Content -Path D:\Maps.tif }
Start-Job
использует параметр Name для указания понятного имени задания GetMappingFiles. Параметр InitializationScript запускает блок скрипта, который импортирует модуль MapFunctions . Параметр ScriptBlock запускается Get-Map
и Set-Content
сохраняет данные в расположении, указанном параметром Path .
Пример 8. Передача входных данных в фоновое задание
В этом примере используется $input
автоматическая переменная для обработки входного объекта. Используйте Receive-Job
для просмотра выходных данных задания.
Start-Job -ScriptBlock { Get-Content -Path $input } -InputObject "C:\Servers.txt"
Receive-Job -Name Job45 -Keep
Server01
Server02
Server03
Server04
Start-Job
использует параметр ScriptBlock для запуска Get-Content
с автоматической переменной $input
. Переменная $input
получает объекты из параметра InputObject . Receive-Job
использует параметр Name для указания задания и выводит результаты. Параметр Keep сохраняет выходные данные задания, чтобы их можно было просмотреть снова во время сеанса PowerShell.
Пример 9. Задание рабочего каталога для фонового задания
WorkingDirectory позволяет указать альтернативный каталог для задания, из которого можно запускать скрипты или открывать файлы. В этом примере фоновое задание указывает рабочий каталог, который отличается от текущего расположения каталога.
PS C:\Test> Start-Job -WorkingDirectory C:\Test\Scripts { $PWD } | Receive-Job -AutoRemoveJob -Wait
Path
----
C:\Test\Scripts
Текущий рабочий каталог этого примера — C:\Test
. Start-Job
использует параметр WorkingDirectory для указания рабочего каталога задания. Параметр ScriptBlock использует для $PWD
отображения рабочего каталога задания. Receive-Job
отображает выходные данные фонового задания.
AutoRemoveJob удаляет задание, а ожидание отключает командную строку, пока не будут получены все результаты.
Пример 10. Использование параметра ArgumentList для указания массива
В этом примере используется параметр ArgumentList для указания массива аргументов. Массив представляет собой разделенный запятыми список имен процессов.
Start-Job -ScriptBlock { Get-Process -Name $args } -ArgumentList powershell, pwsh, notepad
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Running True localhost Get-Process -Name $args
Командлет Start-Job
использует параметр ScriptBlock для выполнения команды. Get-Process
использует параметр Name для указания автоматической переменной $args
. Параметр ArgumentList передает массив имен процессов в $args
. Имена процессов powershell, pwsh и Блокнот — это процессы, выполняемые на локальном компьютере.
Чтобы просмотреть выходные данные задания, используйте Receive-Job
командлет . Например, Receive-Job -Id 1
.
Пример 11. Выполнение задания в Windows PowerShell 5.1
В этом примере используется параметр PSVersion со значением 5.1 для выполнения задания в сеансе Windows PowerShell 5.1.
$PSVersionTable.PSVersion
Major Minor Patch PreReleaseLabel BuildLabel
----- ----- ----- --------------- ----------
7 0 0 rc.1
$job = Start-Job -ScriptBlock { $PSVersionTable.PSVersion } -PSVersion 5.1
Receive-Job -Job $job
Major Minor Build Revision
----- ----- ----- --------
5 1 14393 3383
Параметры
-ArgumentList
Задает массив аргументов или значений параметров для скрипта, указанного параметром FilePath , или командой, указанной с помощью параметра ScriptBlock .
Аргументы должны передаваться в ArgumentList в качестве аргумента массива с одним измерением. Например, список, разделенный запятыми. Дополнительные сведения о поведении ArgumentList см. в разделе about_Splatting.
Type: | Object[] |
Aliases: | Args |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Authentication
Указывает механизм, используемый для проверки подлинности учетных данных пользователя.
Ниже приведены допустимые значения для этого параметра.
- Default
- Basic
- Credssp
- Digest (дайджест)
- Kerberos
- Согласование
- NegotiateWithImplicitCredential
Значение по умолчанию — Default.
Проверка подлинности CredSSP доступна только в Windows Vista, Windows Server 2008 и более поздних версиях операционной системы Windows.
Дополнительные сведения о значениях этого параметра см. в разделе AuthenticationMechanism.
Внимание!
Аутентификация CredSSP, в рамках которой учетные данные пользователя передаются на удаленный компьютер для проверки, предназначена для команд, требующих аутентификацию нескольких ресурсов, например для доступа к удаленной сетевой папке. Этот механизм повышает риск безопасности удаленной операции. Если удаленный компьютер скомпрометирован, учетные данные, передаваемые ему, могут использоваться для управления сетевым сеансом.
Type: | AuthenticationMechanism |
Accepted values: | Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos |
Position: | Named |
Default value: | Default |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Credential
Указывает учетную запись пользователя с разрешением на выполнение этого действия. Если параметр Credential не указан, команда использует учетные данные текущего пользователя.
Введите имя пользователя, например User01 или Domain01\User01, или введите объект PSCredential , созданный командлетом Get-Credential
. Если ввести имя пользователя, вам будет предложено ввести пароль.
Учетные данные хранятся в объекте PSCredential , а пароль хранится как SecureString.
Примечание
Дополнительные сведения о защите данных SecureString см. в разделе Как безопасно secure is SecureString?.
Type: | PSCredential |
Position: | Named |
Default value: | Current user |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DefinitionName
Указывает имя определения задания, запускаемого этим командлетом. Используйте этот параметр для запуска заданий настраиваемых типов, имеющих имя определения, например запланированных заданий.
При использовании для Start-Job
запуска экземпляра запланированного задания задание запускается немедленно, независимо от триггеров и параметров задания. Результирующий экземпляр задания является запланированным заданием, но он не сохраняется на диске, как запущенные запланированные задания. Параметр ArgumentList нельзя использовать для предоставления значений Start-Job
параметров скриптов, которые выполняются в запланированном задании.
Этот параметр появился в PowerShell 3.0.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DefinitionPath
Указывает путь к определению для задания, запускаемого этим командлетом. Введите путь определения. Объединение значений параметров DefinitionPath и DefinitionName — это полный путь к определению задания. Используйте этот параметр для запуска заданий настраиваемых типов, которые имеют путь к определению, например запланированных заданий.
Для запланированных заданий значение параметра DefinitionPath равно $HOME\AppData\Local\Windows\PowerShell\ScheduledJob
.
Этот параметр появился в PowerShell 3.0.
Type: | String |
Position: | 1 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-FilePath
Задает локальный скрипт, который Start-Job
выполняется в качестве фонового задания. Введите путь и имя файла скрипта или используйте конвейер для отправки пути к скрипту Start-Job
в . Сценарий должен находиться на локальном компьютере или в папке, доступ к которым имеет локальный компьютер.
При использовании этого параметра PowerShell преобразует содержимое указанного файла скрипта в блок скрипта и запускает его в качестве фонового задания.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InitializationScript
Указывает команды, выполняемые перед запуском задания. Чтобы создать блок скрипта, заключите команды в фигурные скобки ({}
).
Используйте этот параметр для подготовки сеанса, в рамках которого выполняется задание. Например, его можно использовать для добавления в сеанс функций, оснасток и модулей.
Type: | ScriptBlock |
Position: | 1 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Указывает входные данные команды. Введите переменную, содержащую объекты, либо введите команду или выражение для создания объектов.
В значении параметра ScriptBlock используйте автоматическую $input
переменную для представления входных объектов.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-LiteralPath
Указывает локальный скрипт, который этот командлет выполняет в качестве фонового задания. Введите путь к скрипту на локальном компьютере.
Start-Job
использует значение параметра LiteralPath в том виде, в котором он введен. Никакие символы не распознаются как подстановочные знаки. Если путь содержит escape-символы, заключите его в одинарные кавычки. Одинарные кавычки предписывают PowerShell не интерпретировать какие-либо символы как escape-последовательности.
Type: | String |
Aliases: | PSPath, LP |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Name
Указывает понятное имя нового задания. Имя можно использовать для идентификации задания в других командлетах задания, таких как Stop-Job
командлет .
Понятное имя по умолчанию — Job#
, где #
— порядковый номер, который увеличивается для каждого задания.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-PSVersion
Указывает версию PowerShell, используемую для выполнения задания. Если значение PSVersion равно 5.1, задание выполняется в сеансе Windows PowerShell 5.1. Для любого другого значения задание выполняется с помощью текущей версии PowerShell.
Этот параметр был добавлен в PowerShell 7 и работает только в Windows.
Type: | Version |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-RunAs32
Начиная с PowerShell 7 параметр RunAs32 не работает в 64-разрядной версии PowerShell (pwsh
).
Если параметр RunAs32 указан в 64-разрядной версии PowerShell, Start-Job
возникает неустранимая ошибка исключения.
Чтобы запустить 32-разрядный процесс PowerShell (pwsh
) с помощью RunAs32, необходимо установить 32-разрядную версию PowerShell.
В 32-разрядной версии PowerShell RunAs32 выполняет задание в 32-разрядном процессе даже в 64-разрядной операционной системе.
В 64-разрядных версиях Windows 7 и Windows Server 2008 R2, если Start-Job
команда включает параметр RunAs32 , нельзя использовать параметр Credential для указания учетных данных другого пользователя.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ScriptBlock
Указывает команды, которые нужно выполнить в фоновом задании. Чтобы создать блок скрипта, заключите команды в фигурные скобки ({}
). Используйте автоматическую $input
переменную для доступа к значению параметра InputObject . Это обязательный параметр.
Type: | ScriptBlock |
Aliases: | Command |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Type
Указывает пользовательский тип для заданий, запущенных .Start-Job
Введите имя настраиваемого типа задания, например PSScheduledJob для запланированных заданий или PSWorkflowJob для заданий рабочих процессов. Этот параметр недопустим для стандартных фоновых заданий.
Этот параметр появился в PowerShell 3.0.
Type: | String |
Position: | 2 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WorkingDirectory
Указывает начальный рабочий каталог фонового задания. Если параметр не указан, задание выполняется из расположения по умолчанию. Расположением по умолчанию является текущий рабочий каталог вызывающей стороны, которая запустила задание.
Этот параметр появился в PowerShell 7.
Type: | String |
Position: | Named |
Default value: | $HOME on Unix (macOS, Linux) and $HOME\Documents on Windows |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Входные данные
Вы можете передать объект со свойством Name в параметр Name для этого командлета. Например, можно передать объект FileInfo по конвейеру из Get-ChildItem
.
Выходные данные
System.Management.Automation.PSRemotingJob
Этот командлет возвращает объект PSRemotingJob , представляющий запущенное задание.
Примечания
PowerShell включает следующие псевдонимы для Start-Job
:
- Для всех платформ.
sajb
Для запуска в фоновом режиме Start-Job
выполняется в собственном сеансе текущего сеанса. При использовании командлета Invoke-Command
для выполнения Start-Job
команды в сеансе на удаленном компьютере Start-Job
выполняется в сеансе удаленного сеанса.