Adam The Automator

behöver du skapa många schemalagda uppgifter eller automatisera skapandet av schemalagda uppgifter? Om så är fallet har du tur. I den här artikeln kommer du att lära dig hur du hanterar schemalagda aktiviteter med PowerShell.

Schemalagda uppgifter som utför enkla åtgärder är snabba att göra och bekväma nog att upprepa med hjälp av Task Scheduler app interface (GUI). Men systemadministratörer eller utvecklare kan behöva distribuera mer komplicerade uppgifter med flera scheman, utlösare eller argument.

lyckligtvis kan du använda PowerShell för att skapa och hantera schemalagda uppgifter. Hantering av schemalagda uppgifter med PowerShell möjliggörs med hjälp av ScheduledTasks-modulen som är inbyggd i Windows.

Innehållsförteckning

förutsättningar

eftersom det här är en lärande typ av artikel finns det några förutsättningar så att du kan följa med. Nedan följer kraven för att skapa PowerShell-schemalagda uppgifter med PowerShell.

  • exemplen i den här artikeln använder Windows 10. Men Windows Server 2012 och nyare kan göra detsamma.
  • Windows PowerShell 5.1 eller PowerShell 7.
  • Det skulle hjälpa om du hade en skriptredigerare som Visual Studio Code, Notepad++ eller Windows PowerShell ise.

skapa en ny schemalagd aktivitet

en schemalagd aktivitet kräver minst två komponenter för att fungera; åtgärd och utlösare. Att lägga till ett säkerhetskontext och en uppsättning relaterade inställningar är valfritt. För bättre förståelse, se den korta förklaringen för varje schemalagd aktivitetskomponent nedan:

  • åtgärd-åtgärden som utförs av den schemalagda aktiviteten. En åtgärd är vanligtvis att köra ett program eller ett skript. En schemalagd aktivitet kan ha mer än en åtgärd.
  • Trigger-styr när den schemalagda aktiviteten körs. Utlösare kan vara tidsbaserade, som att ställa in ett schema för daglig eller timme återkommande. Utlösare kan också vara aktivitetsbaserade, som kör en uppgift baserad på upptäckta aktiviteter som datorstart, en användare loggar in eller loggade händelser.
  • Principal-styr säkerhetskontexten som används för att köra den schemalagda aktiviteten. Bland annat innehåller en huvudman användarkontot och det nödvändiga privilegiet som används av den schemalagda aktiviteten.
  • inställningar-är en uppsättning alternativ och villkor som styr hur den schemalagda aktiviteten beteende. Som ett exempel kan du anpassa en aktivitet så att den tas bort efter ett antal dagar i följd som aktiviteten inte används.

under en schemalagd aktivitet skapas inte principen och inställningarna uttryckligen. Standardvärdena används istället.

skapa en Aktivitetsåtgärd

När du vill att en schemalagd aktivitet ska göra något, skapa en ny aktivitetsåtgärd. I det här exemplet skapar du en uppgift som kommer att ringa PowerShell.exe och kör ett skript. Se till att ha din skriptredigerare redo.

Observera att skriptet nedan bara är ett slumpmässigt exempel och du behöver inte använda det. Du kan använda vilket skript du vill. Men med hjälp av skriptet nedan skapas ett lätt verifierbart resultat som kan bekräfta om den schemalagda aktiviteten fungerade.

exempelskriptet nedan, när det körs, får de tio senaste händelserna från programhändelseloggen. Exportera sedan händelserna till en ny XML-fil i c:\temp mapp. Kopiera koden nedan, klistra in den i din skriptredigerare och spara med filnamnet Get-LatestAppLog.ps1 i vilken mapp du vill.

koden nedan använderNew-ScheduledTaskAction för att skapa ett nytt åtgärdsobjekt för schemalagd aktivitet som lagras i variabeln$taskAction. Denna åtgärd kommer att ringapowershell.exe körbar och skicka argumentet för att köra C:\scripts\Get-LatestAppLog.ps1.

kopiera kommandot ovan och kör det i PowerShell. Det resulterande objektet i variabeln $taskAction ska se ut som skärmdumpen nedan.

