Adam the Automator

Tarvitseeko sinun luoda paljon ajoitettuja tehtäviä tai automatisoida ajoitettujen tehtävien luonti? Jos olet, Sinua onnisti. Tässä artikkelissa opit hallitsemaan ajoitettuja tehtäviä Powershellissa.

aikataulutetut tehtävät, jotka suorittavat yksinkertaisia toimintoja, ovat nopeita tehdä ja riittävän mukavia toistaa Tehtävien ajoituksen sovelluskäyttöliittymän (GUI) avulla. Järjestelmän ylläpitäjät tai kehittäjät saattavat kuitenkin joutua ottamaan käyttöön monimutkaisempia tehtäviä, joissa on useita aikatauluja, käynnistimiä tai argumentteja.

onneksi voit käyttää Powershellia ajoitettujen tehtävien luomiseen ja hallintaan. Ajoitettujen tehtävien hallinta Powershellilla on mahdollista Windowsiin sisäänrakennetun ajoituksen Tehtävämoduulin avulla.

Sisällysluettelo

ennakkoedellytykset

koska kyseessä on learning by-doing-tyyppinen artikkeli, on olemassa joitakin ennakkoehtoja, joita voi seurata mukana. Alla on vaatimukset luoda PowerShell ajoitetut tehtävät Powershellilla.

  • tämän artikkelin esimerkeissä käytetään Windows 10: tä. Mutta Windows Server 2012 ja uudempi voi tehdä saman.
  • Windows PowerShell 5.1 tai PowerShell 7.
  • auttaisi, jos sinulla olisi skriptieditori, kuten Visual Studio Code, Notepad++ tai Windows PowerShell ISE.

uuden ajoitetun tehtävän luominen

ajoitettu tehtävä vaatii toimiakseen vähintään kaksi komponenttia; toiminnon ja laukaisun. Tietoturvakontekstin ja siihen liittyvien asetusten lisääminen on vapaaehtoista. Tarkempaa ymmärrystä löytyy alla olevasta kunkin ajoitetun tehtävän osan lyhyestä selityksestä:

  • toiminto – toiminto, joka suoritetaan ajoitetulla tehtävällä. Toiminto on tyypillisesti ohjelman tai komentosarjan ajamista. Ajoitetussa tehtävässä voi olla useampi kuin yksi toiminto.
  • Trigger – ohjaimet, kun ajoitettu tehtävä suoritetaan. Laukaisimet voivat olla aikaan perustuvia, kuten asettamalla aikataulu päivittäin tai tunnin toistumisen. Käynnistimet voivat olla myös toimintoperusteisia, mikä suorittaa tehtävän, joka perustuu havaittuihin toimintoihin, kuten tietokoneen käynnistykseen, käyttäjän kirjautumiseen tai kirjattuihin tapahtumiin.
  • Principal – ohjaa ajoitetun tehtävän suorittamiseen käytettyä suojauskontekstia. Päämies sisältää muun muassa käyttäjätilin ja vaaditun etuoikeuden, jota ajoitettu tehtävä käyttää.
  • asetukset – on joukko vaihtoehtoja ja ehtoja, jotka ohjaavat ajoitetun tehtävän käyttäytymistä. Esimerkiksi voit muokata tehtävän poistettavaksi peräkkäisten päivien jälkeen, jolloin tehtävä on käyttämättä.

ajoitetun tehtävän luomisen aikana pää-ja asetuksia ei erikseen vaadita. Oletusarvoja käytetään sen sijaan.

Tehtävätoiminnon luominen

kun haluat ajoitetun tehtävän tekevän jotain, Luo uusi tehtävätoiminto. Tässä esimerkissä luot tehtävän, jota kutsutaan Powershelliksi.exe ja suorita käsikirjoitus. Varmista, että komentosarjaeditori on valmis.

huomaa, että alla oleva skripti on vain satunnainen esimerkki, eikä sinun tarvitse käyttää sitä. Voit käyttää mitä tahansa komentosarjaa. Alla olevan komentosarjan käyttäminen luo kuitenkin helposti todennettavan tuloksen, joka voi vahvistaa, toimiko ajoitettu tehtävä.

alla oleva esimerkki-skripti saa suoritettuaan kymmenen viimeisintä tapahtumaa sovelluksen tapahtumalokista. Sitten, vie tapahtumat uuteen XML-tiedoston c:\temp kansio. Kopioi alla oleva koodi, liitä se komentosarjaeditoriin ja tallenna tiedostonimellä Get-LatestAppLog.ps1 missä tahansa haluamassasi kansiossa.

