Register-ScheduledJob

Skapar ett schemalagt jobb.

Syntax

Register-ScheduledJob
        [-ScriptBlock] <ScriptBlock>
        [-Name] <String>
        [-Trigger <ScheduledJobTrigger[]>]
        [-InitializationScript <ScriptBlock>]
        [-RunAs32]
        [-Credential <PSCredential>]
        [-Authentication <AuthenticationMechanism>]
        [-ScheduledJobOption <ScheduledJobOptions>]
        [-ArgumentList <Object[]>]
        [-MaxResultCount <Int32>]
        [-RunNow]
        [-RunEvery <TimeSpan>]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]
Register-ScheduledJob
        [-FilePath] <String>
        [-Name] <String>
        [-Trigger <ScheduledJobTrigger[]>]
        [-InitializationScript <ScriptBlock>]
        [-RunAs32]
        [-Credential <PSCredential>]
        [-Authentication <AuthenticationMechanism>]
        [-ScheduledJobOption <ScheduledJobOptions>]
        [-ArgumentList <Object[]>]
        [-MaxResultCount <Int32>]
        [-RunNow]
        [-RunEvery <TimeSpan>]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]

Description

Cmdleten Register-ScheduledJob skapar schemalagda jobb på den lokala datorn.

Ett schemalagt jobb är ett Windows PowerShell-bakgrundsjobb som kan startas automatiskt enligt ett engångs- eller återkommande schema. Schemalagda jobb lagras på disken och registreras i Schemaläggaren. Jobben kan hanteras i Schemaläggaren eller med hjälp av cmdletar för schemalagt jobb i Windows PowerShell.

När ett schemalagt jobb startar skapas en instans av det schemalagda jobbet. Schemalagda jobbinstanser är identiska med Windows PowerShell-bakgrundsjobb, förutom att resultaten sparas på disken. Använd jobb-cmdletarna, till exempel Start-Job, Get-Joboch Receive-Job för att starta, visa och hämta resultatet av jobbinstanserna.

Använd Register-ScheduledJob för att skapa ett nytt schemalagt jobb. Om du vill ange de kommandon som det schemalagda jobbet kör använder du parametern ScriptBlock . Om du vill ange ett skript som jobbet kör använder du parametern FilePath .

Windows PowerShell-schemalagda jobb använder samma jobbutlösare och jobbalternativ som Schemaläggaren använder för schemalagda aktiviteter.

Utlösarparametern Register-ScheduledJob för lägger till en eller flera jobbutlösare som startar jobbet. Parametern Utlösare är valfri, så du kan lägga till utlösare när du skapar det schemalagda jobbet, lägga till jobbutlösare senare, lägga till RunNow-parametern för att starta jobbet omedelbart, använda cmdleten Start-Job för att starta jobbet omedelbart när som helst eller spara det origgade schemalagda jobbet som en mall för andra jobb.

Med parametern Alternativ kan du anpassa alternativinställningarna för det schemalagda jobbet. Parametern Alternativ är valfri, så du kan ange jobbalternativ när du skapar det schemalagda jobbet eller ändrar dem när som helst. Eftersom inställningar för jobbalternativ kan förhindra att det schemalagda jobbet körs granskar du jobbalternativen och ställer in dem noggrant.

Register-ScheduledJob är en av en samling cmdletar för jobbschemaläggning i modulen PSScheduledJob som ingår i Windows PowerShell.

Mer information om schemalagda jobb finns i Om artiklar i modulen PSScheduledJob . Importera modulen PSScheduledJob och skriv sedan: Get-Help about_Scheduled* eller se about_Scheduled_Jobs.

Den här cmdleten introducerades i Windows PowerShell 3.0.

Exempel

Exempel 1: Skapa ett schemalagt jobb

Det här exemplet skapar ett schemalagt jobb på den lokala datorn.

Register-ScheduledJob -Name "Archive-Scripts" -ScriptBlock {
  Get-ChildItem $HOME\*.ps1 -Recurse |
    Copy-Item -Destination "\\Server\Share\PSScriptArchive"
}

Register-ScheduledJob använder parametern Namn för att skapa det Archive-Scripts schemalagda jobbet. Parametern ScriptBlock körs Get-ChildItem som söker $HOME i katalogen rekursivt efter .ps1 filer. Cmdleten Copy-Item kopierar filerna till en katalog som anges av målparametern.

