SharePoint: Como re-iniciar el servicio de temporizador con PowerShell y programáticamente!

En esta ocasión os dejo como re-iniciar el servicio de temporizador (en concreto todas sus instancias en una granja de SharePoint) mediante el uso de PowerShell y el modelo de objetos de SharePoint:

   1: ############################################################################################################################################

   2: # This script allows to re-start all the SharePoint Timer Service instances in a SharePoint Farm

   3: # Required Parameters: N/A

   4: ############################################################################################################################################

   5:  

   6: If ((Get-PSSnapIn -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null ) 

   7: { Add-PSSnapIn -Name Microsoft.SharePoint.PowerShell }

   8:  

   9: $host.Runspace.ThreadOptions = "ReuseThread"

  10:  

  11: #

  12: #Definition of the function that allows to re-start all the SharePoint Timer Service instances in a SharePoint Farm

  13: function Re-StartSPTimerService

  14: {

  15:     try

  16:     {

  17:         $spFarm=Get-SPFarm

  18:         $spfTimerServcicesInstance=$spFarm.TimerService.Instances

  19:         foreach ($spfTimerServiceInstance in  $spfTimerServcicesInstances)

  20:         {

  21:             Write-Host "Re-starting the instance " $spfTimerServiceInstance.TypeName

  22:             $spfTimerServiceInstance.Stop()

  23:             $spfTimerServiceInstance.Start()

  24:             Write-Host "SharePoint Timer Service Instance" $spfTimerServiceInstance.TypeName "Re-Started"

  25:         }

  26:     }

  27:     catch [System.Exception]

  28:     {

  29:         write-host -f red $_.Exception.ToString()

  30:     }

  31: }

  32:  

  33: Start-SPAssignment –Global

  34: #Calling the function

  35: Re-StartSPTimerService

  36: Stop-SPAssignment –Global

  37:  

  38: Remove-PSSnapin Microsoft.SharePoint.PowerShell

Como veis, una vez accedemos a la granja con Get-SPFarm, resulta muy sencillo obtener todas las instancias del servicio de temporizador a través de TimerService.Instances y re-iniciar cada instancia llamando a los métodos Stop() y Start().

  • Haciendo uso del MO de Servidor quedaría (fijaros que es análogo):
   1: SPFarm spfFarm = SPFarm.Local;

   2: SPServiceInstanceDependencyCollection sptsiCollection = 

   3:     spfFarm.TimerService.Instances;                

   4:  

   5: foreach (SPTimerServiceInstance spiTimerService in sptsiCollection)

   6: {

   7:     Console.WriteLine("Re-Iniciando la instancia {0}", spiTimerService.TypeName);

   8:     spiTimerService.Stop();

   9:     spiTimerService.Start();

  10:     Console.WriteLine("Instancia del servicio {0} re-iniciada ", spiTimerService.TypeName);

  11: }