alla oleva koodi käyttää New-ScheduledTaskAction luodakseen uuden ajoitetun tehtäväobjektin, joka on tallennettu $taskAction muuttujaan. Tämä toiminto kutsuu powershell.exe suoritettavaksi ja siirtää argumentin ajettavaksi C:\scripts\Get-LatestAppLog.ps1.

Kopioi yllä oleva komento ja aja se Powershellissa. $taskAction muuttujan tuloksena olevan kohteen tulisi näyttää alla olevalta kuvakaappaukselta.

uuden ajoitetun Tehtävätoiminnon luominen

liipaisimen lisääminen

nyt kun tehtävätoiminto on luotu, seuraava vaihe on määritellä, milloin tehtävä on suoritettava. Käynnistimen luomiseen käytettävä cmdlet on New-ScheduledTaskTrigger cmdlet. Alla oleva komento luo käynnistimen, joka suoritetaan päivittäin kello 15. Kopioi ja suorita koodi Powershellissa.

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

$tasktrigger muuttujan tulee näyttää samalta kuin alla olevassa kuvassa.

käynnistimen luominen (päivittäin klo 3)

tehtävän rekisteröinti

tähän mennessä olet luonut pohjavaatimukset luoda uusi ajoitettu tehtävä. Seuraava vaihe on luoda ajoitettu tehtävä ja rekisteröidä se järjestelmään.

alla oleva koodi käyttää Register-ScheduledTask cmdlet rekisteröimään ajoitetun tehtävän. -Action parametri on S, jotta$taskActionmuuttujaan tallennettu tehtäväobjekti läpäisee sen. -Trigger parametri tarvitaan $taskTrigger muuttuva sisältö.

# 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

Kopioi yllä oleva koodi ja aja se Powershellissa. Tämän seurauksena Uusi ajoitettu tehtävä rekisteröidään, kuten alla on esitetty.

uuden ajoitetun tehtävän rekisteröinti

tehtävän suorittaminen

ajoitetun tehtävän luomisen jälkeen tulee vahvistaa, että ajoitettu tehtävä on nyt olemassa järjestelmässä. Avaa Tehtävien ajoitus ja etsi ajoitettu tehtävä luettelosta. Sinun pitäisi nähdä rekisteröity tehtävä luettelossa.

Uusi ajoitettu tehtävä sellaisena kuin se nähdään Tehtävien ajoitus-sovelluksessa

voit myös vahvistaa rekisteröidyn ajoitetun tehtävän olemassaolon suorittamalla alla olevan PowerShell-komennon.

Get-ScheduledTaskInfo -TaskName ExportAppLog

vastaavanlainen ulostulo, kuten kuvakaappaus tuloksesta alla.

aikataulutettujen tehtävätietojen saaminen.

ja lopuksi uuden ajoitetun tehtävän pitäisi toimia sen selvittämiseksi, onnistuiko tähänastinen tekosi. Jos haluat testata ajoitetun tehtävän, voit joko odottaa seuraavaa suoritusaikataulua tai käyttää alla olevaa komentoa käynnistääksesi sen manuaalisesti.

Start-ScheduledTask -TaskName ExportAppLog

juostuasi koodin, sinun pitäisi nähdä samanlainen tulos kuin alla. Kuten näet, käynnissä koodi loi XML-tiedoston, joka osoittaa, että ajoitettu tehtävä toimi odotetusti.

ajoitetun tehtävän suorittaminen

olemassa olevan ajoitetun tehtävän päivittäminen

sen jälkeen, kun on luotu ajoitettu tehtävä, osa siitä saattaa tarvita päivitystä jossain vaiheessa. Ehkä haluat saada sen toimimaan tuntia aikaisemmin tai muuttaa komentosarjatiedoston sijaintia. Nämä ovat joitakin muutoksia ajoitettu tehtävä, joka voi olla tarpeen.

seuraavissa osioissa opit tekemään muutoksia olemassa oleviin rekisteröityihin ajoitettuihin tehtäviin Powershellilla.

muuttamalla käyttäjätiliä, suojausasetuksia ja Yhteensopivuusasetuksia

edellisessä osiossa ajoitettu tehtävä suoritetaan samassa käyttäjätiliyhteydessä, joka sen loi. Entä jos tehtävä pitää suorittaa toisella käyttäjätilillä, kuten esimerkiksi palvelutilillä.