Eftersom det schemalagda jobbet inte innehåller någon utlösare startas det inte automatiskt. Du kan lägga till jobbutlösare med Add-JobTrigger, använda cmdleten Start-Job för att starta jobbet på begäran eller använda det schemalagda jobbet som mall för andra schemalagda jobb.

Exempel 2: Skapa ett schemalagt jobb med utlösare och anpassade alternativ

Det här exemplet visar hur du skapar ett schemalagt jobb som har en jobbutlösare och anpassade jobbalternativ.

$O = New-ScheduledJobOption -WakeToRun -StartIfIdle -MultipleInstancePolicy Queue
$T = New-JobTrigger -Weekly -At "9:00 PM" -DaysOfWeek Monday -WeeksInterval 2
$path = "\\Srv01\Scripts\UpdateVersion.ps1"
Register-ScheduledJob -Name "UpdateVersion" -FilePath $path -ScheduledJobOption $O -Trigger $T

Variabeln $O lagrar jobbalternativobjektet som cmdleten New-ScheduledJobOption skapade. Alternativen startar det schemalagda jobbet även om datorn inte är inaktiv, aktiverar datorn för att köra jobbet om det behövs och tillåter att flera instanser av jobbet körs i en serie.

Variabeln $T lagrar resultatet från cmdleten New-JobTrigger för att skapa jobbutlösare som startar ett jobb varannan måndag kl. 21:00.

Variabeln $path lagrar sökvägen till UpdateVersion.ps1 skriptfilen.

Register-ScheduledJob använder paramteren Name för att skapa det schemalagda jobbet UpdateVersion . Parametern FilePath använder $path för att ange det skript som jobbet kör. Parametern ScheduledJobOption använder jobbalternativen som lagras i $O. Parametern Trigger använder jobbutlösare som lagras i $T.

Exempel 3: Använd hash-tabeller för att ange en utlösare och schemalagda jobbalternativ

Det här exemplet har samma effekt som kommandot i Exempel 2. Det skapar ett schemalagt jobb med hjälp av hash-tabeller för att ange värdena för parametrarna Trigger och ScheduledJobOption . Variablerna $O och $Tsom definieras i exempel 2 ersätts med hash-tabeller.

$T = @{
  Frequency="Weekly"
  At="9:00PM"
  DaysOfWeek="Monday"
  Interval=2
}
$O = @{
  WakeToRun=$true
  StartIfNotIdle=$false
  MultipleInstancePolicy="Queue"
}
Register-ScheduledJob -Trigger $T -ScheduledJobOption $O -Name UpdateVersion -FilePath "\\Srv01\Scripts\Update-Version.ps1"

Exempel 4: Skapa schemalagda jobb på fjärrdatorer

I det här exemplet skapas det schemalagda Jobbet EnergyData på flera fjärrdatorer. Det schemalagda jobbet kör ett skript som samlar in rådata och sparar dem i en logg som körs på fjärrdatorn.

$Cred = Get-Credential
$O = New-ScheduledJobOption -WakeToRun -StartIfIdle -MultipleInstancePolicy Queue
$T = New-JobTrigger -Weekly -At "9:00 PM" -DaysOfWeek Monday -WeeksInterval 2
Invoke-Command -ComputerName (Get-Content Servers.txt) -Credential $Cred -ScriptBlock {
  $params = @{
      Name = "Get-EnergyData"
      FilePath = "\\Srv01\Scripts\Get-EnergyData.ps1"
      ScheduledJobOption = $using:O
      Trigger = $using:T
  }
  Register-ScheduledJob @params
}

Variabeln $Cred lagrar autentiseringsuppgifter i ett PSCredential-objekt för en användare med behörighet att skapa schemalagda jobb. Variabeln $O lagrar jobbalternativen som skapats med New-ScheduledJobOption. Variabeln $T lagrar jobbutlösare som skapats med New-JobTrigger.

Cmdleten Invoke-Command använder parametern ComputerName för att hämta en lista över servernamn från Servers.txt filen. Parametern Credential hämtar autentiseringsobjektet som lagras i $Cred. Parametern ScriptBlock kör ett Register-ScheduledJob kommando på datorerna Servers.txt i filen.