skapa en ny Schemalagd Aktivitetsåtgärd

lägga till en utlösare

Nu när du har skapat en uppgiftsåtgärd, är nästa steg är att definiera när uppgiften måste köras. Cmdlet som ska användas för att skapa en utlösare är New-ScheduledTaskTrigger cmdlet. Kommandot nedan skapar en utlösare för att köra dagligen klockan 3. Kopiera och kör koden i PowerShell.

# Create a new trigger (Daily at 3 AM)$taskTrigger = New-ScheduledTaskTrigger -Daily -At 3PM$tasktrigger

det resulterande objektet i variabeln$tasktrigger ska se ut som bilden nedan.

skapa en Trigger (dagligen klockan 3)

registrera uppgiften

hittills har du skapat baskraven för att skapa en ny schemalagd aktivitet. Nästa steg är att skapa den schemalagda uppgiften och registrera den i systemet.

koden nedan använder Register-ScheduledTask cmdlet för att registrera den schemalagda aktiviteten. Parametern-Action är nödvändig för att passera aktivitetsåtgärdobjektet som är lagrat i variabeln$taskAction. Parametern-Trigger behövs för att skicka$taskTrigger variabelt innehåll.

# 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

kopiera koden ovan och kör den i PowerShell. Som ett resultat registreras den nya schemalagda aktiviteten, som visas nedan.

registrera den nya schemalagda aktiviteten

köra uppgiften

När du har skapat en schemalagd aktivitet bör du bekräfta att den schemalagda aktiviteten är uppgiften finns nu i systemet. Öppna uppgiftsschemaläggaren och hitta den schemalagda aktiviteten från listan. Du bör se den registrerade uppgiften på listan.

den nya schemalagda aktiviteten som ses i Task Scheduler-appen

Du kan också bekräfta att den registrerade schemalagda aktiviteten existerar genom att köra PowerShell-kommandot nedan.

Get-ScheduledTaskInfo -TaskName ExportAppLog

Du bör då se en liknande utgång, som skärmdumpen av resultatet nedan.

hämta den schemalagda aktivitetsinformationen.

och slutligen bör din nya schemalagda uppgift fungera för att avgöra om det du gjorde hittills lyckades. För att testa den schemalagda aktiviteten kan du antingen vänta på nästa körschema eller använda kommandot nedan för att manuellt utlösa.

Start-ScheduledTask -TaskName ExportAppLog

När du har kört koden bör du se ett liknande resultat som det som visas nedan. Som du kan se skapade koden en XML-fil, vilket indikerar att den schemalagda uppgiften fungerade som förväntat.

kör den schemalagda uppgiften

uppdatera en befintlig schemalagd uppgift

När du har skapat en schemalagd uppgift kan vissa aspekter av den behöva uppdatering någon gång. Kanske vill du göra det köra en timme tidigare eller ändra platsen för skriptfilen. Det är några av de ändringar i den schemalagda aktiviteten som kan krävas.

i nästa avsnitt lär du dig hur du gör ändringar i befintliga registrerade schemalagda uppgifter med PowerShell.

ändra användarkonto, säkerhetsalternativ och kompatibilitetsinställningar

i föregående avsnitt körs den schemalagda aktiviteten under samma användarkontokontext som skapade den. Vad händer om uppgiften behöver köras med ett annat användarkonto, till exempel ett servicekonto.

i det här exemplet ändrar du säkerhetsalternativen för den schemalagda aktiviteten till inställningarna nedan.

  • Du måste ändra användarkontot för att köra den schemalagda aktiviteten.
  • Tillåt uppgiften att köra om användaren loggat in eller inte.
  • kör med de högsta behörighetsnivåerna.
  • Ställ in uppgiftens kompatibilitet med Windows 10.

den första raden i koden nedan skapar ett huvudobjekt med det nya användarkontot och ställer in uppgiften att köra med de högsta behörigheterna. Se till att ändra värdet på parametern-UserID efter behov. Den andra raden konfigurerar uppgiftens kompatibilitet med Windows 10.