tässä esimerkissä muokkaat ajoitetun tehtävän suojausasetukset alla oleviin asetuksiin.

  • sinun täytyy vaihtaa käyttäjätiliä ajaaksesi ajoitetun tehtävän.
  • salli tehtävän suorittamisen, oli käyttäjä kirjautunut sisään tai ei.
  • Suorita korkeimmat oikeudet.
  • asetti tehtävän yhteensopivuuden Windows 10: lle.

alla olevan koodin ensimmäinen rivi luo pääobjektin uudella käyttäjätilillä ja asettaa tehtävän suoritettavaksi korkeimmilla oikeuksilla. Varmista, että -UserID – parametrin arvoa muutetaan tarpeen mukaan. Toinen rivi määrittää tehtävän yhteensopivuuden Windows 10: n kanssa.

kolmas rivi päivittää ExportAppLog **ajoitetun tehtävän käyttäen the $taskPrincipal ja $taskSettings muuttujia. Kopioi alla oleva koodi ja suorita se Powershellissa.

# 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

huomaa, että -Compatibility parametrin arvo on Win8. Älä hämmenny. Näyttää siltä, että Microsoft ei ole päivittänyt ”uusinta” versiovalintaa Windows 8: n jälkeen. Win8 – arvon määrittäminen johtaa kuitenkin Windows 10-yhteensopivuuteen.

seuraavaksi alla oleva komento käyttää Set-ScheduledTask cmdlet päivittämään olemassa olevaa ExportAppLog **ajoitettua tehtävää. Muista vaihtaa salasanan arvo -Password – parametrissa käyttääksesi käyttäjätilin oikeaa salasanaa.

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

edellä mainitun komennon suorittamisen jälkeen ajoitettu tehtävä päivittyy. Jos tarkistat ajoitetun tehtävän, voit vahvistaa, että suojausvaihtoehdot ovat muuttuneet.

suojausvaihtoehdon, käyttäjätilin ja yhteensopivuusasetukset

käynnistimen muuttaminen

joskus laukaisuaikataulun on oltava muuttunut. Ehkä joidenkin toiminnallisten säätöjen tai resurssien optimoinnin takia. Joka tapauksessa voit myös käyttää Powershellia korvaamaan tai lisäämään käynnistimiä ajoitettuun tehtävään.

tällä hetkellä ajoitettu tehtävävientiapplogi käynnistyy joka päivä kello 15. Oletetaan, että sinun täytyy muuttaa laukaisuaikataulu päivittäin klo 4: 30 PM ja 1: 00 AM. Sinun täytyy ensin luoda kaksi uutta tehtävän laukaista esineitä kaksi aikataulut.

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

sitten päivittääksesi ajoitetun tehtävän käynnistimen, käytä alla olevaa komentoa. -Trigger parametri hyväksyy kaksi tehtävän laukaisevaa objektia, nimittäin $taskTrigger1 ja $taskTrigger2.

lisäksi, koska päivität ajoitettua tehtävää käyttäjätilille tallennetulla salasanalla, sinun on annettava -User ja -Password arvot uudelleen.

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

alla on odotettu tulos koodin suorittamisen jälkeen.

päivittämässä ajoitettua tehtävää, jossa on useita laukaisijoita

ja kuten alta näkyy, Exportapplogin ajoitetussa tehtävässä on nyt kaksi laukaisijaa.

ajoitettu tehtävä, jossa on useita laukaisijoita

ajoitetun tehtävän poistaminen ja palauttaminen

ajoitetut tehtävät voivat ajan myötä vanhentua. Jossain vaiheessa, saatat joutua tekemään taloudenhoito aikataulun tehtäviä. Tässä osiossa opit hallitsemaan ajoitettua tehtävän poistoa Powershellissa.

ajoitetun tehtävän varmuuskopiointi

ennen kuin jatkat aikataulutettujen tehtävien poistamista, on hyvä käytäntö tehdä ensin varmuuskopio. Varmuuskopiointi ajoitetut tehtävät antaa sinulle palautuspisteen, kun asiat menevät pieleen.

ei ole sisäänrakennettua cmdletiä, joka tekisi ajoitetun tehtävän varmuuskopioinnin. Mutta kaikki Powershellissa on objekti, ja objektien vienti tiedostoon on mahdollista. Kun haluat varmuuskopioida objektin tiedostoon, käytä Import-Clixml cmdlet.

alla oleva esimerkkikoodi vie ajoitetun tehtävän nimellä ExportAppLog tiedostoon. Voit muuttaa tiedostonimen ja sijainnin haluamaasi kohtaan.

alla oleva kuva näyttää odotetun XML-tulosteen.

ajoitetun tehtävän varmuuskopiointi