Parametrarna för Register-ScheduledJob definieras av $params. Namnparametrarna anger att jobbet namnges Get-EnergyData på varje fjärrdator. FilePath tillhandahåller platsen för skriptet EnergyData.ps1 . Skriptet finns på en filserver som är tillgänglig för alla deltagande datorer. Jobbet körs enligt det schema som anges av jobbutlösarna i $T och jobbalternativen i $O.

Kommandot Register-ScheduledJob @params skapar det schemalagda jobbet med parametrarna från skriptblocket.

Exempel 5: Skapa ett schemalagt jobb som kör ett skript på fjärrdatorer

I det här exemplet skapas det schemalagda jobbet CollectEnergyData på den lokala datorn. Jobbet körs på flera fjärrdatorer.

$Admin = Get-Credential
$T = New-JobTrigger -Weekly -At "9:00 PM" -DaysOfWeek Monday -WeeksInterval 2
Register-ScheduledJob -Name "CollectEnergyData" -Trigger $T -MaxResultCount 99 -ScriptBlock {
  $params = @{
    AsJob = $true
    ComputerName = (Get-Content Servers.txt)
    FilePath = '\\Srv01\Scripts\Get-EnergyData.ps1'
    Credential = $using:Admin
    Authentication = 'CredSSP'
  }
  Invoke-Command @params
}

Variabeln $Admin lagrar autentiseringsuppgifter för en användare med behörighet att köra kommandona i ett PSCredential-objekt . Variabeln $T lagrar jobbutlösare som skapats med New-JobTrigger.

Cmdleten Register-ScheduledJob använder parametern Namn för att skapa det schemalagda jobbet CollectEnergyData på den lokala datorn. Parametern Trigger anger jobbutlösarna i $T och parametern MaxResultCount ökar antalet sparade resultat till 99.

Parametern ScriptBlock definierar parametrarna Invoke-Command med $params. Parametern AsJob skapar bakgrundsjobbobjektet på den lokala datorn, även om skriptet Energydata.ps1 körs på fjärrdatorerna. Parametern ComputerName hämtar en lista över servernamn från Servers.txt filen. Parametern Credential anger ett användarkonto som har behörighet att köra skript på fjärrdatorerna. Och parametern Autentisering anger ett värde för CredSSP för att tillåta delegerade autentiseringsuppgifter.

Kör Invoke-Command @params kommandot med parametrarna från skriptblocket.

Parametrar

-ArgumentList

Anger värden för parametrarna för skriptet som anges av FilePath-parametern eller för kommandot som anges av parametern ScriptBlock .