slutligen uppdaterar den tredje radenExportAppLog **schemalagd aktivitet med värdena lagrade ithe $taskPrincipal och$taskSettings variabler. Kopiera koden nedan och kör den i 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

Du kommer att märka att-Compatibility parametervärdet ärWin8. Bli inte förvirrad. Det verkar som om Microsoft inte har uppdaterat det ”senaste” versionsvalet sedan Windows 8. Ändå specificerar värdet Win8 kommer att resultera i Windows 10-kompatibilitet.

därefter använder kommandot nedanSet-ScheduledTask cmdlet för att uppdatera den befintligaExportAppLog **schemalagd aktivitet. Se till att ändra lösenordsvärdet i parametern -Password för att använda användarkontots korrekta lösenord.

# Update the task user account and passwordSet-ScheduledTask -TaskName 'ExportAppLog' -User $taskPrincipal.UserID -Password 'PASSWORD'

Efter att ha kört ovanstående kommando uppdateras den schemalagda aktiviteten. Om du kontrollerar den schemalagda aktiviteten kan du bekräfta att säkerhetsalternativen har ändrats.

säkerhetsalternativet, användarkontot och kompatibilitetsinställningarna

ändra utlösaren

Ibland måste utlösningsschemat vara förändrats. Kanske på grund av vissa operativa justeringar eller resursoptimering. I alla fall kan du också använda PowerShell för att ersätta eller lägga till utlösare i en schemalagd uppgift.

För närvarande utlöses den schemalagda aktiviteten ExportAppLog varje dag klockan 3. Antag att du måste ändra utlösningsschemat till dagligen klockan 4:30 och 1:00. Du måste först skapa två nya aktivitetsutlösningsobjekt för de två scheman.

$taskTrigger1 = New-ScheduledTaskTrigger -Daily -At 4:30PM$taskTrigger2 = New-ScheduledTaskTrigger -Daily -At 1:00AM

använd sedan kommandot nedan för att uppdatera den schemalagda aktivitetens utlösare. Du kommer att märka parametern -Trigger accepterar de två aktivitetsutlösarobjekten, nämligen $taskTrigger1 och $taskTrigger2.

dessutom, eftersom du uppdaterar en schemalagd aktivitet med ett lösenord som sparats för användarkontot, måste du ange värdena -User och -Password igen.

Set-ScheduledTask -TaskName 'ExportAppLog' -Trigger $taskTrigger1,$taskTrigger2 -User 'DEVPC\svcTask' -Password 'PASSWORD'

nedan är det förväntade resultatet efter att ha kört koden.

uppdatera den schemalagda aktiviteten med flera triggers

och som du kan se nedan finns det nu två triggers i den schemalagda aktiviteten ExportAppLog.

den schemalagda aktiviteten med flera utlösare

ta bort och återställa en schemalagd aktivitet

schemalagda aktiviteter kan bli föråldrade med tiden. Vid någon tidpunkt kan du behöva utföra hushållning för schemalagda uppgifter. I det här avsnittet lär du dig hur du hanterar schemalagd radering av aktiviteter i PowerShell.

säkerhetskopiera en schemalagd aktivitet

innan du fortsätter att ta bort schemalagda aktiviteter är det bra att göra en säkerhetskopia först. Säkerhetskopiera schemalagda uppgifter ger dig en återställningspunkt för när saker går fel.

det finns ingen inbyggd cmdlet för att göra en schemalagd uppgiftsbackup. Men allt i PowerShell är ett objekt, och det är möjligt att exportera objekt till fil. När du behöver säkerhetskopiera ett objekt till en fil, använd Import-Clixml cmdlet.

exempelkoden nedan exporterar den schemalagda aktiviteten med namnet ExportAppLog till en fil. Du kan ändra filnamn och plats enligt dina önskemål.

bilden nedan visar den förväntade XML-filen.

säkerhetskopiera en schemalagd aktivitet

ta bort en schemalagd aktivitet

När du har säkrat en säkerhetskopia av den schemalagda aktiviteten, du kan nu ta bort den schemalagda aktiviteten. Koden nedan tar bort den schemalagda aktiviteten med namnet ExportAppLog. Kopiera koden nedan och kör i PowerShell.

