Поделиться через


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
     [-VMGuid] <Guid[]>
     [<CommonParameters>]
Start-Job
     [-VMGuid] <Guid[]>
     [<CommonParameters>]
Start-Job
     -VMName <String[]>
     [<CommonParameters>]
Start-Job
     -VMName <String[]>
     [<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 для запуска заданий с настраиваемыми типами см. в справочных документах для функции типа задания.

Примеры

Пример 1. Запуск фонового задания

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

Start-Job -ScriptBlock {Get-Process}

Id  Name   PSJobTypeName   State     HasMoreData   Location    Command
--  ----   -------------   -----     -----------   --------    -------
1   Job1   BackgroundJob   Running   True          localhost   Get-Process

Start-Job использует параметр ScriptBlock для запуска Get-Process в качестве фонового задания. Отображаются сведения о задании, и PowerShell возвращается в запрос, пока задание выполняется в фоновом режиме.

Пример 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 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 $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.

Параметры

-ArgumentList

Задает массив аргументов или значений параметров для скрипта, заданного параметром FilePath .

Так как все значения, следующие за именем параметра ArgumentList , интерпретируются как значения ArgumentList, укажите этот параметр в качестве последнего параметра в команде.

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 .

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

-DefinitionName

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

Если вы используете для Start-Job запуска экземпляра запланированного задания, задание запускается немедленно, независимо от триггеров и параметров задания. Результирующий экземпляр задания является запланированным заданием, но не сохраняется на диске, как активированные запланированные задания. Параметр ArgumentList нельзя использовать для предоставления значений Start-Job параметров скриптов, выполняемых в запланированном задании. Дополнительные сведения см. в разделе 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

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

String

Конвейер можно использовать для отправки объекта со свойством Name в параметр Name . Например, можно конвейерировать объект FileInfo из Get-ChildItem в Start-Job.

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

System.Management.Automation.PSRemotingJob

Start-Job возвращает объект PSRemotingJob , представляющий запущенное задание.

Примечания

Для запуска в фоновом режиме Start-Job выполняется в отдельном сеансе текущего сеанса. При использовании командлета Invoke-Command для выполнения Start-Job команды в сеансе на удаленном компьютере Start-Job выполняется в сеансе удаленного сеанса.