#__________________________Install SharePoint Timer
Jobs___________________________________
#
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# VARIABLE
DECLATRATION
#
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#
# Grab the web app URL from User
write-host "Enter
the Web Application Url where you want to deploy the Timer service:"
[string]$webAppUrl
= Read-Host
# Define here the Timer Job assembly name.
[string]$assemblyName
= "TechPerspect.TimerJobs"
# Define here the Job Name
[string]$jobName
= "TechPerspect
Demo Timer Job"
# Define the class name here. (assembly name + class name of
timer job)
$className = "TechPerspect.TimerJobs.DemoTimerJob"
# load the required assemblies
[void][reflection.assembly]::LoadWithPartialName("Microsoft.SharePoint")
[void][reflection.assembly]::LoadwithPartialName("Microsoft.Office.Server")
# Stop further execution of an error occured anywhere in
script
$ErrorActionPreference = "Stop"
#
#
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Functions
#
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#
# This methods restarts SharePoint Timer service (OWSTIMER)
function global:Restart-TimerServices
{
# Restart
timer services
Write-Host "Restarting SharePoint Timer services"
Stop-Service
"SPTimerV4"
Start-Service
"SPTimerV4"
}
function global:Install-TimerJob
{
Restart-TimerServices
# Load job
assembly
[void][reflection.assembly]::LoadwithPartialName($assemblyName)
# below call
is commented however may be used in Powershell v3.0, since
# LoadwithPartialName
is depreciated after powershell 2.0
#[System.Reflection.Assembly]::Load("TechPerspect.TimerJobs,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=d8668901f3456325")
$objSPSite
= [Microsoft.SharePoint.SPSite]$webAppUrl
$objWebApplication
= $objSPSite.WebApplication
# search for
the Job
$objTimerJobInstance
= $objWebApplication.JobDefinitions |
? { $_.Name -like $jobName }
# Delete
the job instance if already exists
if ($objTimerJobInstance)
{
Write-Host
"Job [" $objTimerJobInstance.Name "] already
exists. Deleting..."
$objTimerJobInstance.Delete()
}
# Initlize
new instance of timer job
# Note that
the argument List should be same, which you have defined in your
# timer service
code for invoking the service.
# Argument
list could contain 1, 2, 3 params depending upon constructor used
# in your timer
code
$objTimerJobInstance
= new-object
$className -ArgumentList
$jobName,$objWebApplication
# Create a
Daily Schedule
$sched
= new-object
Microsoft.SharePoint.SPDailySchedule
# setting the
hour to execute at 0100 AM to 0200 AM
$sched.BeginHour = 1
$sched.EndHour = 2
$objTimerJobInstance.Schedule = $sched
$objTimerJobInstance.Update()
# Set the
schedule to the timerjob object and save the job schedule
$objTimerJobInstance.Schedule = $sched
$objTimerJobInstance.Update()
# Dispose
site
$objSPSite.Dispose()
Restart-TimerServices
}
#This method will execute the Timer Job.(helpful when testing
the timer jobs)
function global:Execute-TimerJob
{
# Open site
$objSPSite
= [Microsoft.SharePoint.SPSite]$webAppUrl
$objWebApplication
= $objSPSite.WebApplication
# Content DB
to execute job on
$contentDB
= $objWebApplication.ContentDatabases[0]
# Search for
the Job
$objTimerJobInstance
= $objWebApplication.JobDefinitions |
? { $_.Name -like $jobName }
if ($objTimerJobInstance)
{
Write-Host
"Executing Timer Job [" $objTimerJobInstance.Name
"]..."
$objTimerJobInstance.Execute($contentDB.Id)
Write-Host
"Job Executed successfully!"
}
else
{
Write-Host
"Job [" $jobName
"] not found"
}
# Dispose
site
$objSPSite.Dispose()
}
#
#
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# MAIN
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#
Install-TimerJob
# If you want to test the timer service, uncomment the below
method call
#Write-Host "Executing the Timer Job..."
#Execute-TimerJob