about_Scheduled_Jobs_Troubleshooting
Krótki opis
Objaśnienie sposobu rozwiązywania problemów z zaplanowanymi zadaniami
Długi opis
W tym dokumencie opisano niektóre problemy, które mogą wystąpić podczas korzystania z zaplanowanych funkcji zadań programu PowerShell i sugerują rozwiązania tych problemów.
Przed rozpoczęciem korzystania z zaplanowanych zadań programu PowerShell zobacz about_Scheduled_Jobs i powiązane zaplanowane zadania dotyczące tematów.
Aby uzyskać więcej informacji na temat poleceń cmdlet zawartych w module PSScheduledJob, zobacz PSScheduledJob.
Nie można odnaleźć wyników zadania
Podstawowa metoda pobierania wyników zadania w programie PowerShell
Po uruchomieniu zaplanowanego zadania program tworzy wystąpienie zaplanowanego zadania. Aby wyświetlić, zarządzać wystąpieniami zaplanowanych zadań i uzyskiwać je, użyj poleceń cmdlet zadania.
Uwaga
Aby użyć poleceń cmdlet zadania w wystąpieniach zaplanowanych zadań, moduł PSScheduledJob musi zostać zaimportowany do sesji. Aby zaimportować moduł PSScheduledJob , wpisz Import-Module PSScheduledJob
lub użyj dowolnego zaplanowanego polecenia cmdlet zadania, takiego jak Get-ScheduledJob
.
Aby uzyskać listę wszystkich wystąpień zaplanowanego zadania, użyj Get-Job
polecenia cmdlet .
Import-Module PSScheduledJob
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
Polecenie Get-Job
cmdlet wysyła obiekty ProcessJob w dół potoku. Polecenie Format-Table
cmdlet wyświetla właściwości Name, ID i PSBeginTime zaplanowanego wystąpienia zadania w tabeli.
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
Aby uzyskać wyniki wystąpienia zaplanowanego zadania, użyj Receive-Job
polecenia cmdlet . Następujące polecenie pobiera wyniki najnowszego wystąpienia zadania ProcessJob (identyfikator = 50).
Receive-Job -ID 50
Podstawowa metoda znajdowania wyników zadań na dysku
Aby zarządzać zaplanowanymi zadaniami, użyj poleceń cmdlet zadań, takich jak Get-Job
i Receive-Job
.
Jeśli Get-Job
wystąpienie zadania nie zostanie wyświetlone lub Receive-Job
nie otrzyma wyników zadania, możesz wyszukać pliki historii wykonywania dla zadania na dysku.
Historia wykonywania zawiera rekord wszystkich wyzwolonych wystąpień zadań.
Sprawdź, czy w katalogu znajduje się katalog o nazwie sygnatury czasowej dla zaplanowanego zadania w następującej ścieżce:
$HOME\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJob\<ScheduledJobName>\Output
Na przykład:
C:\Users<UserName>\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJob\<ScheduledJobName>\Output
Na przykład polecenie Get-ChildItem
cmdlet pobiera historię wykonywania na dysku zaplanowanego zadania ProcessJob .
$Path = '$HOME\AppData\Local\Microsoft\Windows\PowerShell'
$Path += '\ScheduledJobs\ProcessJob\Output'
Get-ChildItem $Path
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
Za każdym razem katalog o nazwie timestamp reprezentuje wystąpienie zadania. Wyniki każdego wystąpienia zadania są zapisywane w pliku Results.xml w katalogu nazwanym sygnaturą czasową.
Na przykład następujące polecenie pobiera pliki Results.xml dla każdego zapisanego wystąpienia zaplanowanego zadania ProcessJob . Jeśli brakuje pliku Results.xml, program PowerShell nie może zwrócić ani wyświetlić wyników zadania.
$Path = '$HOME\AppData\Local\Microsoft\Windows\PowerShell'
$Path += '\ScheduledJobs\ProcessJob\Output\*\Results.xml'
Get-ChildItem $Path
Directory: C:\Users\User01\Appdata\Local\Microsoft\Windows\PowerShell
\ScheduledJobs\ProcessJob\Output
Polecenie cmdlet zadania może nie być w stanie pobrać zaplanowanych wystąpień zadań lub ich wyników, ponieważ moduł PSScheduledJob nie jest importowany do sesji.
Uwaga
Przed użyciem polecenia cmdlet zadania w zaplanowanych wystąpieniach zadań sprawdź, czy moduł PSScheduledJob jest uwzględniony w sesji. Bez modułu PSScheduledJob polecenia cmdlet zadania nie mogą uzyskać zaplanowanych wystąpień zadań ani ich wyników.
Aby zaimportować moduł PSScheduledJob :
Import-Module PSScheduledJob
Polecenie cmdlet Receive-Job mogło już zwrócić wyniki
Jeśli Receive-Job
wystąpienie zadania nie zwraca wyników, może to być spowodowane uruchomieniem Receive-Job
polecenia dla tego wystąpienia zadania w bieżącej sesji bez parametru Keep .
W przypadku użycia Receive-Job
bez parametru Receive-Job
Keep zwraca wyniki zadania i ustawia właściwość HasMoreData wystąpienia zadania na wartość False. Wartość False oznacza, że Receive-Job
zwrócił wyniki zadania, a wystąpienie nie ma więcej wyników do zwrócenia. To ustawienie jest odpowiednie dla standardowych zadań w tle, ale nie dla wystąpień zaplanowanych zadań, które są zapisywane na dysku.
Aby ponownie uzyskać wyniki wystąpienia zadania, uruchom nową sesję programu PowerShell, wpisując polecenie PowerShell
. Zaimportuj moduł PSScheduledJob i spróbuj ponownie wykonać Receive-Job
polecenie.
Receive-Job -ID 50
#No results
PowerShell.exe
Windows PowerShell
Copyright (C) 2012 Microsoft Corporation. All rights reserved.
Import-Module PSScheduledJob
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
Używanie parametru Keep w celu uzyskania wyników więcej niż jeden raz w sesji
Aby uzyskać wynik wystąpienia zadania więcej niż jeden raz w sesji, użyj parametru Receive-Job
Keep polecenia cmdlet.
Import-Module PSScheduledJob
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
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
Zaplanowane zadanie może być uszkodzone
Jeśli zaplanowane zadanie zostanie uszkodzone, program PowerShell usunie uszkodzone zaplanowane zadanie i jego wyniki. Nie można odzyskać wyników uszkodzonego zaplanowanego zadania.
Aby określić, czy zaplanowane zadanie nadal istnieje, użyj Get-ScheduledJob
polecenia cmdlet .
Get-ScheduledJob
Liczba wyników mogła przekroczyć wartość ExecutionHistoryLength
Właściwość ExecutionHistoryLength zaplanowanego zadania określa, ile wystąpień zadania i ich wyniki są zapisywane na dysku. Wartość domyślna to 32. Gdy liczba wystąpień zaplanowanego zadania przekracza tę wartość, program PowerShell usuwa najstarsze wystąpienie zadania, aby zapewnić miejsce dla każdego nowego wystąpienia zadania.
Aby uzyskać wartość właściwości ExecutionHistoryLength zaplanowanego zadania, użyj następującego formatu polecenia:
(Get-ScheduledJob <JobName>).ExecutionHistoryLength
Na przykład następujące polecenie pobiera wartość właściwości ExecutionHistoryLength zaplanowanego zadania ProcessJob .
(Get-ScheduledJob ProcessJob).ExecutionHistoryLength
Aby ustawić lub zmienić wartość właściwości ExecutionHistoryLength , użyj parametru MaxResultCount poleceń Register-ScheduledJob
cmdlet i Set-ScheduledJob
.
Następujące polecenie zwiększa wartość właściwości ExecutionHistoryLength do 50.
Get-ScheduledJob ProcessJob | Set-ScheduledJob -MaxResultCount 50
Wyniki wystąpienia zadania mogły zostać usunięte
Parametr Set-ScheduledJob
ClearExecutionHistory polecenia cmdlet usuwa historię wykonywania zadania. Za pomocą tej funkcji można zwolnić miejsce na dysku lub usunąć wyniki, które nie są potrzebne, lub zostały już użyte, przeanalizowane lub zapisane w innej lokalizacji.
Aby usunąć historię wykonywania zaplanowanego zadania, użyj parametru ClearExecutionHistory zaplanowanego zadania.
Następujące polecenie usuwa historię wykonywania zaplanowanego zadania ProcesuJob .
Get-ScheduledJob ProcessJob | Set-ScheduledJob -ClearExecutionHistory
Remove-Job
Ponadto polecenie cmdlet usuwa wyniki zadania. Usunięcie zaplanowanego zadania powoduje Remove-Job
usunięcie wszystkich wystąpień zadania na dysku, w tym historii wykonywania i wszystkich wyników zadania.
Zadania uruchomione przy użyciu polecenia cmdlet Start-Job nie są zapisywane na dysku
Gdy używasz Start-Job
polecenia do uruchamiania zaplanowanego zadania, zamiast używać wyzwalacza zadania, Start-Job
uruchamia standardowe zadanie w tle. Zadanie w tle i jego wyniki nie są przechowywane w historii wykonywania zadania na dysku.
Możesz użyć Get-Job
polecenia cmdlet , aby pobrać zadanie i Receive-Job
polecenie cmdlet, aby uzyskać wyniki zadania, ale wyniki są dostępne tylko do momentu ich otrzymania, chyba że użyjesz parametru Receive-Job
Keep polecenia cmdlet.
Ponadto zadania w tle i ich wyniki są specyficzne dla sesji; istnieją tylko w sesji, w której są tworzone. Jeśli usuniesz zadanie za pomocą Remove-Job
polecenia , zamknij sesję lub zamknij program PowerShell, wystąpienie zadania i jego wyniki zostaną usunięte.
Zaplanowane zadanie nie jest uruchamiane
Zaplanowane zadania nie są uruchamiane automatycznie, jeśli zadanie jest wyłączone lub zaplanowane zadanie.
Użyj polecenia cmdlet , Get-ScheduledJob
aby pobrać zaplanowane zadanie. Sprawdź, czy wartość właściwości Włączone zaplanowanego zadania to True.
Get-ScheduledJob ProcessJob
Id Name Triggers Command Enabled
-- ---- -------- ------- -------
4 ProcessJob {1, 2} Get-Process True
(Get-ScheduledJob ProcessJob).Enabled
True
Get-JobTrigger
Użyj polecenia cmdlet , aby pobrać wyzwalacze zadania zaplanowanego.
Sprawdź, czy wartość właściwości Enabled wyzwalacza zadania to True.
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
Get-ScheduledJob ProcessJob|Get-JobTrigger|Format-Table ID, Enabled -Auto
Id Enabled
-- -------
1 True
2 True
Zaplanowane zadania nie są uruchamiane automatycznie, jeśli wyzwalacze zadania są nieprawidłowe
Na przykład wyzwalacz zadania może określić datę w przeszłości lub datę, która nie występuje, na przykład 5. poniedziałek miesiąca.
Zaplanowane zadania nie są uruchamiane automatycznie, jeśli warunki wyzwalacza zadania lub opcje zadania nie są spełnione.
Na przykład zaplanowane zadanie uruchamiane tylko wtedy, gdy określony użytkownik zaloguje się na komputerze, nie zostanie uruchomione, jeśli ten użytkownik nie zaloguje się lub połączy się tylko zdalnie.
Sprawdź opcje zaplanowanego zadania i upewnij się, że są one spełnione. Na przykład zaplanowane zadanie, które wymaga, aby komputer był w stanie bezczynności lub wymaga połączenia sieciowego albo ma długą wartość IdleDuration lub krótką wartość IdleTimeout , może nigdy nie działać.
Get-ScheduledJobOption
Użyj polecenia cmdlet, aby sprawdzić opcje zadania i ich wartości.
Get-ScheduledJobOption -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
Opisy zaplanowanych opcji zadań można znaleźć w temacie New-ScheduledJobOption.
Wystąpienie zaplanowanego zadania mogło zakończyć się niepowodzeniem
Jeśli zaplanowane polecenie zadania zakończy się niepowodzeniem, program PowerShell natychmiast zgłosi go, generując komunikat o błędzie. Jeśli jednak zadanie zakończy się niepowodzeniem, gdy harmonogram zadań spróbuje go uruchomić, błąd nie jest dostępny dla programu PowerShell.
Użyj następujących metod, aby wykryć i poprawić błędy zadań:
Sprawdź dziennik zdarzeń harmonogramu zadań pod kątem błędów. Aby sprawdzić dziennik, użyj polecenia Podgląd zdarzeń lub programu PowerShell, takiego jak:
Get-WinEvent -LogName Microsoft-Windows-TaskScheduler/Operational |
Where {$_.Message -like "fail"}
Sprawdź rekord zadania w harmonogramie zadań. Zaplanowane zadania programu PowerShell są przechowywane w następującym folderze Zaplanowano zadanie:
Task Scheduler Library\Microsoft\Windows\PowerShell\ScheduledJobs
Zaplanowane zadanie może nie zostać uruchomione z powodu niewystarczających uprawnień
Zaplanowane zadania są uruchamiane z uprawnieniami użytkownika, który utworzył zadanie lub uprawnienia użytkownika, który jest określony przez parametr Credential w poleceniu Register-ScheduledJob
lub Set-ScheduledJob
.
Jeśli ten użytkownik nie ma uprawnień do uruchamiania poleceń lub skryptów, zadanie kończy się niepowodzeniem.
Nie można pobrać zaplanowanego zadania lub zaplanowanego zadania jest uszkodzony
W rzadkich przypadkach zaplanowane zadania mogą stać się uszkodzone lub zawierać wewnętrzne sprzeczności, których nie można rozwiązać. Zazwyczaj dzieje się tak, gdy pliki XML zaplanowanego zadania są edytowane ręcznie, co powoduje nieprawidłowy kod XML.
Gdy zaplanowane zadanie jest uszkodzone, program PowerShell próbuje usunąć zaplanowane zadanie, jego historię wykonywania i wyniki z dysku.
Jeśli nie można usunąć zaplanowanego zadania, za każdym razem, gdy uruchomisz polecenie cmdlet, zostanie wyświetlony uszkodzony komunikat o błędzie Get-ScheduledJob
zadania.
Aby usunąć uszkodzone zaplanowane zadanie, użyj jednej z następujących metod:
<ScheduledJobName>
Usuń katalog zaplanowanego zadania. Nie usuwaj katalogu ScheduledJob .
Lokalizacja katalogu:
$env:UserProfile\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs<ScheduledJobName>
Na przykład:
C:\Users<UserName>\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs<ScheduledJobName>.
Użyj harmonogramu zadań, aby usunąć zaplanowane zadanie. Zaplanowane zadania programu PowerShell są wyświetlane w następującej ścieżce harmonogramu zadań:
Task Scheduler Library\Microsoft\Windows\PowerShell\ScheduledJobs<ScheduledJobName>
Polecenia cmdlet zadań nie mogą stale znajdować zaplanowanych zadań
Gdy moduł PSScheduledJob nie znajduje się w bieżącej sesji, polecenia cmdlet zadania nie mogą pobierać zaplanowanych zadań, uruchamiać ich ani pobierać wyników.
Aby zaimportować moduł PSScheduledJob , wpisz Import-Module PSScheduledJob
lub uruchom lub pobierz dowolne polecenie cmdlet w module, takie jak Get-ScheduledJob
polecenie cmdlet.
Począwszy od programu PowerShell 3.0, moduły są importowane automatycznie po pobraniu lub użyciu dowolnego polecenia cmdlet w module.
Jeśli moduł PSScheduledJob nie znajduje się w bieżącej sesji, możliwa jest następująca sekwencja poleceń.
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
Get-Job
Get-ScheduledJob ProcessJob
Id Name Triggers Command Enabled
-- ---- -------- ------- -------
4 ProcessJob {1} Get-Process True
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
To zachowanie występuje, ponieważ Get-ScheduledJob
polecenie automatycznie importuje moduł PSScheduledJob , a następnie uruchamia polecenie .