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.
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.
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$taskAction
muuttujaan 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.
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.
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.
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.
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 onWin8
. Ä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.
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.
ja kuten alta näkyy, Exportapplogin ajoitetussa tehtävässä on nyt kaksi laukaisijaa.
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 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.
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 Action
Trigger
Settings
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.
nyt ajoitettu tehtävä on rekisteröity järjestelmään. Alla oleva kuvakaappaus näyttää palautetun ajoitetun tehtävän.
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.