Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Назначение: Windows PowerShell 3.0
РАЗДЕЛ
about_Scheduled_Jobs_Troubleshooting
КРАТКОЕ ОПИСАНИЕ
Описываются способы решения проблем, связанных с запланированными заданиями.
ПОДРОБНОЕ ОПИСАНИЕ
В этом разделе описываются некоторые проблемы, которые могут возникать при использовании функций запланированных заданий в Windows PowerShell®, и предлагаются решения этих проблем.
Перед использованием запланированных заданий Windows PowerShell ознакомьтесь с разделом about_Scheduled_Jobs и связанными разделами о запланированных заданиях.
В этом разделе содержатся следующие подразделы.
НЕ УДАЕТСЯ НАЙТИ РЕЗУЛЬТАТЫ ВЫПОЛНЕНИЯ ЗАДАНИЯ
ЗАПЛАНИРОВАННОЕ ЗАДАНИЕ НЕ ВЫПОЛНЯЕТСЯ
НЕ УДАЕТСЯ ПОЛУЧИТЬ ЗАПЛАНИРОВАННОЕ ЗАДАНИЕ: ЗАПЛАНИРОВАННОЕ ЗАДАНИЕ ПОВРЕЖДЕНО
КОМАНДЛЕТАМ ЗАДАНИЙ НЕ УДАЕТСЯ НАЙТИ ЗАПЛАНИРОВАННЫЕ ЗАДАНИЯ
НЕ УДАЕТСЯ НАЙТИ РЕЗУЛЬТАТЫ ВЫПОЛНЕНИЯ ЗАДАНИЯ
Базовый метод для получения результатов выполнения задания в Windows PowerShell
При запуске запланированное задание создает свой экземпляр. Для просмотра, контроля и получения результатов выполнения экземпляров запланированных заданий используются командлеты Job.
ПРИМЕЧАНИЕ. Для использования командлетов Job применительно к экземплярам запланированных заданий необходимо импортировать модуль PSScheduledJob в сеанс. Чтобы импортировать модуль PSScheduledJob, введите команду «Import-Module PSScheduledJob» (без кавычек) или используйте любой командлет, предназначенный для работы с запланированными заданиями, например Get-ScheduledJob.
Чтобы получить список всех экземпляров запланированного задания, используйте командлет Get-Job.
PS C:\> Import-Module PSScheduledJob PS C:\> Get-Job ProcessJob Id Name PSJobTypeName State HasMoreData Location -- ---- ------------- ----- ----------- -------- 43 ProcessJob PSScheduledJob Completed False localhost 44 ProcessJob PSScheduledJob Completed False localhost 45 ProcessJob PSScheduledJob Completed False localhost 46 ProcessJob PSScheduledJob Completed False localhost 47 ProcessJob PSScheduledJob Completed False localhost 48 ProcessJob PSScheduledJob Completed False localhost 49 ProcessJob PSScheduledJob Completed False localhost 50 ProcessJob PSScheduledJob Completed False localhost
В приведенной ниже команде используется командлет Format-Table для вывода свойств Name, ID и PSBeginTime экземпляра запланированного задания в виде таблицы.
PS C:\> Get-Job ProcessJob | Format-Table -Property Name, ID, PSBeginTime -Auto Name Id PSBeginTime ---- -- --------- ProcessJob 43 11/2/2011 3:00:02 AM ProcessJob 44 11/3/2011 3:00:02 AM ProcessJob 45 11/4/2011 3:00:02 AM ProcessJob 46 11/5/2011 3:00:02 AM ProcessJob 47 11/6/2011 3:00:02 AM ProcessJob 48 11/7/2011 12:00:01 AM ProcessJob 49 11/7/2011 3:00:02 AM ProcessJob 50 11/8/2011 3:00:02 AM
Чтобы получить результаты выполнения экземпляра запланированного задания, используйте командлет Receive-Job. Приведенная ниже команда получает результаты выполнения последнего экземпляра ProcessJob (ID = 50).
PS C:\> Receive-Job -ID 50
– Основной способ поиска результатов выполнения задания на диске
Для управления запланированными заданиями используйте командлеты Job, такие как Get-Job и Receive-Job.
Если командлет Get-Job не получает экземпляр задания или командлет Receive-Job не получает результаты выполнения задания, вы можете выполнить поиск в файлах журнала выполнения задания на диске. В журнале выполнения содержатся записи обо всех запущенных экземплярах задания.
Убедитесь в наличии подкаталога с именем в виде метки времени в каталоге запланированного задания по следующему пути:
$home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJob \<ScheduledJobName>\Output
Обычно:
C:\Users\<UserName>\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJob \<ScheduledJobName>\Output
Например, приведенная ниже команда возвращает находящийся на диске журнал выполнения запланированного задания ProcessJob.
PS C:\> dir $home\AppData\Local\Microsoft\Windows\PowerShell \ScheduledJobs\ProcessJob\Output Directory: C:\Users\User01\AppData\Local\Microsoft\Windows\PowerShell \ScheduledJobs\ProcessJob\Output Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 11/2/2011 3:00 AM 20111102-030002-260 d---- 11/3/2011 3:00 AM 20111103-030002-277 d---- 11/4/2011 3:00 AM 20111104-030002-209 d---- 11/5/2011 3:00 AM 20111105-030002-251 d---- 11/6/2011 3:00 AM 20111106-030002-174 d---- 11/7/2011 12:00 AM 20111107-000001-914 d---- 11/7/2011 3:00 AM 20111107-030002-376
Каждый подкаталог с именем в виде метки времени представляет экземпляр задания. Результаты выполнения каждого экземпляра задания сохраняются в файле Results.xml в каталоге с именем в виде метки времени.
Например, приведенная ниже команда возвращает файлы Results.xml для каждого сохраненного экземпляра запланированного задания ProcessJob.
PS C:\> dir $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs \ProcessJob\Output\*\Results.xml Directory: C:\Users\User01\Appdata\Local\Microsoft\Windows\PowerShell \ScheduledJobs\ProcessJob\Output
Если файл Results.xml отсутствует, Windows PowerShell не может вернуть или вывести результаты выполнения задания.
– Командлету Job не удалось получить экземпляры запланированного задания или их результаты, так как модуль PSScheduledJob не импортирован в сеанс.
ПРИМЕЧАНИЕ. Перед использованием командлета Job применительно к экземплярам запланированного задания убедитесь в том, что модуль PSScheduledJob включен в сеанс. Без этого модуля командлеты Job не могут получить экземпляры запланированного задания или их результаты.
Чтобы импортировать модуль PSScheduledJob, введите следующую команду:
Import-Module PSScheduledJob
– Командлет Receive-Job, возможно, уже вернул результаты в текущем сеансе.
Если командлет Receive-Job не возвращает результаты выполнения экземпляра задания, возможно, он уже был выполнен для этого экземпляра в текущем сеансе без параметра Keep.
При использовании командлета Receive-Job без параметра Keep он возвращает результаты выполнения задания и присваивает свойству HasMoreData экземпляра задания значение False, чтобы указать, что все результаты для экземпляра были возвращены и больше результатов нет. Этот параметр подходит для стандартных фоновых заданий, но не для экземпляров запланированных заданий, которые сохраняются на диске.
Чтобы получить результаты выполнения экземпляра задания снова, начните новый сеанс Windows PowerShell (введите «PowerShell» без кавычек), импортируйте модуль PSScheduledJob и попытайтесь выполнить команду Receive-Job еще раз.
PS C:\> Receive-Job -ID 50 PS C:\> #No results PS C:\> PowerShell Windows PowerShell Copyright (C) 2012 Microsoft Corporation. All rights reserved. PS C:\> Import-Module PSScheduledJob PS C:\> Receive-Job -ID 50 Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 1213 33 12348 21676 88 25.71 1608 CcmExec 29 4 1168 2920 43 0.02 748 conhost 46 6 2208 4612 45 0.03 1640 conhost ...
Чтобы получить результаты выполнения экземпляра задания несколько раз за сеанс, используйте параметр Keep командлета Receive-Job.
PS C:\> Import-Module PSScheduledJob PS C:\> Receive-Job -ID 50 -Keep Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 1213 33 12348 21676 88 25.71 1608 CcmExec 29 4 1168 2920 43 0.02 748 conhost 46 6 2208 4612 45 0.03 1640 conhost PS C:\> Receive-Job -ID 50 -Keep Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 1213 33 12348 21676 88 25.71 1608 CcmExec 29 4 1168 2920 43 0.02 748 conhost 46 6 2208 4612 45 0.03 1640 conhost
– Запланированное задание, возможно, повреждено.
Если запланированное задание повреждено, Windows PowerShell удаляет его и результаты его выполнения. Восстановить результаты выполнения поврежденного запланированного задания невозможно.
Чтобы определить, существует ли все еще запланированное задание, используйте командлет Get-ScheduledJob.
PS C:\> Get-ScheduledJob
– Возможно, число результатов превысило значение свойства ExecutionHistoryLength запланированного задания.
Свойство ExecutionHistoryLength запланированного задания определяет, сколько экземпляров задания и их результатов сохраняется на диск. Значение по умолчанию — 32. Если число экземпляров запланированного задания превышает это значение, Windows PowerShell удаляет самый старый экземпляр, чтобы освободить место для нового.
Чтобы получить значение свойства ExecutionHistoryLength запланированного задания, используйте следующий формат команды:
(Get-ScheduledJob <JobName>).ExecutionHistoryLength
Например, приведенная ниже команда возвращает значение свойства ExecutionHistoryLength запланированного задания ProcessJob.
PS C:\> (Get-ScheduledJob ProcessJob).ExecutionHistoryLength
Чтобы задать или изменить значение свойства ExecutionHistoryLength, используйте параметр MaxResultCount командлетов Register-ScheduledJob и Set-ScheduledJob.
Приведенная ниже команда увеличивает значение свойства ExecutionHistoryLength до 50.
PS C:\> Get-ScheduledJob ProcessJob | Set-ScheduledJob -MaxResultCount 50
– Результаты выполнения экземпляра задания, возможно, удалены.
Параметр ClearExecutionHistory командлета Set-ScheduledJob приводит к удалению журнала выполнения задания. Это позволяет освободить место на диске или удалить результаты, которые не нужны, уже были проанализированы или сохранены в другом месте.
Чтобы удалить журнал выполнения запланированного задания, используйте параметр ClearExecutionHistory запланированного задания.
Приведенная ниже команда удаляет журнал выполнения запланированного задания ProcessJob.
PS C:\> Get-ScheduledJob ProcessJob | Set-ScheduledJob -ClearExecutionHistory
Кроме того, удалить результаты задания можно с помощью командлета Remove-Job. При использовании командлета Remove-Job для удаления запланированного задания удаляются все экземпляры задания на диске, включая журнал выполнения и все результаты выполнения задания.
– Задания, запущенные с помощью командлета Start-Job, не сохраняются на диске.
При запуске запланированного задания с помощью командлета Start-Job, а не триггера задания, запускается стандартное фоновое задание. Фоновое задание и его результаты не сохраняются в журнале выполнения задания на диске.
Вы можете получить задание с помощью командлета Get-Job и результаты выполнения задания с помощью командлета Receive-Job, но результаты доступны только до момента их получения, если только не используется параметр Keep командлета Receive-Job.
Кроме того, фоновые задания и их результаты привязаны к сеансу. Они существуют только в сеансе, в котором были созданы. При удалении задания (Remove-Job), закрытии сеанса или закрытии Windows PowerShell экземпляр задания и его результаты удаляются.
ЗАПЛАНИРОВАННОЕ ЗАДАНИЕ НЕ ВЫПОЛНЯЕТСЯ
– Запланированные задания не запускаются автоматически, если их триггеры отключены.
Чтобы получить запланированное задание, используйте командлет Get-ScheduledJob. Убедитесь в том, что свойство Enabled запланированного задания имеет значение True ($true).
PS C:\> Get-ScheduledJob ProcessJob Id Name Triggers Command Enabled -- ---- -------- ------- ------- 4 ProcessJob {1, 2} Get-Process True PS C:\> (Get-ScheduledJob ProcessJob).Enabled True
Получите триггеры запланированного задания с помощью командлета Get-JobTrigger. Убедитесь в том, что свойство Enabled триггера задания имеет значение True ($true).
PS C:\> Get-ScheduledJob ProcessJob | Get-JobTrigger Id Frequency Time DaysOfWeek Enabled -- --------- ---- ---------- ------- 1 Weekly 11/7/2011 5:00:00 AM {Monday, Thursday} True 2 Daily 11/7/2011 3:00:00 PM True PS C:\> Get-ScheduledJob ProcessJob | Get-JobTrigger | Format-Table ID, Enabled -Auto Id Enabled -- ------- 1 True 2 True
– Запланированные задания не запускаются автоматически, если триггеры задания недопустимы.
Например, в триггере задания может быть указана дата в прошлом или несуществующая дата, например пятый понедельник месяца.
– Запланированные задания не запускаются автоматически, если не выполняются условия триггера задания или параметры задания.
Например, запланированное задание, которое запускается только при входе определенного пользователя в систему, не будет выполняться, если этот пользователь не выполняет вход или подключается только удаленно.
Проверьте параметры запланированного задания и убедитесь в том, что они могут выполняться. Например, запланированное задание, которое требует сетевого подключения либо для которого установлено слишком большое значение IdleDuration или слишком маленькое значение IdleTimeout, может не запуститься никогда.
Проверьте параметры задания и их значения с помощью командлета Get-ScheduledJobOption.
PS C:\> Get-ScheduledJob -Name ProcessJob StartIfOnBatteries : False StopIfGoingOnBatteries : True WakeToRun : True StartIfNotIdle : True StopIfGoingOffIdle : False RestartOnIdleResume : False IdleDuration : 00:10:00 IdleTimeout : 01:00:00 ShowInTaskScheduler : True RunElevated : False RunWithoutNetwork : True DoNotAllowDemandStart : False MultipleInstancePolicy : IgnoreNew JobDefinition : Microsoft.PowerShell.ScheduledJob.ScheduledJobDefinition
Описание параметров запланированного задания см. в разделе справки по командлету New-ScheduledJobOption (https://go.microsoft.com/fwlink/?LinkID=223919).
– Возможно, произошел сбой экземпляра запланированного задания.
Если при выполнении команды запланированного задания происходит сбой, Windows PowerShell сообщает об этом немедленно, создавая сообщение об ошибке. Однако если сбой задания происходит при попытке планировщика запустить его, ошибка в Windows PowerShell отсутствует.
Для обнаружения и исправления ошибок в заданиях используйте указанные ниже методы.
– Проверьте журнал событий планировщика заданий на наличие ошибок. Чтобы проверить журнал, используйте окно просмотра событий или команду Windows PowerShell, например следующую:
Get-WinEvent -LogName Microsoft-Windows-TaskScheduler/Operational | Where {$_.Message -like "*fail*"}
Проверьте запись задания в планировщике заданий. Запланированные задания Windows PowerShell сохраняются в следующей папке планировщика заданий:
Task Scheduler Library\Microsoft\Windows\PowerShell\ScheduledJobs
– Запланированное задание могло не запуститься из-за отсутствия разрешения.
Запланированные задания выполняются с разрешениями пользователя, создавшего задание или указанного в параметре Credential команды Register-ScheduledJob или Set-ScheduledJob.
Если у этого пользователя нет разрешения на выполнение команд или сценариев, задание не запускается.
НЕ УДАЕТСЯ ПОЛУЧИТЬ ЗАПЛАНИРОВАННОЕ ЗАДАНИЕ: ЗАПЛАНИРОВАННОЕ ЗАДАНИЕ ПОВРЕЖДЕНО
В редких случаях запланированные задания могут быть повреждены или содержать внутренние противоречия, которые невозможно разрешить. Как правило, это происходит по причине изменения XML-файлов запланированного задания вручную, в результате чего код XML оказывается недопустимым.
При повреждении запланированного задания Windows PowerShell пытается удалить его, а также его журнал выполнения и результаты с диска.
Если удалить задание не удастся, вы будете получать сообщение о повреждении задания при каждом выполнении командлета Get-ScheduledJob.
Чтобы удалить поврежденное запланированное задание, используйте один из описанных ниже методов. Вставить здесь текст раздела.
– Удалите каталог <Имя_запланированного_задания>. Не удаляйте каталог ScheduledJob.
Этот каталог находится по пути $env:UserProfile\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs\<Имя_запланированного_задания>
Обычно:
C:\Users\<UserName>\AppData\Local\Microsoft\Windows\PowerShell \ScheduledJobs\<ScheduledJobName>.
– Удалите запланированное задание с помощью планировщика заданий. Запланированные задания Windows PowerShell отображаются в планировщике заданий по следующему пути:
Task Scheduler Library\Microsoft\Windows\PowerShell\ScheduledJobs\<ScheduledJobName>
КОМАНДЛЕТАМ JOB НЕ УДАЕТСЯ НАЙТИ ЗАПЛАНИРОВАННЫЕ ЗАДАНИЯ
Если модуль PSScheduledJob не добавлен в текущий сеанс, командлеты Job не могут получить запланированные задания, запустить их или получить результаты их выполнения.
Чтобы импортировать модуль PSScheduledJob, введите команду «Import-Module PSScheduledJob» или используйте любой командлет из модуля, например Get-ScheduledJob. Начиная с версии Windows PowerShell 3.0 модули импортируются автоматически при получении или использовании любого командлета из модуля.
Если командлет PSScheduledJob не включен в текущий сеанс, возможна приведенная ниже последовательность команд.
PS C:\> Get-Job ProcessJob
Get-Job : The command cannot find the job because the job name
ProcessJob was not found.
Verify the value of the Name parameter, and then try the command again.
+ CategoryInfo : ObjectNotFound: (ProcessJob:String) [Get-Job],
PSArgumentException
+ FullyQualifiedErrorId : JobWithSpecifiedNameNotFound,Microsoft.PowerShell.
Commands.GetJobCommand
PS C:\> Get-Job
PS C:\> Get-ScheduledJob ProcessJob
Id Name Triggers Command Enabled
-- ---- -------- ------- -------
4 ProcessJob {1} Get-Process True
PS C:\> Get-Job ProcessJob
Id Name PSJobTypeName State HasMoreData Location
-- ---- ------------- ----- ----------- --------
43 ProcessJob PSScheduledJob Completed True localhost
44 ProcessJob PSScheduledJob Completed True localhost
45 ProcessJob PSScheduledJob Completed True localhost
46 ProcessJob PSScheduledJob Completed True localhost
47 ProcessJob PSScheduledJob Completed True localhost
48 ProcessJob PSScheduledJob Completed True localhost
49 ProcessJob PSScheduledJob Completed True localhost
50 ProcessJob PSScheduledJob Completed True localhost
Это происходит потому, что команда Get-ScheduledJob автоматически импортирует модуль PSScheduledJob, а затем выполняет команду.
СМ. ТАКЖЕ
about_Scheduled_Jobs
about_Scheduled_Jobs_Basics
about_Scheduled_Jobs_Advanced