Type:Object[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Authentication

Anger den mekanism som används för att autentisera användarens autentiseringsuppgifter. Standardvärdet är Standard.

De acceptabla värdena för den här parametern är:

  • Default
  • Basic
  • Credssp
  • Digest
  • Kerberos
  • Negotiate
  • NegotiateWithImplicitCredential

Mer information om värdena för den här parametern finns i AuthenticationMechanism.

Varning

CredSSP-autentisering (CredSSP), där användarens autentiseringsuppgifter skickas till en fjärrdator som ska autentiseras, är utformad för kommandon som kräver autentisering på mer än en resurs, till exempel åtkomst till en fjärrnätverksresurs. Den här mekanismen ökar säkerhetsrisken för fjärråtgärden. Om fjärrdatorn komprometteras kan de autentiseringsuppgifter som skickas till den användas för att styra nätverkssessionen.

Type:AuthenticationMechanism
Accepted values:Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Confirm

Uppmanar dig att bekräfta innan du kör cmdleten.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Credential

Anger ett användarkonto som har behörighet att köra det schemalagda jobbet. Standard är den aktuella användaren.

Ange ett användarnamn, till exempel User01 eller Domain01\User01, eller ange ett PSCredential-objekt, till exempel ett från cmdleten Get-Credential. Om du bara anger ett användarnamn uppmanas du att ange ett lösenord.

Autentiseringsuppgifter lagras i ett PSCredential-objekt och lösenordet lagras som en SecureString.

Kommentar

Mer information om SecureString-dataskydd finns i Hur säker är SecureString?.

Type:PSCredential
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FilePath

Anger ett skript som det schemalagda jobbet körs på. Ange sökvägen till en .ps1 fil på den lokala datorn. Om du vill ange standardvärden för skriptparametrarna använder du parametern ArgumentList . Varje Register-ScheduledJob kommando måste använda parametrarna ScriptBlock eller FilePath .

Type:String
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-InitializationScript

Anger den fullständigt kvalificerade sökvägen till ett Windows PowerShell-skript (.ps1). Initieringsskriptet körs i sessionen som skapas för bakgrundsjobbet före de kommandon som anges av parametern ScriptBlock eller skriptet som anges av Parametern FilePath . Du kan använda initieringsskriptet för att konfigurera sessionen, till exempel lägga till filer, funktioner eller alias, skapa kataloger eller söka efter förutsättningar.

Om du vill ange ett skript som kör de primära jobbkommandona använder du parametern FilePath .

Om initieringsskriptet genererar ett fel, även ett icke-avslutande fel, körs inte den aktuella instansen av det schemalagda jobbet och dess status är Misslyckad.

Type:ScriptBlock
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaxResultCount

Anger hur många jobbresultatposter som underhålls för det schemalagda jobbet. Standardvärdet är 32.

Windows PowerShell sparar körningshistoriken och resultaten för varje utlöst instans av det schemalagda jobbet på disken. Värdet för den här parametern avgör antalet jobbinstansresultat som sparas för det här schemalagda jobbet. När antalet jobbinstansresultat överskrider det här värdet tar Windows PowerShell bort resultatet från den äldsta jobbinstansen för att göra plats för resultatet av den senaste jobbinstansen.

Jobbkörningshistoriken och jobbresultatet sparas i $HOME\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs\<JobName>\Output\<Timestamp> kataloger på den dator där jobbet skapas. Om du vill se körningshistoriken använder du cmdleten Get-Job . Använd cmdleten för att hämta jobbresultatet Receive-Job .

Parametern MaxResultCount anger värdet för egenskapen ExecutionHistoryLength för det schemalagda jobbet.

Om du vill ta bort den aktuella körningshistoriken och jobbresultaten använder du parametern ClearExecutionHistory för cmdleten Set-ScheduledJob .

Type:Int32
Position:Named
Default value:32
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Name

Anger ett namn för det schemalagda jobbet. Namnet används också för alla startade instanser av det schemalagda jobbet. Namnet måste vara unikt på datorn. Den här parametern krävs.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-RunAs32

Kör det schemalagda jobbet i en 32-bitarsprocess.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-RunEvery

Används för att ange hur ofta jobbet ska köras. Använd till exempel det här alternativet för att köra ett jobb var 15:e minut.

Type:TimeSpan
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-RunNow

Startar ett jobb omedelbart så snart cmdleten Register-ScheduledJob körs. Den här parametern eliminerar behovet av att utlösa Schemaläggaren för att köra ett Windows PowerShell-skript omedelbart efter registreringen och kräver inte att användarna skapar en utlösare som anger ett startdatum och en starttid.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ScheduledJobOption

Anger alternativ för det schemalagda jobbet. Ange ett ScheduledJobOptions-objekt , till exempel ett objekt som du skapar med hjälp av cmdleten New-ScheduledJobOption eller ett hash-tabellvärde.

Du kan ange alternativ för ett schemalagt jobb när du registrerar schemajobbet eller använder Set-ScheduledJobOption cmdletarna eller Set-ScheduledJob för att ändra alternativen.

Många av alternativen och deras standardvärden avgör om och när ett schemalagt jobb körs. Se till att granska de här alternativen innan du schemalägger ett jobb. En beskrivning av de schemalagda jobbalternativen, inklusive standardvärdena, finns i New-ScheduledJobOption.

Om du vill skicka en hash-tabell använder du följande nycklar. I följande hash-tabell visas nycklarna med sina standardvärden.

@{StartIfOnBattery=$False; StopIfGoingOnBattery=$True; WakeToRun=$False; StartIfNotIdle=$False; IdleDuration="00:10:00"; IdleTimeout="01:00:00"; StopIfGoingOffIdle=$True; RestartOnIdleResume=$False; ShowInTaskScheduler=$True; RunElevated=$False; RunWithoutNetwork=$False; DoNotAllowDemandStart=$False; MultipleInstancePolicy="IgnoreNew"}

Type:Microsoft.PowerShell.ScheduledJob.ScheduledJobOptions
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ScriptBlock

Anger de kommandon som det schemalagda jobbet körs på. Omslut kommandona i klammerparenteser ({}) för att skapa ett skriptblock. Om du vill ange standardvärden för kommandoparametrar använder du parametern ArgumentList .

Varje Register-ScheduledJob kommando måste använda parametrarna ScriptBlock eller FilePath .

Type:ScriptBlock
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Trigger

Anger utlösarna för det schemalagda jobbet. Ange ett eller flera ScheduledJobTrigger-objekt , till exempel de objekt som cmdleten New-JobTrigger returnerar, eller en hash-tabell med jobbutlösarnycklar och värden.

En jobbutlösare startar schemajobbet. Utlösaren kan ange en engångs- eller återkommande schemalagd eller en händelse, till exempel när en användare loggar in eller Windows startar.

Utlösarparametern är valfri. Du kan lägga till en utlösare när du skapar det schemalagda jobbet, använda Add-JobTriggercmdletarna , Set-JobTriggereller Set-ScheduledJob för att lägga till eller ändra jobbutlösare senare eller använda cmdleten Start-Job för att starta det schemalagda jobbet omedelbart. Du kan också skapa och underhålla ett schemalagt jobb utan en utlösare som används som mall.

Om du vill skicka en hash-tabell använder du följande nycklar:

  • Frekvens: Dagligen, Varje vecka, AtStartup, AtLogon
  • Vid: Valfri giltig tidssträng
  • DaysOfWeek – Valfri kombination av dagnamn
  • Intervall – valfritt giltigt frekvensintervall
  • RandomDelay: Alla giltiga tidsintervallsträngar
  • Användare: Alla giltiga användare. Används endast med AtLogon-frekvensvärdet

Till exempel:

@{Frequency="Once"; At="3am"; DaysOfWeek="Monday", "Wednesday"; Interval=2; RandomDelay="30minutes"; User="Domain1\User01"}

Type:Microsoft.PowerShell.ScheduledJob.ScheduledJobTrigger[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

Visar vad som skulle hända om cmdleten kördes. Cmdleten körs inte.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Indata

None

Du kan inte skicka objekt till den här cmdleten.

Utdata

Microsoft.PowerShell.ScheduledJob.ScheduledJobDefinition

Den här cmdleten returnerar ett ScheduledJobDefinition-objekt som representerar det registrerade jobbet.

Kommentarer

Varje schemalagt jobb sparas i en underkatalog till $HOME\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs katalogen på den lokala datorn. Underkatalogen namnges för det schemalagda jobbet och innehåller en XML-fil för det schemalagda jobbet och poster i dess körningshistorik. Mer information om schemalagda jobb på disk finns i about_Scheduled_Jobs_Advanced.

Schemalagda jobb som du skapar i Windows PowerShell visas i Schemaläggaren i mappen Schemaläggare Library\Microsoft\Windows\PowerShell\ScheduledJobs . Du kan använda Schemaläggaren för att visa och redigera det schemalagda jobbet.

Du kan använda Schemaläggaren, schtasks.exe kommandoradsverktyget och cmdletarna Schemaläggare för att hantera schemalagda jobb som du skapar med cmdletarna Schemalagt jobb. Du kan dock inte använda cmdletar för schemalagt jobb för att hantera aktiviteter som du skapar i Schemaläggaren.

Om ett schemalagt jobbkommando misslyckas returnerar Windows PowerShell ett felmeddelande. Men om jobbet misslyckas när Schemaläggaren försöker köra det är felet inte tillgängligt för Windows PowerShell.

Om ett schemalagt jobb inte körs använder du följande metoder för att hitta orsaken:

  • Kontrollera att jobbutlösaren har angetts korrekt.
    • Kontrollera att de villkor som anges i jobbalternativen är uppfyllda.
  • Kontrollera att användarkontot som jobbet körs under har behörighet att köra kommandona eller skripten i jobbet.
  • Kontrollera historiken för Schemaläggaren efter fel.
  • Kontrollera händelseloggen för Schemaläggaren om det finns fel.

Mer information finns i about_Scheduled_Jobs_Troubleshooting.