2012-02-26 94 views
2

我想写一个PowerShell脚本,将运行在我的SharePoint 2010/2007页面,并将列出他们的页面布局,并将结果保存到文本文件。PowerShell脚本列出所有SharePoint 2010/2007页面及其布局

EnumeratePages:

运行下面的脚本,我又写道同时,我小步舞曲错误的acouple后得到异常已被调用的目标引发异常。 在T:\ listpages.ps1:75字符:15 + EnumeratePages < < < <( 'http://preportal.idc.ac.il') + CategoryInfo:NotSpecified:(:) [EnumeratePages],TargetInvocationException + FullyQualifiedErrorId:System.Reflection.TargetInvocationException,EnumeratePages

# Add SharePoint cmdlets reference 
Add-PSSnapin microsoft.sharepoint.powershell -ErrorAction SilentlyContinue 

function EnumeratePages($Url) { 
    $site = new-object Microsoft.SharePoint.SPSite $Url 

    foreach($web in $site.AllWebs) { 
     if ([Microsoft.SharePoint.Publishing.PublishingWeb]::IsPublishingWeb($web)) { 
      $pWeb = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($web) 
      $pages = $pWeb.PagesList 

      Write-Host "Processing Web:" $pWeb.Url "..." -ForegroundColor Magenta 

      foreach ($item in $pages.Items) { 
       $fileUrl = $pWeb.Url + $webUrl + "/" + $item.File.Url 
       Write-Host " " $fileUrl -ForegroundColor Green 
       foreach ($fld in $item.Fields) 
        { 
        if($fld.Title -and $fld.InternalName -and $item[$fld.InternalName]) 
        { 
        if($fld.InternalName -eq "PublishingPagelayout") 
        { 
         Write-Host "PublishingPagelayout: " + $item[$fld.InternalName].ToString() 
         Select "Page Url: ", $fileUrl, "PublishingPagelayout: ", $item[$fld.InternalName].ToString() | Format-List 
        } 
        } 

        #$spFile = $web.GetFile($fileUrl.ToString())        
        #if($spFile.Properties.Count -gt 0) 
        #{ 

        #} 
       }     
      } 
     } 
     else { 
      Write-Host " Not a publishing web:" $web.Url". Looking for Site Pages library." -ForegroundColor Magenta 
      $pages = $null 
      $pages = $web.Lists["Site Pages"] 

      if ($pages) { 
       Write-Host " " $pages.Title "found." -ForegroundColor Green 
       foreach ($item in $pages.Items) { 
        $fileUrl = $pWeb.Url + $webUrl + "/" + $item.File.Url        
        Write-Host " " $fileUrl -ForegroundColor Green  
        foreach ($fld in $item.Fields) 
        { 
         if($fld.Title -and $fld.InternalName -and $item[$fld.InternalName]) 
         { 
         if($fld.InternalName -eq "PublishingPagelayout") 
         { 
          Write-Host "PublishingPagelayout: " + $item[$fld.InternalName].ToString() 
          Select "Page Url: ", $fileUrl, "PublishingPagelayout: ", $item[$fld.InternalName].ToString() | Format-List 
         } 
         } 
        } 
        #$spFile = $web.GetFile($fileUrl)     
        #if($spFile.Properties.Count -gt 0) 
        #{ 

        #} 
      } 
      else { 
       Write-Host " Site Pages library not found." -ForegroundColor Red 
      } 
     } 

     Write-Host "... completed processing" $web "..." -ForegroundColor Magenta 
    } 
} 
} 


$row = EnumeratePages('http://server-name') 
$row > t:\SitePagesPropertiesReport2.txt 

请指教。

+1

您是否尝试过与ISE或调试的PowerGUI? – 2012-02-26 09:10:44

+0

尝试调试它。但是你说“几分钟后” - 运行脚本的几分钟?超时? – 2012-02-26 15:45:16

+0

运行脚本后几分钟。不是超时 – Hagai 2012-02-27 06:24:05

回答

2

这将做它发布页面:

filter Get-PublishingPages { 
    $pubweb = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($_) 
    $query = new-object Microsoft.SharePoint.SPQuery 
    $query.ViewAttributes = "Scope='Recursive'" 
    $pubweb.GetPublishingPages($query)  
} 

get-spweb $url | Get-PublishingPages | select Uri, Title, @{Name='PageLayout';Expression={$_.Layout.ServerRelativeUrl}}