moet u veel geplande taken maken of het aanmaken van geplande taken automatiseren? Dan heb je geluk. In dit artikel ga je leren hoe je geplande taken kunt beheren met PowerShell.
geplande taken die eenvoudige acties uitvoeren zijn snel te maken en comfortabel genoeg om te herhalen met behulp van de Taakplanner app interface (GUI). Maar systeembeheerders of ontwikkelaars moeten mogelijk meer gecompliceerde taken met meerdere schema ‘ s, triggers of argumenten implementeren.
gelukkig kunt u PowerShell gebruiken om geplande taken aan te maken en te beheren. Het beheren van geplande taken met PowerShell is mogelijk gemaakt met het gebruik van de ScheduledTasks module die is ingebouwd in Windows.
inhoudsopgave
Prerequisites
aangezien dit een “leren-door-doen” Type artikel is, zijn er enkele prerequisites die u kunt volgen. Hieronder vindt u de vereisten om PowerShell geplande taken te maken met PowerShell.
- De voorbeelden in dit artikel gebruiken Windows 10. Maar Windows Server 2012 en nieuwer kunnen hetzelfde doen.
- Windows PowerShell 5.1 of PowerShell 7.
- het zou helpen als u een script editor zoals Visual Studio Code, Notepad++, of Windows PowerShell ISE.
een nieuwe geplande taak aanmaken
een geplande taak vereist minimaal twee componenten om te werken; actie en trigger. Het toevoegen van een beveiligingscontext en een set gerelateerde instellingen is optioneel. Voor een beter begrip, zie de korte uitleg voor elke geplande taak component hieronder:
- actie-de actie die wordt uitgevoerd door de geplande taak. Een actie is meestal om een programma of een script uit te voeren. Een geplande taak kan meerdere acties hebben.
- Trigger-controls wanneer de geplande taak wordt uitgevoerd. Triggers kunnen op tijd gebaseerd zijn, zoals het instellen van een schema voor dagelijkse of uurlijkse herhaling. Triggers kunnen ook activiteitengebaseerd zijn, waarbij een taak wordt uitgevoerd op basis van gedetecteerde activiteiten zoals het opstarten van de computer, een gebruiker die zich aanmeldt of geregistreerde gebeurtenissen.
- Principal-bepaalt de beveiligingscontext die wordt gebruikt om de geplande taak uit te voeren. Een principal bevat onder andere het gebruikersaccount en het vereiste privilege dat door de geplande taak wordt gebruikt.
- instellingen-is een set van opties en voorwaarden die bepaalt hoe het geplande taak gedrag. U kunt bijvoorbeeld een taak aanpassen om te worden verwijderd na een opeenvolgend aantal dagen dat de taak niet is gebruikt.
tijdens het aanmaken van een geplande taak zijn de principal en instellingen niet expliciet vereist. De standaardwaarden worden in plaats daarvan gebruikt.
een taakactie aanmaken
Als u wilt dat een geplande taak iets doet, maak dan een nieuwe taakactie aan. In dit voorbeeld maak je een taak aan die de PowerShell zal aanroepen.exe en voer een script uit. Zorg ervoor dat je script editor klaar staat.
merk op dat het script hieronder slechts een willekeurig voorbeeld is en dat u het niet hoeft te gebruiken. Je mag elk script gebruiken dat je wilt. Echter, met behulp van het script hieronder creëert een gemakkelijk verifieerbaar resultaat dat kan bevestigen of de geplande taak werkte.
het voorbeeld script hieronder, wanneer uitgevoerd, krijgt de top tien laatste gebeurtenissen uit de toepassing event log. Exporteer vervolgens de gebeurtenissen naar een nieuw XML-bestand in de c:\temp map. Kopieer de onderstaande code, plak deze in je script editor en sla op met de bestandsnaam Get-LatestAppLog.ps1 in elke gewenste map.
de onderstaande code gebruikt de New-ScheduledTaskAction
om een nieuw actieobject voor geplande taken aan te maken dat is opgeslagen in de $taskAction
variabele. Deze actie zal het powershell.exe
uitvoerbare programma aanroepen en het argument doorgeven om het C:\scripts\Get-LatestAppLog.ps1.
kopieer het bovenstaande commando en voer het uit in PowerShell. Het resulterende object in de variabele $taskAction
moet eruit zien als de onderstaande schermafbeelding.
een Trigger
toevoegen nu u een taakactie hebt aangemaakt, is de volgende stap om te bepalen wanneer de taak moet worden uitgevoerd. De te gebruiken cmdlet voor het maken van een trigger is de New-ScheduledTaskTrigger
cmdlet. Het onderstaande commando maakt een trigger om dagelijks om 15.00 uur te draaien. Kopieer en voer de code uit in PowerShell.
# Create a new trigger (Daily at 3 AM)$taskTrigger = New-ScheduledTaskTrigger -Daily -At 3PM$tasktrigger
het resulterende object in de $tasktrigger
variabele moet er hetzelfde uitzien als de afbeelding hieronder.
de taak registreren
tot nu toe hebt u de basisvereisten gemaakt om een nieuwe geplande taak aan te maken. De volgende stap is om de geplande taak te maken en te registreren in het systeem.
de onderstaande code gebruikt deRegister-ScheduledTask
cmdlet om de geplande taak te registreren. De parameter -Action
is nodig om het taakactieobject door te geven dat is opgeslagen in de variabele met de naam $taskAction
. De-Trigger
parameter is nodig om de$taskTrigger
variabele inhoud te geven.
# Register the new PowerShell scheduled task# The name of your scheduled task.$taskName = "ExportAppLog"# Describe the scheduled task.$description = "Export the 10 newest events in the application log"# Register the scheduled taskRegister-ScheduledTask ` -TaskName $taskName ` -Action $taskAction ` -Trigger $taskTrigger ` -Description $description
kopieer de bovenstaande code en voer het uit in PowerShell. Als gevolg hiervan wordt de nieuwe geplande taak geregistreerd, zoals hieronder weergegeven.
het uitvoeren van de taak
na het aanmaken van een geplande taak moet u bevestigen dat de geplande taak nu in het systeem bestaat. Open de Taakplanner en zoek de geplande taak in de lijst. U zou de geregistreerde taak op de lijst moeten zien.
u kunt ook bevestigen dat de geregistreerde geplande taak bestaat door het uitvoeren van de PowerShell-opdracht hieronder.
Get-ScheduledTaskInfo -TaskName ExportAppLog
u zou dan een vergelijkbare uitvoer moeten zien, zoals de screenshot van het onderstaande resultaat.
en tot slot moet uw nieuwe geplande taak werken om te bepalen of wat u tot nu toe deed succesvol was. Als u de geplande taak wilt testen, kunt u wachten op het volgende uitvoerschema of de onderstaande opdracht gebruiken om handmatig te activeren.
Start-ScheduledTask -TaskName ExportAppLog
na het uitvoeren van de code zou u een vergelijkbaar resultaat moeten zien als hieronder. Zoals u kunt zien, heeft het uitvoeren van de code een XML-bestand gemaakt, wat aangeeft dat de geplande taak werkte zoals verwacht.
het bijwerken van een bestaande geplande taak
na het aanmaken van een geplande taak kunnen sommige aspecten ervan op een gegeven moment moeten worden bijgewerkt. Misschien wilt u het een uur eerder laten draaien of de locatie van het script-bestand wijzigen. Dat zijn enkele van de wijzigingen aan de geplande taak die nodig kunnen zijn.
in de volgende secties leert u hoe u bestaande geregistreerde geplande taken kunt wijzigen met behulp van PowerShell.
het gebruikersaccount, beveiligingsopties en compatibiliteitsinstellingen wijzigen
in de vorige sectie wordt de geplande taak uitgevoerd onder dezelfde gebruikersaccountcontext die deze heeft gemaakt. Wat als de taak moet worden uitgevoerd met een ander gebruikersaccount, zoals een serviceaccount, bijvoorbeeld.
in dit voorbeeld wijzigt u de beveiligingsopties van de geplande taak naar onderstaande instellingen.
- u moet het gebruikersaccount wijzigen om de geplande taak uit te voeren.
- laat de taak uitvoeren, ongeacht of de gebruiker is aangemeld of niet.
- Voer de met de hoogste privileges.
- stel de compatibiliteit van de taak in op Windows 10.
de eerste regel in de onderstaande code maakt een hoofdobject aan met het nieuwe gebruikersaccount en stelt de taak in om te draaien met de hoogste rechten. Zorg ervoor dat u de waarde van de parameter -UserID
wijzigt zoals vereist. De tweede regel configureert de compatibiliteit van de taak met Windows 10.
ten slotte werkt de derde regel de ExportAppLog
**geplande taak bij met behulp van de waarden opgeslagen in the $taskPrincipal
en $taskSettings
variabelen. Kopieer de onderstaande code en voer deze uit in PowerShell.
# Set the task principal's user ID and run level.$taskPrincipal = New-ScheduledTaskPrincipal -UserId 'DEVPC\svcTask' -RunLevel Highest# Set the task compatibility value to Windows 10.$taskSettings = New-ScheduledTaskSettingsSet -Compatibility Win8# Update the task principal settingsSet-ScheduledTask -TaskName 'ExportAppLog' -Principal $taskPrincipal -Settings $taskSettings
u zult merken dat de
-Compatibility
parameterwaardeWin8
is. Raak niet in de war. Het lijkt erop dat Microsoft niet heeft bijgewerkt de “laatste” versie selectie sinds Windows 8. Niettemin zal het opgeven van de waardeWin8
resulteren in Windows 10-Compatibiliteit.
volgende commando gebruikt de Set-ScheduledTask
cmdlet om de bestaande ExportAppLog
**geplande taak bij te werken. Zorg ervoor dat u de wachtwoordwaarde wijzigt in de parameter -Password
om het juiste wachtwoord van het gebruikersaccount te gebruiken.
# Update the task user account and passwordSet-ScheduledTask -TaskName 'ExportAppLog' -User $taskPrincipal.UserID -Password 'PASSWORD'
na het uitvoeren van het bovenstaande commando wordt de geplande taak bijgewerkt. Als u de geplande taak aanvinkt, kunt u bevestigen dat de beveiligingsopties zijn gewijzigd.
de Trigger veranderen
soms moet het triggerschema worden gewijzigd. Misschien vanwege een aantal operationele aanpassingen of resource optimalisatie. In ieder geval kunt u PowerShell ook gebruiken om triggers te vervangen of toe te voegen aan een geplande taak.
momenteel wordt de geplande taak ExportAppLog elke dag om 15.00 uur gestart. Stel dat je nodig hebt om de trigger schema te veranderen om dagelijks om 16: 30 PM en 01:00 AM. U moet eerst twee nieuwe taak trigger objecten voor de twee schema ‘ s te maken.
$taskTrigger1 = New-ScheduledTaskTrigger -Daily -At 4:30PM$taskTrigger2 = New-ScheduledTaskTrigger -Daily -At 1:00AM
gebruik dan het onderstaande commando om de trigger van de geplande taak bij te werken. U zult merken dat de parameter -Trigger
de twee taken triggerobjecten accepteert, namelijk $taskTrigger1
en $taskTrigger2
.
bovendien, omdat u een geplande taak bijwerkt met een wachtwoord dat is opgeslagen voor het gebruikersaccount, moet u de -User
en -Password
waarden opnieuw opgeven.
Set-ScheduledTask -TaskName 'ExportAppLog' -Trigger $taskTrigger1,$taskTrigger2 -User 'DEVPC\svcTask' -Password 'PASSWORD'
Hieronder is het verwachte resultaat na het uitvoeren van de code.
en zoals u hieronder kunt zien, zijn er nu twee triggers in de exportapplog geplande taak.
het verwijderen en herstellen van een geplande taak
geplande taken kunnen na verloop van tijd achterhaald zijn. Op een gegeven moment, je kan nodig zijn om het huishouden uit te voeren voor geplande taken. In deze sectie leert u hoe u geplande taakverwijdering in PowerShell kunt beheren.
back-up maken van een geplande taak
voordat u geplande taken verwijdert, is het goed om eerst een back-up te maken. Een back-up van geplande taken geeft u een herstelpunt voor wanneer er dingen mis gaan.
er is geen ingebouwde cmdlet om een geplande taak back-up te maken. Maar alles in PowerShell is een object en het exporteren van objecten naar een bestand is mogelijk. Als u een back-up van een object naar een bestand wilt maken, gebruik dan deImport-Clixml
cmdlet.
de voorbeeldcode hieronder exporteert de geplande taak met de naam ExportAppLog naar een bestand. U kunt de bestandsnaam en de locatie per uw voorkeur wijzigen.
onderstaande afbeelding toont het verwachte XML-uitvoerbestand.
een geplande taak verwijderen
zodra u een back-up van de geplande taak hebt gemaakt, kunt u die geplande taak nu verwijderen. De code hieronder verwijdert de geplande taak met de naam ExportAppLog. Kopieer onderstaande code en voer uit in PowerShell.
# Unregister the scheduled taskUnregister-ScheduledTask -TaskName 'ExportAppLog' -Confirm:$false
hoewel niet vereist, is het altijd goed om het resultaat van het verwijderen van de geplande taak te bevestigen. Gebruik het onderstaande commando om te controleren of de geplande taak niet meer bestaat.
Get-ScheduledTask -TaskName 'ExportAppLog'
als de geplande taak niet meer bestaat, moet u een uitvoer krijgen zoals hieronder weergegeven.
merk op dat de geplande taak back-up niet bestaat inclusief wachtwoorden.
een geplande taak herstellen
dus u hebt de geplande taak verwijderd, en dan blijkt dat het niet de bedoeling was! Wat nu? Dit soort situaties maakt u het concept van back-ups nog meer waarderen.
u kunt de geplande taak opnieuw maken met behulp van het XML-back-upbestand met PowerShell. En zo kun je het herstellen.
importeer eerst de XML-back-up in uw PowerShell-sessie. De code hieronder importeert het bestand c:\temp\ExportAppLog.xml. Als gevolg hiervan zal de variabele $stBackup
de geïmporteerde gegevens bevatten.
# Import the Schedule Task backup$stBackup = Import-Clixml -Path c:\temp\ExportAppLog.xml
gebruik de onderstaande code om de waarde van LogOnType
te resetten naar Interactive
. Het resetten van de LogonType-waarde is van cruciaal belang om een succesvolle geplande taakherstel te garanderen.
# Reset the logon type to "Run only when the user is logged on."$stBackup.Principal.LogonType = 'Interactive'
de volgende stap is het aanmaken van een nieuw gepland Taakobject. De onderstaande code maakt een nieuwe geplande taak aan. De variabele $restoreTask
slaat het resulterende geplande taakobject op.
u zult merken dat de waarden die aan de parameters worden doorgegeven, de waarden zijn die uit de back-up zijn geïmporteerd. De geïmporteerde waarden staan in de variabele $restoreTask
. De parameters zijn Action
Trigger
Settings
, en Principal.
na het aanmaken van het geplande taakobject is het tijd om de geplande taak te registreren. Gebruik de onderstaande code om de herstelde geplande taak te registreren.
in dit voorbeeld is de naam van de taak ‘ ExportAppLog_restored.’DeInputObject
parameter accepteert het geplande taakobject in de$restoreTask
variabele. Zorg ervoor dat u de juiste user
en password
waarden gebruikt.
de code is nu compleet. Kopieer en voer de code uit in PowerShell om de verwijderde geplande taak te herstellen. De screenshot hieronder toont de verwachte uitvoer na het uitvoeren van de code.
nu wordt de geplande taak in het systeem geregistreerd. De screenshot hieronder toont de herstelde geplande taak.
samenvatting
De functie geplande taken in Windows is een uitstekend hulpmiddel voor het instellen van taken of taken. U kunt de meest elementaire tot meer complexe taken te maken. De Instellingen en opties zijn flexibel.
met de PowerShell Scheduled Tasks module wordt het instellen van geplande taken met behulp van PowerShell commando ‘ s mogelijk gemaakt. Deze module biedt de mogelijkheid en middelen om geplande taken programmatisch op de lokale en externe computers te maken en te implementeren.
Microsoft heeft de module ScheduledTasks niet bijgewerkt, en sommige geavanceerde instellingen zijn nog niet gemakkelijk te zien als PowerShell-cmdlets. Een voorbeeld is het creëren van een trigger voor “On workstation unlock.”Maar, u kunt deze geavanceerde instellingen te bereiken met behulp van de bestaande Taakplanner CIM klasse.
niettemin is de PowerShell Scheduled Tasks module nog steeds een uitstekend en geschikt hulpmiddel dat u kunt toevoegen aan uw PowerShell arsenaal.