Adam the Automator

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 nieuwe geplande taakactie aanmaken

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.

een Trigger aanmaken (dagelijks om 3 uur)

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.

registratie van de nieuwe geplande taak

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.

de nieuwe geplande taak zoals te zien in de Taakplanner app

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.

het verkrijgen van de geplande taakinformatie.

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 uitvoeren van de geplande taak

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 parameterwaarde Win8is. 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 waarde Win8 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 beveiligingsoptie, gebruikersaccount en compatibiliteitsinstellingen

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.

de geplande taak bijwerken met meerdere triggers

en zoals u hieronder kunt zien, zijn er nu twee triggers in de exportapplog geplande taak.

de geplande taak met meerdere triggers

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.

back-up maken van een geplande taak

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.

controleren of de geplande taak niet langer bestaat

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 ActionTriggerSettings, 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.

een verwijderde geplande taak herstellen van een XML-back-up

nu wordt de geplande taak in het systeem geregistreerd. De screenshot hieronder toont de herstelde geplande taak.

het vinden van 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.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.