Pregunta

Utilizo foreach en My Scripting Para asegurarse de que obtenga cada web en cada sitio en una aplicación web específica para, en este caso, en la lista (y finalmente actualice) todas las bibliotecas de páginas en la SiteCollection. Me han acreditado echar un vistazo a SPSITEDAQUERY, lo que no toma tanto tiempo y use muchos menos recursos que mi método. El único problema es que parece que no puedo hacer que funcione incluso si sigo los blogs:

  • Uso de PowerShell para depurar rápidamente SpsiteDataQuyery < / a>
  • usando spsitedataquery con powershell
  • Script de PowerShell para obtener páginas de colección de sitios y elementos de la lista Cuentan con el objeto SPSITEDAQUERY .

    i Obtengo Sin resultado , demasiadas filas , Exception Llame GetseeData con 1 argumento y similares, pero nada realmente útil. Entonces, ¿me pregunto si es posible enumerar todas las bibliotecas de páginas en todas las web en todos los sitios en un WebApps específicos usando SPSITEDAQUERY?

    Este es mi script pesado de recursos actuales (que realmente funciona):

    # Add PS Snapin if not loaded
    $snapin = Get-PSSnapin | Where-Object {$_.Name -eq 'Microsoft.SharePoint.Powershell'} 
    if ($snapin -eq $null) 
    {    
        Write-Host "Loading SharePoint Powershell Snapin"    
        Add-PSSnapin "Microsoft.SharePoint.Powershell"  -EA SilentlyContinue
    }
    
    #Iterate all webs and print List URL
    $SPWebApp = Get-SPWebApplication "http://mywebapp/"
    
    foreach ($SPSite in $SPWebApp.Sites)
    {
        if ($SPSite -ne $null)
        {
            foreach ($SPWeb in $SPSite.AllWebs)
            {
                foreach ($list in $SPWeb.Lists)
                {
                    if ($list.Title.Contains("Pages"))
                    {
                        $ListURL = $SPWeb.url + "/" + $list.RootFolder.Url
                        Write-Host $ListURL
                    }
    
                    if ($SPWeb -ne $null)
                    {
                        $SPWeb.Dispose()
                    }
                }
            }
        }
    
        if ($SPSite -ne $null)
        {
            $SPSite.Dispose()
        }
    }
    

¿Fue útil?

Solución

El siguiente código de PowerShell enumera las páginas de todas las bibliotecas de páginas presentes en una colección de sitios determinada.La variación de esto se puede utilizar para enumerar todas las bibliotecas de páginas en una aplicación web determinada.Lo principal que debe notar aquí es ese ServerTemplate de la biblioteca de páginas en 850

$siteCollectionUrl = "http://sp2010"
$site =new-object Microsoft.SharePoint.SPSite($siteCollectionUrl)
$query = new-object Microsoft.SharePoint.SPSiteDataQuery
$query.Webs = "<Webs Scope='SiteCollection'>"
$query.Lists = "<Lists ServerTemplate='850' />"
$results = $site.rootweb.GetSiteData($query)
foreach($row in $results.rows)
{
  $listId = $row["ListId"]
  $webId = $row["WebId"]
  $childWeb = $site.OpenWeb([GUID]($webId))
  $pagesList = $childWeb.Lists[[GUID]($listId)];
  $itemUrl = $childWeb.Url + "/" + $pagesList.RootFolder.Url
  Write-Host $itemUrl 
  $childWeb.Dispose()
}
$site.Dispose()

Otros consejos

No soy un profesional de SharePoint.Pero le doy esto, si puede ayudarlo, se enfriará :)

http [dot] // www [dot] sharepointixfix [dot] com / 2012/06 / PowerShell-Script-to-Get-Site [DOT] HTML

(No puedo publicar más de 2 enlaces= /. Pero el primero anterior parece ser el más interesante)

http://wethinkwebecome.blogspot.fr/2011/11/PowerShell-SpsitedataQuery-debug.html

y, por supuesto, el de Microsoft:

http://msdn.microsoft.com/fr-fr/library/microsoft.sharepoint.spsitedataquery%28v=Office.12%29.aspx

Pido disculpas si es inútil= /

Licenciado bajo: CC-BY-SA con atribución
scroll top