Lo script PowerShell permette di applicare il tema passato ricorsivamente a tutti i siti SharePoint 2007 (WSS3 - MOSS).
PowerShell
# Applica il tema ricorsivamente (SharePoint 2007)
#
# se non funge lanciare prima da linea di comando
# Set-ExecutionPolicy RemoteSigned
# eseguire con: powershell .\SPTreeSetTheme.ps1

# carico l'assembly che mi serve
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") 

$theme = "";

# routine ricorsiva per l'elenco dei siti
function ListWebs($webTop, $t)
{
  foreach($web in $webTop.Webs)
  {
    $web.ServerRelativeUrl + "-" + $theme ;
    #prima applico un tema qualsiasi (nel caso avessi già applicato il tema attuale)
    $web.ApplyTheme("Jet");
    #poi riapplico il tema passato
    $web.ApplyTheme($theme);
    $web.Theme ;
    ListWebs $web  ($t + 1);
    $web.Dispose();
  }
}

if ([String]::IsNullOrEmpty($args[0]) ) 
{
 "Imposta il thema dei siti"
 "es.: powershell .\SPTreeSetTheme.ps1 http://localhost nomeTema"
}
else 
{
  if ([String]::IsNullOrEmpty($args[1]) )
  {
   "Imposta il thema dei siti"
   "es.: powershell .\sptree.ps1 http://localhost nomeTema"
  }
  else
  {
    $url = $args[0];
    $theme = $args[1];

    trap { } & {
      # creo l'oggetto relativo alla site collection
      $site= new-object Microsoft.SharePoint.SPSite($url);
      # creo l'oggetto relativo al sito
      $web= $site.OpenWeb();
      # stampo il titolo
      $web.Title;
  
      # inizio la ricorsione sui figli
      ListWebs $web 0;
      # faccio pulizia
      $web.Close();
      $site.close();
    }
  }
}
Potrebbe interessarti anche: