Esempio di come estrarre la struttura (Tree) dei siti da SharePoint 2007 (MOSS) tramite PowerShell 1.0

PowerShell: SPTree.ps1

# se non funge lanciare prima da linea di comando
# Set-ExecutionPolicy RemoteSigned
# eseguire con: powershell .\SPTree.ps1

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

# routine ricorsiva per l'elenco dei siti
function ListWebs($webTop, $t){
  foreach($web in $webTop.Webs){
    $a = ".." * ($t + 1);
    $a + $web.Title;
    ListWebs $web  ($t + 1);
    $web.Close();
  }
}

# creo l'oggetto relativo alla site collection
$spsite= new-object Microsoft.SharePoint.SPSite("http://localhost");
# creo l'oggetto relativo al sito
$spweb= $spsite.OpenWeb();
# stampo il titolo
$spweb.Title;
# inizio la ricorsione sui figli
ListWebs $spweb 0;
# faccio pulizia
$spweb.Close();
$spsite.close();

un altro esempio che elenca anche la pagina di default dei siti di tipo publishing

PowerShell

# Crea un albero (tree) dei sit 
# ed elenca la pagina di default di ogni sito
# e l'utente che ha creato la pagina
# l'astersco * indica le pagine di tipo publihing
# se non funge lanciare prima da linea di comando
# Set-ExecutionPolicy RemoteSigned
# eseguire con: powershell .\SPTree.ps1 http://localhost

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

# routine ricorsiva per l'elenco dei siti
function ListWebs($webTop, $t){
  foreach($web in $webTop.Webs){
    $url = "";
   if ([Microsoft.SharePoint.Publishing.PublishingWeb]::IsPublishingWeb($web)) {
     $pubWeb = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($web);
     $url = $pubWeb.DefaultPage.ServerRelativeUrl + " (" + $pubWeb.CreatedBy + ") *";
	# $pubWeb.DefaultPage.ModifiedBy;
   } else {
     $url = $web.ServerRelativeUrl + "/default.aspx";
   }

    #  $url = String.Concat(requestUrl, publishingWeb.DefaultPage.Url);
    $a = " " * ($t + 1);
    $a + "[" + $web.Title + "] " + $url;
    ListWebs $web  ($t + 1);
    $web.Close();
  }
}

if ([String]::IsNullOrEmpty($args[0])) {
 "es.: powershell .\sptree.ps1 http://localhost"
} else {
  $p = $args[0];
  "Parametro: " + $p;
 trap { } & {
    # creo l'oggetto relativo alla site collection
    $spsite= new-object Microsoft.SharePoint.SPSite($p);
    # creo l'oggetto relativo al sito
    $spweb= $spsite.OpenWeb();
    # stampo il titolo
    $spweb.Title;
    # inizio la ricorsione sui figli
    ListWebs $spweb 0;
    # faccio pulizia
    $spweb.Close();
    $spsite.close();
  }
}
Tags:
PowerShell200 SharePoint498 SharePoint 2007218
Potrebbe interessarti anche: