РАЗДЕЛ
	about_Jobs

КРАТКОЕ ОПИСАНИЕ
	Сведения о выполнении команд и выражений в фоновых заданиях Windows 
	PowerShell, не затрагивающем текущий сеанс. 

ПОЛНОЕ ОПИСАНИЕ
	В этом разделе описывается запуск фоновых заданий в Windows 
	PowerShell на локальном компьютере. Дополнительные сведения о 
	запуске фоновых заданий на удаленных компьютерах см. в разделе 
	about_Remote_Jobs. 

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

	Важно: фоновые задания, запущенные с помощью команды Start-Job 
		 или параметра AsJob команды Invoke-Command, используют 
		 инфраструктуру удаленного взаимодействия Windows PowerShell. 
		 Для использования этих функций необходимо настроить в Windows 
		 PowerShell удаленное взаимодействие, даже если фоновое задание 
		 выполняется только на локальном компьютере. Дополнительные 
		 сведения см. в разделе about_Remote_Requirements.

 
	
 ЗАПУСК ЗАДАНИЯ НА ЛОКАЛЬНОМ КОМПЬЮТЕРЕ
	Чтобы запустить фоновое задание на локальном компьютере, 
	используйте командлет Start-Job. 

	При вводе команды Start-Job команда, выполняемая в фоновом задании, 
	заключается в фигурные скобки ( { } ). Для указания команды 
	используйте параметр ScriptBlock.

	Следующая команда запускает фоновое задание, выполняющее команду 
	Get-Process на локальном компьютере.

		start-job -scriptblock {get-process}


	Команда Start-Job возвращает объект, представляющий задание. 
	Объект задания содержит полезные сведения о задании, но не 
	содержит результаты его выполнения.

	Сохраните объект задания в переменной, чтобы в дальнейшем 
	использовать его с другими командлетами Job для управления 
	фоновыми заданиями. Следующая команда запускает объект задания и 
	сохраняет результирующий объект задания в переменной $job.

		$job = start-job -scriptblock {get-process} 

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

 
 ПОЛУЧЕНИЕ ОБЪЕКТОВ ЗАДАНИЙ

	Чтобы получить объект, представляющий фоновые задания, запущенные 
	в текущем сеансе, используйте командлет Get-Job. При вызове без 
	параметров команда Get-Job возвращает все задания, запущенные в 
	текущем сеансе.

	Например, следующая команда получает все задания в текущем сеансе.

		get-job


		Id  Name  State	HasMoreData  Location   Command
		--  ----  -----	-----------  --------   -------
		1   Job1  Running	True		 localhost  get-process


	Также можно сохранить объект задания в переменной и использовать  
	его в последующих командах как объект, представляющий это задание. 
	Следующая команда получает задание с идентификатором 1 и сохраняет 
	его в переменной $job.

	 $job = get-job -id 1 


	Объект задания содержит состояние задания, показывающее, 
	закончено ли его выполнение. Завершенное задание имеет состояние 
	"Complete" (Выполнено) или "Failed" (Не удалось выполнить). Также 
	задание может быть заблокированным или выполняющимся.


		get-job


		Id  Name  State	HasMoreData  Location   Command
		--  ----  -----	-----------  --------   -------
		1   Job1  Complete	True		 localhost  get-process



 ПОЛУЧЕНИЕ РЕЗУЛЬТАТОВ ВЫПОЛНЕНИЯ ЗАДАНИЯ

	При выполнении фонового задания результаты появляются не сразу. 
	Вместо этого командлет Start-Job возвращает объект, представляющий это 
	задание, но не содержащий результатов его выполнения. Чтобы получить 
	результаты выполнения фонового задания, используйте командлет Receive-Job.

	В следующей команде используется командлет Receive-Job для получения 
	результатов выполнения задания. Используется объект задания, сохраненный в 
	переменной $job и обозначающий это задание.

		receive-job -job $job

	 Командлет Receive-Job возвращает результаты выполнения задания. 


		 Handles  NPM(K)	PM(K)	WS(K) VM(M)   CPU(s)	Id ProcessName
		 -------  ------	-----	----- -----   ------	-- -----------
			 103	 4	11328	 9692	56		 1176 audiodg
			 804	14	12228	14108   100   101.74  1740 CcmExec
			 668	 7	 2672	 6168   104	32.26   488 csrss
		 ...

	 Результаты выполнения задания также можно сохранить в 
	 переменной. Следующая команда сохраняет результат выполнения задания, 
	 размещенного в переменной $job, в переменную $results.

		$results = receive-job -job $job

	 Кроме того, результаты выполнения задания можно сохранить в 
	 файле с помощью оператора перенаправления (>) или командлета 
	 Out-File. В следующей команде с помощью 
	 оператора перенаправления результаты выполнения задания из 
	 переменной $job сохраняются в файле Results.txt.


		receive-job -job $job > results.txt




 ПОЛУЧЕНИЕ И СОХРАНЕНИЕ ЧАСТИЧНЫХ РЕЗУЛЬТАТОВ ВЫПОЛНЕНИЯ ЗАДАНИЙ

	Командлет Receive-Job возвращает результаты выполнения фонового 
	задания. Если задание завершено, командлет Receive-Job возвращает 
	полные результаты его выполнения. Если задание все еще 
	выполняется, командлет Receive-Job получает результаты, созданные 
	на данный момент. Затем можно снова запустить команду Receive-Job для 
	получения оставшихся результатов.

	Когда командлет Receive-Job возвращает результаты, по умолчанию 
	он удаляет их из кэша, где они хранились. При повторном запуске 
	команды Receive-Job получаются только те результаты, которые не 
	были получены в прошлый раз.

	Следующие команды выводят результаты команд Receive-Job, 
	выполненных до завершения задания.


		C:\PS> receive-job -job $job

		Handles  NPM(K)	PM(K)	WS(K) VM(M)   CPU(s)	 Id ProcessName
		-------  ------	-----	----- -----   ------	 -- -----------
			103	 4	11328	 9692	56			1176 audiodg
			804	14	12228	14108   100   101.74   1740 CcmExec


		C:\PS> receive-job -job $job

		Handles  NPM(K)	PM(K)	WS(K) VM(M)   CPU(s)	 Id ProcessName
		-------  ------	-----	----- -----   ------	 -- -----------
			 68	 3	 2632		664	29	 0.36   1388 ccmsetup
			749	22	21468	19940   203   122.13   3644 communicator
			905	 7	 2980	 2628	34   197.97	424 csrss
		 1121	25	28408	32940   174   430.14   3048 explorer


	Чтобы команда Receive-Job не удалила возвращенные ей результаты, 
	используйте параметр Keep. В этом случае команда Receive-Job 
	возвращает все результаты, созданные на данный момент.

	Следующие команды показывают влияние параметра Keep на 
	незавершенное задание. 

		C:\PS> receive-job -job $job -keep

		Handles  NPM(K)	PM(K)	WS(K) VM(M)   CPU(s)	 Id ProcessName
		-------  ------	-----	----- -----   ------	 -- -----------
			103	 4	11328	 9692	56			1176 audiodg
			804	14	12228	14108   100   101.74   1740 CcmExec


		C:\PS> receive-job -job $job -keep

		Handles  NPM(K)	PM(K)	WS(K) VM(M)   CPU(s)	 Id ProcessName
		-------  ------	-----	----- -----   ------	 -- -----------
			103	 4	11328	 9692	56			1176 audiodg
			804	14	12228	14108   100   101.74   1740 CcmExec
			 68	 3	 2632		664	29	 0.36   1388 ccmsetup
			749	22	21468	19940   203   122.13   3644 communicator
			905	 7	 2980	 2628	34   197.97	424 csrss
		 1121	25	28408	32940   174   430.14   3048 explorer



ОЖИДАНИЕ РЕЗУЛЬТАТОВ

	Если выполнение задания занимает длительное время, можно с 
	помощью свойств объекта задания определить, когда оно будет завершено. 
	Следующая команда с помощью объекта Get-Job получает все фоновые 
	задания в текущем сеансе.

		get-job

	Результаты выводятся в виде таблицы. Состояние задания 
	отображается в столбце "State".

		Id  Name  State	HasMoreData  Location   Command
		--  ----  -----	-----------  --------   -------
		1   Job1  Complete	True		 localhost  get-process
		2   Job2  Running	 True		 localhost  get-eventlog -log syst...
		3   Job3  Complete	True		 localhost  dir -path c:\* -recurse


	В этом случае свойство State показывает, что задание Job2 все еще 
	выполняется. Если получить результаты выполнения задания с 
	помощью командлета Receive-Job прямо сейчас, они будут неполными. 
	Можно повторно использовать командлет Receive-Job, пока не будут 
	получены все результаты. По умолчанию при каждом использовании этого 
	командлета получаются только те результаты, которые не были получены 
	ранее, однако с помощью параметра Keep для командлета Receive-Job 
	можно сохранять полученные ранее результаты.

	Теперь можно сохранить результаты в файл и в дальнейшем добавлять 
	в него новые результаты по мере их поступления. Или можно выждать 
	и проверить состояние задания позже.

	Также можно использовать командлет Wait-Job для ожидания любых 
	(или всех) результатов выполнения задания. Командлет Wait-Job 
	позволяет дожидаться выполнения определенного задания, всех 
	заданий или любого из них.
  
	В следующей команде используется командлет Wait-Job для ожидания 
	результатов выполнения задания с идентификатором 10.

		wait-job -ID 10

	При этом командная строка Windows PowerShell отключается до завершения 
	задания.

	Также можно задать ожидание в течение определенного срока. В этой 
	команде с помощью параметра Timeout задается предельный срок 
	ожидания 120 секунд. По истечении этого срока возвращается 
	командная строка, но задание продолжает выполняться в фоновом режиме.

		wait-job -ID 10 -timeout 120