ajoitetun tehtävän poistaminen

kun olet varmistanut varmuuskopion ajoitetusta tehtävästä, voit nyt poistaa ajoitetun tehtävän. Alla oleva koodi poistaa ajoitetun tehtävän nimellä ExportAppLog. Kopioi alla oleva koodi ja aja Powershellissa.

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

vaikka ei vaadita, on aina hyvä vahvistaa ajoitetun tehtävän poiston tulos. Käytä alla olevaa komentoa varmistaaksesi, että ajoitettua tehtävää ei enää ole.

Get-ScheduledTask -TaskName 'ExportAppLog'

Jos ajoitettua tehtävää ei enää ole, tulee tulosteen olla samanlainen kuin alla.

tarkistaa, onko ajoitettua tehtävää enää olemassa

huomaa, että ajoitettu tehtävän varmuuskopiointi ei sisällä salasanoja.

ajoitetun tehtävän palauttaminen

joten olet poistanut ajoitetun tehtävän, ja sitten käy ilmi, että sinun ei pitänyt! Mitä nyt? Tällainen tilanne saa arvostamaan konseptia varmuuskopiot vielä enemmän.

voit luoda ajoitetun tehtävän uudelleen XML-varmuuskopiotiedoston avulla Powershellissa. Ja näin voit tehdä palautuksen.

tuo ensin XML-varmuuskopio PowerShell-istuntoosi. Alla oleva koodi tuo tiedoston c:\temp\ExportAppLog.xml. Tämän seurauksena $stBackup muuttuja pitää tuodut tiedot.

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

seuraavaksi Nollaa tehtävän päämiehen LogOnType arvo Interactive. LogonType-arvon nollaaminen on ratkaisevan tärkeää onnistuneen ajoitetun tehtävän palauttamisen varmistamiseksi.

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

seuraava vaihe on luoda uusi ajoitettu Tehtäväobjekti. Alla oleva koodi luo uuden ajoitetun tehtävän. $restoreTask muuttuja tallentaa tuloksena olevan ajoitetun tehtäväobjektin.

huomaat, että parametreille siirretyt arvot ovat varmuuskopiosta tuotuja. Tuodut arvot ovat $restoreTask muuttuja. Parametrit ovat ActionTriggerSettings ja Principal.

kun ajoitettu tehtävä on luotu, on aika rekisteröidä ajoitettu tehtävä. Rekisteröi palautettu ajoitettu tehtävä alla olevalla koodilla.

tässä esimerkissä tehtävän nimi on ” ExportAppLog_restored.”InputObject parametri hyväksyy ajoitetun tehtäväobjektin $restoreTask muuttujan. Muista käyttää oikeita user ja password arvoja.

koodi on nyt valmis. Kopioi ja suorita koodi Powershellissa palauttaaksesi poistetun ajoitetun tehtävän. Alla oleva kuvakaappaus näyttää odotetun tuotoksen koodin suorittamisen jälkeen.

poistetun ajoitetun tehtävän palauttaminen XML-varmuuskopiosta

nyt ajoitettu tehtävä on rekisteröity järjestelmään. Alla oleva kuvakaappaus näyttää palautetun ajoitetun tehtävän.

palautetun ajoitetun tehtävän löytäminen

Yhteenveto

aikataulutettujen tehtävien ominaisuus Windowsissa on erinomainen työkalu tehtävien järjestämiseen tai työpaikkoja. Voit luoda kaikkein perus monimutkaisempia tehtäviä. Asetukset ja vaihtoehdot ovat joustavia.

PowerShell ajoitetut tehtävät-moduulissa ajoitettujen tehtävien määrittäminen PowerShell-komennoilla on mahdollista. Tämä moduuli tarjoaa mahdollisuuden ja keinot luoda ja ottaa käyttöön aikataulutettuja tehtäviä ohjelmallisesti paikallisissa ja etätietokoneissa.

Microsoft ei ole päivittänyt ajoituksen asks-moduulia, ja joitakin lisäasetuksia ei ole vielä helppo paljastaa PowerShell cmdleteiksi. Yksi esimerkki on luoda laukaista ” on workstation unlock.”Mutta, voit saavuttaa nämä lisäasetukset käyttämällä nykyisten tehtävien ajoitus CIM Luokka.

kaikesta huolimatta PowerShellin ajoitetut tehtävät-moduuli on edelleen erinomainen ja kykenevä työkalu, jonka voit lisätä PowerShell-arsenaaliin.

Vastaa

Sähköpostiosoitettasi ei julkaista.