# Unregister the scheduled taskUnregister-ScheduledTask -TaskName 'ExportAppLog' -Confirm:$false

även om det inte krävs, är det alltid bra att bekräfta resultatet av den schemalagda uppgiftsraderingen. Använd kommandot nedan för att verifiera att den schemalagda aktiviteten inte längre existerar.

Get-ScheduledTask -TaskName 'ExportAppLog'

om den schemalagda aktiviteten inte längre finns, bör du få en utgång som den som visas nedan.

kontrollera om den schemalagda aktiviteten inte längre existerar

Observera att den schemalagda uppgiftsbackupen inte innehåller lösenord.

återställa en schemalagd uppgift

så du har tagit bort den schemalagda uppgiften, och sedan visar det sig att du inte skulle! Vad händer nu? Denna typ av situation gör att du uppskattar begreppet säkerhetskopior ännu mer.

Du kan återskapa den schemalagda aktiviteten med hjälp av XML-säkerhetskopian med PowerShell. Och här är hur du kan göra återställningen.

importera först XML-säkerhetskopian till din PowerShell-session. Koden nedan importerar filen c:\temp\ExportAppLog.xml. Som ett resultat kommer variabeln $stBackup att hålla den importerade data.

# Import the Schedule Task backup$stBackup = Import-Clixml -Path c:\temp\ExportAppLog.xml

använd sedan koden nedan för att återställa uppdragsgivarens LogOnType värde till Interactive. Återställning av LogonType-värdet är avgörande för att säkerställa en lyckad schemalagd aktivitetsåterställning.

# Reset the logon type to "Run only when the user is logged on."$stBackup.Principal.LogonType = 'Interactive'

nästa steg är att skapa ett nytt schemalagt Aktivitetsobjekt. Koden nedan skapar en ny schemalagd aktivitet. Variabeln$restoreTask lagrar det resulterande schemalagda aktivitetsobjektet.

Du kommer att märka att värdena som skickas till parametrarna är de som importeras från backup. De importerade värdena finns i variabeln$restoreTask. Parametrarna är ActionTriggerSettings och Principal.

När du har skapat det schemalagda aktivitetsobjektet är det dags att registrera den schemalagda aktiviteten. Använd koden nedan för att registrera den återställda schemalagda aktiviteten.

i det här exemplet är uppgiftsnamnet ’ ExportAppLog_restored.’ParameternInputObject accepterar det schemalagda aktivitetsobjektet i variabeln$restoreTask. Se till att du använder rättuser ochpassword värden.

koden är nu klar. Kopiera och kör koden i PowerShell för att återställa den raderade schemalagda uppgiften. Skärmdumpen nedan visar den förväntade utmatningen efter att ha kört koden.

återställa en raderad schemalagd uppgift från en XML-säkerhetskopia

nu är den schemalagda uppgiften registrerad i systemet. Skärmdumpen nedan visar den återställda schemalagda uppgiften.

hitta den återställda schemalagda uppgiften

sammanfattning

funktionen Schemalagda uppgifter i Windows är ett utmärkt verktyg för att ställa in uppgifter eller jobb. Du kan skapa de mest grundläggande till mer komplexa uppgifterna. Inställningarna och alternativen är flexibla.

med PowerShell-modulen för schemalagda uppgifter är det möjligt att ställa in schemalagda uppgifter med PowerShell-kommandon. Denna modul ger möjlighet och medel för att skapa och distribuera schemalagda uppgifter programmatiskt på lokala och fjärrdatorer.

Microsoft har inte uppdaterat modulen ScheduledTasks, och vissa avancerade inställningar är ännu inte lätt exponerade som PowerShell cmdlets. Ett exempel är att skapa en utlösare för ” on workstation unlock.”Men du kan uppnå dessa avancerade inställningar genom att använda den befintliga uppgiftsschemaläggaren CIM-klassen.

ändå är PowerShell-modulen för schemalagda uppgifter fortfarande ett utmärkt och kapabelt verktyg som du kan lägga till i din PowerShell-arsenal.

Lämna ett svar

Din e-postadress kommer inte publiceras.