Start-Job
Запускает фоновое задание PowerShell.
Синтаксис
Start-Job
[-Name <String>]
[-ScriptBlock] <ScriptBlock>
[-Credential <PSCredential>]
[-Authentication <AuthenticationMechanism>]
[[-InitializationScript] <ScriptBlock>]
[-RunAs32]
[-PSVersion <Version>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Start-Job
[-DefinitionName] <String>
[[-DefinitionPath] <String>]
[[-Type] <String>]
[<CommonParameters>]
Start-Job
[-Name <String>]
[-Credential <PSCredential>]
[-FilePath] <String>
[-Authentication <AuthenticationMechanism>]
[[-InitializationScript] <ScriptBlock>]
[-RunAs32]
[-PSVersion <Version>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Start-Job
[-Name <String>]
[-Credential <PSCredential>]
-LiteralPath <String>
[-Authentication <AuthenticationMechanism>]
[[-InitializationScript] <ScriptBlock>]
[-RunAs32]
[-PSVersion <Version>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Описание
Командлет Start-Job
запускает фоновое задание PowerShell на локальном компьютере.
Фоновое задание PowerShell выполняет команду без взаимодействия с текущим сеансом. При запуске фонового задания объект задания возвращается немедленно, даже если для выполнения задания требуется более длительное время. Пока задание выполняется, можно продолжать работу с данным сеансом.
Объект задания содержит полезные сведения о задании, но он не содержит результаты задания.
По завершении задания используйте Receive-Job
командлет, чтобы получить результаты задания. Дополнительные сведения о фоновых заданиях см. в разделе about_Jobs.
Чтобы запустить фоновое задание на удаленном компьютере, используйте параметр AsJob, доступный во многих командлетах, или используйте Invoke-Command
командлет для выполнения Start-Job
команды на удаленном компьютере. Дополнительные сведения см. в about_Remote_Jobs.
Начиная с PowerShell 3.0, Start-Job
можно запускать экземпляры пользовательских типов заданий, таких как запланированные задания. Сведения об использовании Start-Job
для запуска заданий с пользовательскими типами см. в справочных документах для функции типа задания.
Рабочий каталог по умолчанию для заданий жестко закодирован. По умолчанию Windows используется и в Linux или macOS используется $HOME\Documents
$HOME
значение по умолчанию. Код скрипта, выполняемый в фоновом задании, должен управлять рабочим каталогом по мере необходимости.
Примеры
Пример 1. Запуск фонового задания
В этом примере запускается фоновое задание, которое выполняется на локальном компьютере.
Start-Job -ScriptBlock { Get-Process -Name powershell }
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Running True localhost Get-Process -Name powershell
Start-Job
использует параметр ScriptBlock для запуска Get-Process
в качестве фонового задания. Параметр Name указывает, чтобы найти процессы PowerShell. powershell
Отображаются сведения о задании, и PowerShell возвращает запрос во время выполнения задания в фоновом режиме.
Чтобы просмотреть выходные данные задания, используйте Receive-Job
командлет. Например, Receive-Job -Id 1
.
Пример 2. Запуск задания с помощью 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 запускает фоновое задание, которое выполняет команду на серверах.
Пример 3. Получение сведений о задании
Этот пример получает сведения о задании и отображает результаты завершенного задания, выполняемого на локальном компьютере.
$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 задает звездочку (*
) для отображения всех свойств объекта задания.
Пример 4. Запуск скрипта в качестве фонового задания
В этом примере скрипт на локальном компьютере выполняется в качестве фонового задания.
Start-Job -FilePath C:\Scripts\Sample.ps1
Start-Job
использует параметр FilePath для указания файла скрипта, хранящегося на локальном компьютере.
Пример 5. Получение процесса с помощью фонового задания
В этом примере используется фоновое задание для получения указанного процесса по имени.
Start-Job -Name PShellJob -ScriptBlock { Get-Process -Name PowerShell }
Start-Job
использует параметр Name для указания понятного имени задания PShellJob. Параметр ScriptBlock указывает Get-Process
, чтобы получить процессы с именем PowerShell.
Пример 6. Сбор и сохранение данных с помощью фонового задания
В этом примере запускается задание, которое собирает большое количество данных карты, а затем сохраняет его в .tif
файле.
Start-Job -Name GetMappingFiles -InitializationScript {Import-Module -Name MapFunctions} -ScriptBlock {
Get-Map -Name * | Set-Content -Path D:\Maps.tif } -RunAs32
Start-Job
использует параметр Name для указания понятного имени задания GetMappingFiles. Параметр InitializationScript запускает блок скрипта, который импортирует модуль MapFunctions . Параметр ScriptBlock запускает Get-Map
и Set-Content
сохраняет данные в расположении, указанном параметром Path . Параметр RunAs32 запускает процесс как 32-разрядный, даже в 64-разрядной операционной системе.
Пример 7. Передача входных данных в фоновое задание
В этом примере используется автоматическая $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.
Пример 8. Использование параметра 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
.
Параметры
-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
Указывает механизм, используемый для проверки подлинности учетных данных пользователя.
Допустимые значения для этого параметра приведены следующим образом:
- По умолчанию.
- Базовая
- Credssp
- Дайджест
- 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 см. в разделе "Как безопасна Защита SecureString?".
Type: | PSCredential |
Position: | Named |
Default value: | Current user |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DefinitionName
Указывает имя определения задания, запускаемого этим командлетом. Используйте этот параметр для запуска заданий настраиваемых типов, имеющих имя определения, например запланированных заданий.
При запуске Start-Job
экземпляра запланированного задания задание запускается немедленно независимо от триггеров заданий или параметров задания. Результирующий экземпляр задания — это запланированное задание, но оно не сохраняется на диске, как запущенные запланированные задания. Невозможно использовать параметр Start-Job
ArgumentList для предоставления значений параметров скриптов, выполняемых в запланированном задании. Дополнительные сведения см. в about_Scheduled_Jobs.
Этот параметр появился в 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 |
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
Указывает версию. Start-Job
выполняет задание с версией PowerShell. Допустимые значения для этого параметра: 2.0
и 3.0
.
Этот параметр появился в PowerShell 3.0.
Type: | Version |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-RunAs32
Указывает, что Start-Job
задание выполняется в 32-разрядном процессе. 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 |
Входные данные
Объект с свойством Name можно передать параметру Name в этот командлет. Например, можно передать объект FileInfo из Get-ChildItem
.
Выходные данные
System.Management.Automation.PSRemotingJob
Этот командлет возвращает объект PSRemotingJob , представляющий запущенное задание.
Примечания
Windows PowerShell включает следующие псевдонимы для Start-Job
:
sajb
Для запуска в фоновом режиме Start-Job
выполняется в собственном сеансе в текущем сеансе. При использовании командлета Invoke-Command
для выполнения Start-Job
команды в сеансе на удаленном компьютере Start-Job
выполняется сеанс в удаленном сеансе.
Связанные ссылки
PowerShell
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по