Husk å lese de forrige artiklene i serien:
- Lær hvordan du automatiserer Windows med PowerShell
- Lære å bruke Cmdlets i PowerShell
- Lære hvordan du bruker objekter i PowerShell
- Læreformatering, filtrering og sammenligning i PowerShell
- Lær å bruke Remoting i PowerShell
- Bruke PowerShell til å få datamaskininformasjon
- Arbeider med samlinger i PowerShell
Og hold deg innstilt for resten av serien hele uken.
Bakgrunnsjobber
Hittil har alt jeg har vist deg i PowerShell vært synkront, noe som betyr at vi skriver noe inn i skallet og ikke kan gjøre mye før den kommandoen er ferdig. Det er her bakgrunnsjobber kommer inn. For å starte en bakgrunn, sender jobben bare en skriptblokk til Start-jobb-cmdlet.
Start-Job –Name GetFileList –Scriptblock {Get-ChildItem C: –Recurse}
Get-Job –Name GetFileList | Stop-Job
Get-Job –Name GetFileList | Receive-Job –Keep
Når du er ferdig med en jobb, er det best å fjerne det. For å fjerne jobben, rør den bare til Fjern-jobb-cmdlet.
Get-Job –Name GetFileList | Remove-Job
Dette vil fjerne den fra listen over jobber som returneres av Get-Job.
Fjernjobber
Noen få leksjoner siden, vi så på hvordan vi kan bruke fjernkontroll for å utføre PowerShell-kommandoer på en ekstern maskin ved hjelp av Invoke-kommando, men visste du at du også kan bruke Invoke-kommando for å slå av en fjernbetjening i bakgrunnen? For å gjøre det, legg ganske enkelt til -AsJob-parameteren på slutten av kommandoen din:
Invoke-Command -ComputerName Flash,Viper -Credential administrator -ScriptBlock {gci} –AsJob
Get-Job –Id 3 | Receive-Job –Keep –ComputerName Viper
Alternativt kan du få resultatene fra et bestemt barnjobb ved hjelp av jobb-ID.
Get-Job -Id 3 –IncludeChildJob
Get-Job -Id 5 | Receive-Job –Keep
WMI Jobs
WMI-jobber er mye de samme som eksterne jobber, og krever bare parameteren -AsJob som skal legges til Get-WmiObject cmdlet.
Planlagte jobber
De tre siste jobben vi så på, var ikke vedvarende, noe som betyr at de bare er tilgjengelige i din nåværende økt. I utgangspunktet betyr det at hvis du starter en jobb og deretter åpner en annen PowerShell Console og kjører Get-Job, ser du ingen jobber. Men kom tilbake til konsollen du sparket jobben av fra, du vil kunne se sin status. Dette er i kontrast til planlagte jobber som er vedvarende. I utgangspunktet er en planlagt jobb en skriptblokk som går på en tidsplan. Tidligere kunne den samme effekten ha blitt oppnådd ved hjelp av Windows Task Scheduler, som egentlig er hva som skjer under hetten. For å opprette en ny planlagt jobb gjør vi følgende:
Register-ScheduledJob -Name GetEventLogs -ScriptBlock {Get-EventLog -LogName Security -Newest 100} -Trigger (New-JobTrigger -Daily -At 5pm) -ScheduledJobOption (New-ScheduledJobOption -RunElevated)
Det skjer ganske mye i den kommandoen, så la oss slå den ned.
- Først gir vi vår planlagte jobb et navn på GetEventLogs.
- Vi forteller da at når den utløses, vil vi at den skal kjøre innholdet i den angitte skriptblokken, som i utgangspunktet får de nyeste 100 oppføringene i sikkerhetshendelsesloggen.
- Deretter spesifiserer vi en utløser. Siden triggerparameteren tar et utløserobjekt som input, brukte vi en parentetisk kommando for å generere en trigger som vil gå av hver dag klokka 5:00.
- Siden vi arbeider med hendelsesloggen, må vi kjøre som administrator, som vi kan spesifisere ved å opprette et nytt ScheduledJobOption-objekt og sende det til parameteren ScheduledJobOption.
Get-ScheduledJob