ОСТАНОВКА ЗАДАНИЯ

	Для остановки фоновых заданий используется командлет Stop-Job. 
	Следующая команда запускает задание, получающее все записи из 
	журнала событий System. Объект задания сохраняется в переменной $job.

		$job = start-job -scriptblock {get-eventlog -log system}
 
	Следующая команда останавливает задание. Она передает задание, 
	содержащееся в переменной $job, в командлет Stop-Job с помощью 
	оператора конвейера (|).

		$job | stop-job


УДАЛЕНИЕ ЗАДАНИЯ

	Для удаления фоновых заданий используется командлет Remove-Job. 
	Следующая команда удаляет объект, содержащийся в переменной $job.

		remove-job -job $job 


ПРОВЕРКА ЗАДАНИЯ, В КОТОРОМ ВОЗНИКЛА ОШИБКА

	Чтобы выяснить, почему не удалось выполнить задание, используйте 
	свойство Reason объекта задания.

	Следующая команда запускает задание без требуемых учетных данных. 
	Объект задания сохраняется в переменной $job.


		 $job = start-job -scriptblock {new-item -path HKLM:\Software\MyCompany}

		 Id   Name  State	HasMoreData  Location   Command
		 --   ----  -----	-----------  --------   -------
		 1	Job1  Failed   False		 localhost  new-item -path HKLM:\S...


	Следующая команда с помощью свойства Reason выясняет причину 
	ошибки, из-за которой не удалось выполнить задание.

		 $job.ChildJobs[0].JobStateInfo.Reason


	В данном случае задание не удалось выполнить потому, что 
	удаленный компьютер затребовал явно указанные учетные данные для 
	выполнения команды. При этом свойство Reason имеет следующее значение:

		 Не удалось подключиться к удаленному серверу. Сообщение об 
		 ошибке: доступ запрещен.


КОМАНДЛЕТЫ JOB

	Start-Job		Запускает фоновое задание на локальном компьютере.

	Get-Job		Получает фоновые задания, запущенные в текущем сеансе.

	Receive-Job	Получает результаты выполнения фоновых заданий.

	Stop-Job		 Останавливает фоновое задание.

	Wait-Job		 Отключает командную строку до выполнения 
					 одного задания либо их всех.

	Remove-Job	 Удаляет фоновое задание.

	Invoke-Command   Параметр AsJob позволяет запустить любую команду 
					 как фоновое задание на удаленном компьютере. С помощью команды 
					 Invoke-Command также можно удаленно запускать любые команды 
					 заданий, включая команду Start-Job.

 
СМ. ТАКЖЕ
   about_Remote_Jobs
   about_Job_Details
   about_Remote
   about_PSSessions  
   Start-Job
   Get-Job
   Receive-Job
   Stop-Job
   Wait-Job
   Remove-Job
   Invoke-Command